Speedup sbrk tst a bit (forking 100Mbyte processes is slow)

This commit is contained in:
Frans Kaashoek 2011-08-08 09:20:29 -04:00
parent 6479766334
commit 11b7438b10

View file

@ -1238,7 +1238,7 @@ forktest(void)
void void
sbrktest(void) sbrktest(void)
{ {
int fds[2], pid, pids[32], ppid; int fds[2], pid, pids[10], ppid;
char *a, *b, *c, *lastaddr, *oldbrk, *p, scratch; char *a, *b, *c, *lastaddr, *oldbrk, *p, scratch;
uint amt; uint amt;
@ -1310,6 +1310,13 @@ sbrktest(void)
exit(); exit();
} }
a = sbrk(0);
c = sbrk(-(sbrk(0) - oldbrk));
if(c != a){
printf(stdout, "sbrk downsize failed, a %x c %x\n", a, c);
exit();
}
// can we read the kernel's memory? // can we read the kernel's memory?
for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){ for(a = (char*)(KERNBASE); a < (char*) (KERNBASE+2000000); a += 50000){
ppid = getpid(); ppid = getpid();
@ -1328,15 +1335,14 @@ sbrktest(void)
// if we run the system out of memory, does it clean up the last // if we run the system out of memory, does it clean up the last
// failed allocation? // failed allocation?
sbrk(-(sbrk(0) - oldbrk));
if(pipe(fds) != 0){ if(pipe(fds) != 0){
printf(1, "pipe() failed\n"); printf(1, "pipe() failed\n");
exit(); exit();
} }
for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){ for(i = 0; i < sizeof(pids)/sizeof(pids[0]); i++){
if((pids[i] = fork()) == 0){ if((pids[i] = fork()) == 0){
// allocate the full 640K // allocate a lot of memory
sbrk((640 * 1024) - (uint)sbrk(0)); sbrk(BIG - (uint)sbrk(0));
write(fds[1], "x", 1); write(fds[1], "x", 1);
// sit around until killed // sit around until killed
for(;;) sleep(1000); for(;;) sleep(1000);