#include #include #include #include #include #include #include #include #include #define MEGABYTE 1048576 int main (void) { int fd; unsigned long int r; void *m; void *p; void *b; struct timeval ts; struct timeval te; float e; fd = open("/home/jwb/bigfile", O_RDWR); if (-1 == fd) exit(EXIT_FAILURE); m = mmap(0, 1024 * MEGABYTE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); if (NULL == m) exit(EXIT_FAILURE); b = malloc(16 * MEGABYTE); if (NULL == b) exit(EXIT_FAILURE); srand(1); for (;;) { r = (unsigned long int)((1024.0 - 16.0) * MEGABYTE * rand() / RAND_MAX + 0.0); p = m + r; gettimeofday(&ts, NULL); memcpy(b, p, 16 * MEGABYTE); gettimeofday(&te, NULL); e = te.tv_sec - ts.tv_sec + (te.tv_usec - ts.tv_usec)/1000000.0; printf("Read: %.2f MB/sec\n", 16/e); r = (unsigned long int)((1024.0 - 16.0) * MEGABYTE * rand() / RAND_MAX + 0.0); p = m + r; gettimeofday(&ts, NULL); memset(p, '1', 16 * MEGABYTE); fsync(fd); gettimeofday(&te, NULL); e = te.tv_sec - ts.tv_sec + (te.tv_usec - ts.tv_usec)/1000000.0; printf("Write: %.2f MB/sec\n", 16/e); fflush(stdout); } exit(EXIT_SUCCESS); }