You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

静态编译二进制的缓存效应:未出现预期的缓存缺失减少

问题解答

1. Page Cache的共享性与静态链接的关系

  • Page Cache是跨进程共享的,由Linux内核统一管理,用于缓存磁盘文件数据,和程序是否为静态链接无关。
  • 内核通过文件的inode和数据偏移索引Page Cache条目:只有当多个进程访问同一inode的文件(如原文件、硬链接)时,才能复用已缓存的页;如果是内容相同但inode不同的独立文件(如你编译生成的hello1和hello2),内核不会共享它们的Page Cache。

2. 缓存缺失未减少的原因

核心原因是你生成了两个独立的二进制文件(hello1和hello2),它们的inode不同,因此hello1执行后缓存的页无法被hello2复用:

  • 从perf结果的major-faults字段可以看出,两次执行都出现了9次主缺页,说明hello2执行时仍需要从磁盘加载部分数据页,没有利用到hello1的Page Cache。
  • Spectre/Meltdown的软硬件缓解措施(如KPTI)主要影响用户态与内核态的页表隔离、TLB管理,不会阻止跨进程共享同一文件的Page Cache,因此不是导致该现象的原因。

验证方法

如果将hello2改为hello1的硬链接:

ln hello1 hello2

再重复执行两次taskset -c 31 ./hello1和taskset -c 31 ./hello2,就能观察到第二次执行的缓存缺失率显著降低,major-faults也会大幅减少甚至变为0。

内容的提问来源于stack exchange,提问作者Khrn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:41:11