SHOW:
|
|
- or go back to the newest paste.
| 1 | #include <stdio.h> | |
| 2 | #include <sys/time.h> | |
| 3 | #include <sys/mman.h> | |
| 4 | #include <string.h> | |
| 5 | #include <stdlib.h> | |
| 6 | ||
| 7 | double mydifftime(struct timeval *tv1, struct timeval *tv2) | |
| 8 | {
| |
| 9 | return ((tv1->tv_sec - tv2->tv_sec) * 1000000.0 + | |
| 10 | (tv1->tv_usec - tv2->tv_usec)) / 1000000.0; | |
| 11 | } | |
| 12 | ||
| 13 | int main() | |
| 14 | {
| |
| 15 | int MMAP_SIZE = 1<<20; | |
| 16 | int i; | |
| 17 | printf(" size \tmmap time\tmunmap time\tt1/t2 \tt2/size\n");
| |
| 18 | ||
| 19 | - | for (i = 0; i < 9; i++, MMAP_SIZE <<= 1) {
|
| 19 | + | for (i = 0; i < 11; i++, MMAP_SIZE <<= 1) {
|
| 20 | ||
| 21 | struct timeval tv1, tv2; | |
| 22 | double t1, t2; | |
| 23 | ||
| 24 | gettimeofday(&tv1, NULL); | |
| 25 | ||
| 26 | void *addr = mmap(NULL, MMAP_SIZE, PROT_READ | PROT_WRITE, | |
| 27 | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); | |
| 28 | gettimeofday(&tv2, NULL); | |
| 29 | ||
| 30 | if (addr == MAP_FAILED) | |
| 31 | abort(); | |
| 32 | t1 = mydifftime(&tv2, &tv1); | |
| 33 | ||
| 34 | /* commit memory */ | |
| 35 | memset(addr, 1, MMAP_SIZE); | |
| 36 | ||
| 37 | gettimeofday(&tv1, NULL); | |
| 38 | munmap(addr, MMAP_SIZE); | |
| 39 | gettimeofday(&tv2, NULL); | |
| 40 | t2 = mydifftime(&tv2, &tv1); | |
| 41 | ||
| 42 | printf("%*d\t%f\t%f\t%f\t%f\n", 10, MMAP_SIZE, t1, t2, t2/t1,
| |
| 43 | - | MMAP_SIZE/1000000.0/t2); |
| 43 | + | t2*100000000.0/(MMAP_SIZE)); |
| 44 | } | |
| 45 | } |