#include "../source/uapi/monitor_user.h" #include #include #include #include #define HUGEPAGE_SIZE (1024 * 1024 * 1024) // Huge Page 大小为 1GB int main() { int fd; void *addr; watch_arg w_arg = {0}; // 打开一个 hugetlbfs 文件 fd = open("/run/mrzcpd/huge_pages/hugepagefile", O_CREAT | O_RDWR, 0755); if (fd < 0) { perror("open"); return 1; } // 映射 Huge Page 内存 addr = mmap(0, HUGEPAGE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0); if (addr == MAP_FAILED) { perror("mmap"); close(fd); return 1; } // 大页内存 int 类型变量, for ++ int *p = (int *)addr; *p = 0; w_arg = (watch_arg){ .task_id = getpid(), .ptr = p, .name = "hptest", .length_byte = sizeof(int), .threshold = 20, .is_unsigned = 0, .above_threshold = 1, .time_ns = 2000, // on hyper-v, 1us will block all system. 2us just fine, maybe 1us is too short for hyper-v }; start_watch(w_arg); for (int i = 0; i < 100; i++) { (*p)++; printf("p = %d\n", *p); sleep(1); } // 释放 Huge Page 内存 if (munmap(addr, HUGEPAGE_SIZE) == -1) { perror("munmap"); close(fd); return 1; } close(fd); return 0; }