在TLB中可以存储的大页面条目数是否有限制

时间:2018-11-07 20:21:50

标签: cpu cpu-architecture tlb huge-pages

我正在尝试分析VM在使用大页面时获得的网络性能提升。为此,我通过更改grub命令行并重新启动,将虚拟机管理程序配置为具有多个1G大页面(36),并且在启动VM时,我确保将大页面传递给了VM。启动8个VM(每个VM具有2个1G大页面)并在它们之间运行网络吞吐量测试时,发现吞吐量大大低于没有大页面运行时的吞吐量。这让我想知道,这是否与我正在使用的大页面数量有关。使用TLB可以引用的1G大页面数量是否有限制?如果可以,它是否低于常规大小页面的限制?我怎么知道这些信息。在这种情况下,我使用的是Ivy Bridge系统,并使用cpuid命令,我看到的是

cache and TLB information (2):
  0x63: data TLB: 1G pages, 4-way, 4 entries
  0x03: data TLB: 4K pages, 4-way, 64 entries
  0x76: instruction TLB: 2M/4M pages, fully, 8 entries
  0xff: cache data is in CPUID 4
  0xb5: instruction TLB: 4K, 8-way, 64 entries
  0xf0: 64 byte prefetching
  0xc1: L2 TLB: 4K/2M pages, 8-way, 1024 entries

这是否意味着我在任何时候都只能在TLB中拥有4个1G大页面映射?

1 个答案:

答案 0 :(得分:2)

是的,当然。 TLB条目数具有无限制的上限将需要CPU裸片中无限制的物理空间量。

每个体系结构中的每个TLB对其可容纳的条目数量都有上限。

对于x86,此数字小于您可能预期的数字:4。
在您的常春藤桥中是4,而在我的卡比湖中仍然是4,四代后。

值得注意的是,有4个条目覆盖了4GiB的RAM(4x1GiB),如果正确使用,这似乎足以处理网络。
最后,TLBs are core resources,每个内核都有其自己的TLB集。
如果您禁用SMT(例如Intel Hyper Threading)或将内核上的两个线程分配给同一VM,则这些VM将不会竞争TLB条目。

但是,每个VM最多只能缓存4xC个大页面条目,其中 C 是该VM专用的内核数。
VM充分利用这些条目的能力取决于主机OS,系统管理程序和来宾OS协同工作的方式以及感兴趣的来宾应用程序的内存布局(跨内核共享的页面在每个内核中都有重复的TLB条目) )。
透明地使用1GiB页面很难(几乎不可能?),我不确定虚拟机管理程序和VM将如何使用这些页面-我想说您需要对此的特定支持,但我不确定。

正如Peter Cordes所述,1GiB页面使用单级TLB(在Skylake中,显然还有第二级TLB,其中1GB页面有16个条目)。 1GiB TLB中的遗漏将导致页面漫游,因此所有涉及的软件都使用页面感知代码非常重要。