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

大页内存/普通内存CPU缓存映射差异及性能测试异常原因咨询

服务器硬件与系统信息
  • CPU型号: Intel(R) Xeon(R) CPU E5-2667 v3 @ 3.20GHz

  • 步进: 2

  • CPU主频: 3200.000 MHz

  • CPU最高主频: 3200.0000 MHz

  • CPU最低主频: 1200.0000 MHz

  • BogoMIPS: 6391.94

  • 虚拟化支持: VT-x

  • L1d缓存: 32K

  • L1i缓存: 32K

  • L2缓存: 256K

  • L3缓存: 20480K

  • 操作系统内核版本: 3.10.0-1160.el7.x86_64

测试背景与方法

我在服务器上开展性能测试,对大页内存(hugepage)的表现存在疑惑。使用test-tlb工具,运行的Shell脚本如下:

for i in 128k 512k 1M 2M 4M 8M 16M 32M 64M 128M; do echo "$i:"; ./test-tlb -H 4G $i ; ./test-tlb 4G $i ; ./test-tlb -Hr 4G $i ; ./test-tlb -r 4G $i ; done

参数说明:

  • -H: 使用大页内存(透明大页或预留大页)
  • -r: 随机访问模式,无参数为顺序访问
测试结果
128k:
 87.24ns (~279.2 cycles)
 98.24ns (~314.4 cycles)
 90.07ns (~288.2 cycles)
108.19ns (~346.2 cycles)
512k:
 87.17ns (~279.0 cycles)
 92.55ns (~296.1 cycles)
 90.51ns (~289.6 cycles)
 95.03ns (~304.1 cycles)
1M:
 88.28ns (~282.5 cycles)
 34.73ns (~111.1 cycles)
 90.76ns (~290.4 cycles)
 36.47ns (~116.7 cycles)
2M:
 91.01ns (~291.2 cycles)
 34.91ns (~111.7 cycles)
 91.56ns (~293.0 cycles)
 35.51ns (~113.6 cycles)
4M:
 90.92ns (~290.9 cycles)
 34.96ns (~111.9 cycles)
 91.62ns (~293.2 cycles)
 35.46ns (~113.5 cycles)
8M:
 90.99ns (~291.2 cycles)
 35.04ns (~112.1 cycles)
 91.55ns (~293.0 cycles)
 35.31ns (~113.0 cycles)
16M:
 77.65ns (~248.5 cycles)
 35.38ns (~113.2 cycles)
 78.23ns (~250.4 cycles)
 35.49ns (~113.6 cycles)
32M:
 20.51ns (~65.6 cycles)
 35.47ns (~113.5 cycles)
 20.61ns (~65.9 cycles)
 35.96ns (~115.1 cycles)
64M:
 21.06ns (~67.4 cycles)
 25.61ns (~81.9 cycles)
 20.66ns (~66.1 cycles)
 23.35ns (~74.7 cycles)
128M:
 21.12ns (~67.6 cycles)
 14.64ns (~46.8 cycles)
 20.69ns (~66.2 cycles)
 14.92ns (~47.7 cycles)

注:每组结果依次对应顺序大页、顺序普通页、随机大页、随机普通页的访问延迟

问题

从1MB步长开始,大页内存的访问延迟反而比普通页更高,且透明大页(THP)和预留大页结果一致。请问这是硬件还是操作系统内核层面的因素导致的?


分析与解答

1. 硬件层面:Xeon E5-2667 v3的TLB特性限制

Xeon E5-2667 v3基于Haswell架构,其TLB(翻译后备缓冲器)结构有明确的容量限制:

  • L1d TLB:每个核心支持64个4KB页条目、32个2MB页条目、4个1GB页条目
  • L2 TLB:每个核心支持1024个4KB页条目、128个2MB/1GB页条目

当测试步长为1MB时,大页模式实际使用的是2MB标准大页(Linux默认大页大小),此时会出现两个关键问题:

  • 顺序访问时,1MB步长会频繁跨越2MB大页的边界,每次跨边界都需要重新加载TLB条目,TLB miss概率显著上升;而普通4KB页模式下,1MB步长仅需256个4KB页条目,远低于L1+L2 TLB的总容量,TLB miss极少。
  • 只有当步长足够大(如32MB及以上)时,普通页需要的TLB条目数量(32MB/4KB=8192个)远超L2 TLB容量,TLB miss急剧增加;而大页仅需16个2MB条目,完全在TLB容量范围内,此时大页的优势才会显现。

2. 操作系统内核层面:CentOS 7.9大页实现的局限性

  • 透明大页(THP)的对齐开销:CentOS 7默认THP策略为always,但对于1MB这种非2MB对齐的步长访问,THP会频繁触发大页拆分或回退到普通页的逻辑,引入额外内核开销,拉高延迟。
  • 预留大页的严格对齐要求:预留大页必须按2MB边界分配,1MB步长访问会频繁跨越对齐边界,触发更多TLB刷新操作;而普通页无严格对齐要求,访问模式更适配步长。
  • 老版本内核的优化不足:3.10.x属于较老的稳定版内核,THP和大页的调度优化远不如5.x+版本,对非标准步长的访问场景,大页的额外开销更明显。

3. 测试工具的行为影响

test-tlb的-H参数会尝试分配连续的大页内存,但1MB步长无法匹配大页的整数倍,导致内存访问的局部性被破坏,反而不如普通页的分散分配更适配步长,缓存和TLB利用率下降。

验证建议

  • 调整测试步长为2MB的整数倍(如2MB、4MB、8MB),再对比大页与普通页的延迟,应能看到大页的性能优势。
  • 关闭透明大页,仅使用预留大页,测试对齐后的访问延迟。
  • 升级内核至5.x版本,重新测试观察大页表现是否改善。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 04:20:55