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

Merge branch 'scale-amd64' of git+ssh://amsterdam.csail.mit.edu/home/am0/6.828/xv6 into scale-amd64

((c-mode
(indent-tabs-mode . nil)
(c-file-style . "bsd")
(c-basic-offset . 2))
(c++-mode
(indent-tabs-mode . nil)
(c-file-style . "bsd")
(c-basic-offset . 2))
)
......@@ -4,8 +4,11 @@
#include "user.h"
#include "fcntl.h"
#include "mtrace.h"
#include "pthread.h"
static int cpu;
static pthread_barrier_t bar;
enum { ncore = 8 };
void
next()
......@@ -18,11 +21,10 @@ next()
cpu++;
}
void
vmsharing(void)
void*
vmsharing(void* arg)
{
for (int i = 0; i < 8; i++) {
next();
u64 i = (u64) arg;
volatile char *p = (char*)(0x40000UL + i * 4096);
mtenable("xv6-mapsharing");
......@@ -34,44 +36,52 @@ vmsharing(void)
if (unmap((void *) p, 4096) < 0)
die("unmap failed");
mtdisable("xv6-mapsharing");
}
return 0;
}
void
fssharing(void)
void*
fssharing(void* arg)
{
u64 i = (u64) arg;
// Note that we keep these files open; otherwise all of these
// operations will share the abstract FD object and we won't get any
// results.
next();
mtenable("xv6-fssharing");
open("a", O_CREATE|O_RDWR);
mtdisable("xv6-fssharing");
char filename[32];
snprintf(filename, sizeof(filename), "f%d", i);
next();
mtenable("xv6-fssharing");
open("b", O_CREATE|O_RDWR);
mtdisable("xv6-fssharing");
open(filename, O_CREATE|O_RDWR);
next();
mtenable("xv6-fssharing");
open("a", O_RDWR);
mtdisable("xv6-fssharing");
pthread_barrier_wait(&bar);
next();
mtenable("xv6-fssharing");
open("b", O_RDWR);
mtdisable("xv6-fssharing");
for (u64 j = 0; j < ncore; j++) {
snprintf(filename, sizeof(filename), "f%d", j);
open(filename, O_RDWR);
}
return 0;
}
int
main(int ac, char **av)
{
void* (*op)(void*) = 0;
if (ac == 2 && strcmp(av[1], "vm") == 0)
vmsharing();
op = vmsharing;
else if (ac == 2 && strcmp(av[1], "fs") == 0)
fssharing();
op = fssharing;
else
fprintf(1, "usage: %s vm|fs\n", av[0]);
if (op) {
mtenable_type(mtrace_record_ascope, "xv6-asharing");
pthread_barrier_init(&bar, 0, ncore);
for (u64 i = 0; i < ncore; i++) {
next();
pthread_t tid;
pthread_create(&tid, 0, op, (void*) i);
}
mtdisable("xv6-asharing");
}
}
......@@ -33,8 +33,9 @@ char* strncpy(char *s, const char *t, size_t n);
mtrace_lock_register(RET_IP(), ptr, lockname(ptr), mtrace_lockop_release, 0)
// Enable/disable all mtrace logging
#define mtenable(name) mtrace_enable_set(1, name)
#define mtdisable(name) mtrace_enable_set(0, name)
#define mtenable(name) mtrace_enable_set(mtrace_record_movement, name)
#define mtenable_type(type, name) mtrace_enable_set(type, name)
#define mtdisable(name) mtrace_enable_set(mtrace_record_disable, name)
// Log the number of operations
static inline void mtops(u64 n)
......@@ -54,6 +55,7 @@ static inline void mtops(u64 n)
#define mtrec(cpu) do { } while (0)
#define mtign(cpu) do { } while (0)
#define mtenable(name) do { } while (0)
#define mtenable_type(type, name) do { } while (0)
#define mtdisable(name) do { } while (0)
#define mtops(n) do { } while (0)
#endif
......@@ -361,6 +361,7 @@ fork(int flags)
np->parent = myproc();
*np->tf = *myproc()->tf;
np->cpu_pin = myproc()->cpu_pin;
// Clear %eax so that fork returns 0 in the child.
np->tf->rax = 0;
......
......@@ -3,7 +3,7 @@
struct seed {
u64 v;
} __mapalign__;
} __mpalign__;
static struct seed seeds[NCPU] __mpalign__;
u64
......
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论