View difference between Paste ID: 9HgqS3Tv and Ej77QgfE
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
}