You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.6 KiB
51 lines
1.6 KiB
#include <errno.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/mman.h>
|
|
#include <sys/time.h>
|
|
|
|
#include "pagingtest.h"
|
|
|
|
int mmap_test(int test_runs, unsigned long long alloc_size) {
|
|
void *buf;
|
|
int ret = -1;
|
|
int i;
|
|
struct timeval begin_time, end_time, elapsed_time;
|
|
struct timeval total_time_mmap, total_time_munmap, total_time_in, total_time_out;
|
|
|
|
timerclear(&total_time_mmap);
|
|
timerclear(&total_time_munmap);
|
|
timerclear(&total_time_in);
|
|
timerclear(&total_time_out);
|
|
|
|
for (i = 0; i < test_runs; i++) {
|
|
gettimeofday(&begin_time, NULL);
|
|
buf = mmap(NULL, alloc_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
|
gettimeofday(&end_time, NULL);
|
|
if (buf == ((void *)-1)) {
|
|
fprintf(stderr, "Failed to mmap anonymous memory: %s\n", strerror(errno));
|
|
goto err_map;
|
|
}
|
|
timersub(&end_time, &begin_time, &elapsed_time);
|
|
timeradd(&total_time_mmap, &elapsed_time, &total_time_mmap);
|
|
|
|
gettimeofday(&begin_time, NULL);
|
|
munmap(buf, alloc_size);
|
|
gettimeofday(&end_time, NULL);
|
|
timersub(&end_time, &begin_time, &elapsed_time);
|
|
timeradd(&total_time_mmap, &elapsed_time, &total_time_mmap);
|
|
}
|
|
|
|
printf("mmap: %llu us\n", total_time_mmap.tv_sec * USEC_PER_SEC + total_time_mmap.tv_usec);
|
|
printf("munmap: %llu us\n", total_time_munmap.tv_sec * USEC_PER_SEC + total_time_munmap.tv_usec);
|
|
|
|
ret = 0;
|
|
goto end;
|
|
// err:
|
|
munmap(buf, alloc_size); // unreached?
|
|
end:
|
|
err_map:
|
|
return ret;
|
|
}
|