【发布时间】:2018-07-11 03:57:34
【问题描述】:
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-misses,每次迭代一个(对于内核也有约 100000 个页面错误和 dTLB-load-misses)。运行以下命令,结果大约是我预期的 2 倍。如果有人能澄清为什么会这样,我将不胜感激:
perf stat -e dTLB-store-misses:u ./test
Performance counter stats for './test':
200,114 dTLB-store-misses
0.213379649 seconds time elapsed
附:我已经验证并确信生成的代码不会引入任何可以证明此结果的内容。此外,我确实得到了大约 100000 个页面错误和 dTLB-load-misses:k。
【问题讨论】:
标签: c performance performancecounter perf tlb