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

directory lookup workload, with separate dirs for now

上级 50dfd90f
...@@ -184,6 +184,7 @@ UPROGS=\ ...@@ -184,6 +184,7 @@ UPROGS=\
_forktree\ _forktree\
_forkexectree\ _forkexectree\
_mapbench\ _mapbench\
_dirbench\
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"
#include "x86.h"
#include "param.h"
#include "fcntl.h"
enum { nthread = 2 };
enum { nfile = 10 };
enum { nlookup = 1000 };
char dirs[nthread][MAXNAME];
void
bench(uint tid)
{
char pn[MAXNAME];
for (uint i = 0; i < nfile; i++) {
snprintf(pn, sizeof(pn), "%s/f:%d:%d", dirs[tid], tid, i);
int fd = open(pn, O_CREATE | O_RDWR);
if (fd < 0)
printf(1, "create failed");
close(fd);
}
for (uint i = 0; i < nlookup; i++) {
snprintf(pn, sizeof(pn), "%s/f:%d:%d", dirs[tid], tid, (i % nfile));
int fd = open(pn, O_RDWR);
if (fd < 0)
printf(1, "open failed");
close(fd);
}
exit();
}
int
main(void)
{
for (uint i = 0; i < nthread; i++) {
snprintf(dirs[i], sizeof(dirs[i]), "/db%d", i);
if (mkdir(dirs[i]) < 0)
printf(1, "mkdir failed");
}
mtrace_enable_set(1, "xv6-dirbench");
printf(1, "dirbench[%d]: start\n", getpid());
for(uint i = 0; i < nthread; i++) {
int pid = fork(0);
if (pid == 0)
bench(i);
}
for (uint i = 0; i < nthread; i++)
wait();
mtrace_enable_set(0, "xv6-dirbench");
printf(1, "dirbench[%d]: done\n", getpid());
halt();
exit();
}
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论