Tag: tlb

每个mmap / access / munmap有两个TLB-miss

for (int i = 0; i < 100000; ++i) { int *page = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); page[0] = 0; munmap(page, PAGE_SIZE); } 我期望在用户空间中获得~100000 dTLB-store-miss,每次迭代一次(同样~100000页错误和内核的dTLB-load-miss)。 运行以下命令,结果大约是我期望的2倍。 如果有人能澄清为什么会这样,我将不胜感激: perf stat -e dTLB-store-misses:u ./test Performance counter stats for ‘./test’: 200,114 dTLB-store-misses 0.213379649 seconds time elapsed PS我已经validation并确定生成的代码没有引入任何可以certificate这个结果的东西。 此外,我确实得到~100000页错误和dTLB加载未命中:k。