#include #include #include #include #include #include #include #include #include unsigned long long tv_to_ms(struct timeval tv) { return tv.tv_sec * 1000 + tv.tv_usec / 1000; } void main() { char c; pid_t pid; int i; int j = 0; struct timeval tv_b, tv_e;; #define SIZE 100*1024*1024 unsigned long *p = mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (!p) { perror("fail to get memory"); exit(-1); } madvise(p, SIZE, MADV_HUGEPAGE); for (j = 0; j < SIZE / 8; j+=128) *(p + j) = j; for (i = 0; i < 3; i++) { gettimeofday(&tv_b, NULL); madvise(p, SIZE, MADV_PAGEOUT); gettimeofday(&tv_e, NULL); printf("swp out bandwidth: %ld bytes/ms\n", SIZE/(tv_to_ms(tv_e) - tv_to_ms(tv_b))); gettimeofday(&tv_b, NULL); for (j = 0; j < SIZE / 8; j+=128) *(p + j) = j; gettimeofday(&tv_e, NULL); printf("swp in bandwidth: %ld bytes/ms\n", SIZE/(tv_to_ms(tv_e) - tv_to_ms(tv_b))); } //madvise(p, SIZE, MADV_PAGEOUT); //while(1) { // sleep(100); //} }