0

我正在尝试分析虚拟机在使用大页面时获得的网络性能提升。为此,我通过更改 grub 命令行并重新启动将虚拟机管理程序配置为具有多个 1G 大页面(36),并且在启动 VM 时,我确保将大页面传递给 VM。在启动 8 个虚拟机(每个都有 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 的大页面映射?

4

1 回答 1

3

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

每个架构中的每个 TLB 都有其可以容纳的条目数的上限。

对于 x86 案例,这个数字可能比您预期的要少:它是 4。
在您的 Ivy Bridge 中是 4,​​在我的 Kaby Lake 中仍然是 4,四代之后。

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

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

正如Peter Cordes所指出的,1GiB 页面使用单级 TLB(在 Skylake 中,显然还有一个二级 TLB,1GB 页面有 16 个条目)。1GiB TLB 中的缺失将导致页面遍历,因此所有涉及的软件都使用页面感知代码非常重要。

于 2018-11-08T09:57:48.097 回答