Hi Hans,
On Feb 28, 2006, at 12:11, Hans Reiser wrote:
Please describe it in more detail.
Well, the error I'm getting is this:
Feb 21 13:10:22 ecbuild-10 kernel: WARNING: Flushing like mad: 16384
The C program I'm running to do the test is this:
main(int argc, char **argv)
{
char buf[1024];
char dir[1024];
int i,j,k;
int ret;
int fd;
int *sequence;
struct timeval start, unlinktime, end;
if(argc != 2)
{
fprintf(stderr, "Usage: %s <base directory>\n", argv[0]);
exit(1);
}
strncpy(dir, argv[1], 1024);
if(chdir(dir))
{
perror("chdir");
exit(1);
}
for(i = 0; i < 256; i++)
{
snprintf(buf, 1024, "%d", i);
ret = mkdir(buf, S_IRWXU);
if(ret && (errno != EEXIST))
{
perror("mkdir");
exit(1);
}
}
{
sequence = sequence20000;
gettimeofday(&start, NULL);
fprintf(stderr, "Starting %d run %d.%d.\n",
256 * 20000, start.tv_sec, start.tv_usec);
for(i = 0; i < 256; i++)
{
for(j = 0; j < 20000; j++)
{
snprintf(buf, 1024, "%d/%d", i, j);
fd = open(buf, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
if(fd == -1)
{
perror("open");
exit(1);
}
close(fd);
}
fprintf(stderr, "Done %d\n", i);
}
gettimeofday(&unlinktime, NULL);
fprintf(stderr, "Starting %d unlink %d.%d, elapsed time was %d.\n",
256 * 20000, unlinktime.tv_sec, unlinktime.tv_usec,
unlinktime.tv_sec - start.tv_sec);
for(i = 0; i < 20000; i++)
{
for(j = 0; j < 256; j++)
{
snprintf(buf, 1024, "%d/%d", j, sequence[i]);
unlink(buf);
if(fd == -1)
{
perror("unlink");
exit(1);
}
}
fprintf(stderr, "Done %d\n", i);
}
gettimeofday(&end, NULL);
fprintf(stderr, "Done with %d unlink %d.%d, elapsed time was %d.
\n",
20000 * 256, end.tv_sec, end.tv_usec,
end.tv_sec - unlinktime.tv_sec);
}
exit(0);
}
sequence20000 is an array which contains a sequence from 1 to 20000
randomly ordered.
Alec