提交 f99953a0 创建 作者: Silas Boyd-Wickizer's avatar Silas Boyd-Wickizer

Rejigger param.h, add per-machine options.

e.g. "make" and "make HW=qemu" build for qemu "make HW=josmp" builds for josmp
上级 96d12f3e
#pragma once #pragma once
#define NPROC 64 // maximum number of processes #define NPROC 64 // maximum number of processes
#define KSTACKSIZE 8192 // size of per-process kernel stack #define KSTACKSIZE 8192 // size of per-process kernel stack
#define NCPU 4 // maximum number of CPUs
#define NOFILE 16 // open files per process #define NOFILE 16 // open files per process
#define NFILE 100 // open files per system #define NFILE 100 // open files per system
#define NBUF 10000 // size of disk block cache #define NBUF 10000 // size of disk block cache
...@@ -10,12 +9,21 @@ ...@@ -10,12 +9,21 @@
#define ROOTDEV 1 // device number of file system root disk #define ROOTDEV 1 // device number of file system root disk
#define MAXARG 32 // max exec arguments #define MAXARG 32 // max exec arguments
#define MAXNAME 16 // max string names #define MAXNAME 16 // max string names
#define MINCYCTHRESH 1000000 // min cycles a proc executes on a core before allowed to be stolen
#define INF (~0UL) #define INF (~0UL)
#define CACHELINE 64 // cache line size #define CACHELINE 64 // cache line size
#define MTRACE 0
#define PHYSTOP 0xE000000 // use phys mem up to here as free pool
#define CPUKSTACKS (NPROC + NCPU) #define CPUKSTACKS (NPROC + NCPU)
#define QUANTUN 10 // scheduling time quantum and tick length (in msec) #define QUANTUN 10 // scheduling time quantum and tick length (in msec)
#define WQSHIFT 4 // 2^WORKSHIFT work queue slots #define WQSHIFT 4 // 2^WORKSHIFT work queue slots
#define PHYSTOP 0xE000000 // use phys mem up to here as free pool
#define VICTIMAGE 1000000 // cycles a proc executes before an eligible victim
#if defined(HW_josmp)
#define NCPU 16 // maximum number of CPUs
#define MTRACE 0
#define WQENABLE 0 // Enable work queue
#elif defined(HW_qemu)
#define NCPU 4 // maximum number of CPUs
#define MTRACE 0
#define WQENABLE 0 // Enable work queue #define WQENABLE 0 // Enable work queue
#else
#error "Unknown HW"
#endif
...@@ -69,7 +69,7 @@ steal(void) ...@@ -69,7 +69,7 @@ steal(void)
acquire(&q->lock); acquire(&q->lock);
STAILQ_FOREACH(p, &q->q, runqlink) { STAILQ_FOREACH(p, &q->q, runqlink) {
if (p->state == RUNNABLE && !p->cpu_pin && if (p->state == RUNNABLE && !p->cpu_pin &&
p->curcycles != 0 && p->curcycles > MINCYCTHRESH) p->curcycles != 0 && p->curcycles > VICTIMAGE)
{ {
steal = p; steal = p;
break; break;
...@@ -80,7 +80,7 @@ steal(void) ...@@ -80,7 +80,7 @@ steal(void)
if (steal) { if (steal) {
acquire(&steal->lock); acquire(&steal->lock);
if (steal->state == RUNNABLE && !steal->cpu_pin && if (steal->state == RUNNABLE && !steal->cpu_pin &&
steal->curcycles != 0 && steal->curcycles > MINCYCTHRESH) steal->curcycles != 0 && steal->curcycles > VICTIMAGE)
{ {
delrun(steal); delrun(steal);
steal->curcycles = 0; steal->curcycles = 0;
...@@ -182,7 +182,7 @@ steal_cb(void *vk, void *v, void *arg) ...@@ -182,7 +182,7 @@ steal_cb(void *vk, void *v, void *arg)
return 0; return 0;
} }
if (p->curcycles == 0 || p->curcycles > MINCYCTHRESH) { if (p->curcycles == 0 || p->curcycles > VICTIMAGE) {
if (sched_debug) if (sched_debug)
cprintf("cpu%d: steal %d (cycles=%d) from %d\n", cprintf("cpu%d: steal %d (cycles=%d) from %d\n",
mycpu()->id, p->pid, (int)p->curcycles, p->cpuid); mycpu()->id, p->pid, (int)p->curcycles, p->cpuid);
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论