提交 b11c28b9 创建 作者: Nickolai Zeldovich's avatar Nickolai Zeldovich

forktree workload

上级 2c8b0cbe
...@@ -181,6 +181,7 @@ UPROGS=\ ...@@ -181,6 +181,7 @@ UPROGS=\
_thrtest\ _thrtest\
_sleep\ _sleep\
_maptest\ _maptest\
_forktree\
fs.img: mkfs README $(UPROGS) fs.img: mkfs README $(UPROGS)
./mkfs fs.img README $(UPROGS) ./mkfs fs.img README $(UPROGS)
......
#include "types.h"
#include "stat.h"
#include "user.h"
#include "xv6-mtrace.h"
#define NCHILD 2
#define NDEPTH 6
char*
strncpy(char *s, const char *t, int n)
{
int tlen = strlen((char *)t);
memmove(s, (char *)t, n > tlen ? tlen : n);
if (n > tlen)
s[tlen] = 0;
return s;
}
void*
memcpy(void *dst, const void *src, uint n)
{
return memmove(dst, (void *)src, n);
}
void
forktree(void)
{
uint depth = 0;
printf(1, "fork tree\n");
mtrace_enable_set(1, "xv6-forktree");
next_level:
//printf(1, "pid %d, depth %d\n", getpid(), depth);
if (depth >= NDEPTH)
exit();
for (uint i = 0; i < NCHILD; i++) {
int pid = fork(0);
if (pid < 0) {
printf(1, "fork error\n");
exit();
}
if (pid == 0) {
depth++;
goto next_level;
}
}
for (uint i = 0; i < NCHILD; i++) {
if (wait() < 0) {
printf(1, "wait stopped early\n");
exit();
}
}
if (wait() != -1) {
printf(1, "wait got too many\n");
exit();
}
if (depth > 0)
exit();
struct mtrace_appdata_entry entry;
entry.u64 = 0;
mtrace_appdata_register(&entry);
mtrace_enable_set(0, "xv6-forktree");
printf(1, "fork tree OK\n");
halt();
}
int
main(void)
{
forktree();
exit();
}
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#define NDEV 10 // maximum major device number #define NDEV 10 // maximum major device number
#define ROOTDEV 1 // device number of file system root disk #define ROOTDEV 1 // device number of file system root disk
#define USERTOP 0xA0000 // end of user address space #define USERTOP 0xA0000 // end of user address space
#define PHYSTOP 0x1000000 // use phys mem up to here as free pool #define PHYSTOP 0x10000000 // use phys mem up to here as free pool
#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 MINCYCTHRESH 1000000 // min cycles a proc executes on a core before allowed to be stolen
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论