-1

我在 ESXi Server 中使用 CentOS VM。我想将巨大的页面大小增加到 1G。

我点击了链接: http ://dpdk-guide.gitlab.io/dpdk-guide/setup/hugepages.html

我执行了这个小脚本来检查是否支持 1 GB 的大小:

[root@localhost ~]# if grep pdpe1gb /proc/cpuinfo >/dev/null 2>&1; then echo "1GB supported."; fi
1GB supported.
[root@localhost ~]# 
  1. 我添加default_hugepagesz=1GB hugepagesz=1G hugepages=4到 /etc/default/grub.
  2. grub2-mkconfig -o /boot/grub2/grub.cfg
  3. 重新启动虚拟机。

但是我仍然可以看到巨大的页面大小为 2048 KB (2MB)。

[root@localhost ~]# cat /proc/meminfo | grep -i huge
AnonHugePages:      8192 kB
HugePages_Total:    1024
HugePages_Free:     1024
HugePages_Rsvd:        0
HugePages_Surp:        0
**Hugepagesize:       2048 kB**
[root@localhost ~]# 

以下是VM的详细信息:

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-514.10.2.el7.x86_64 #1 SMP Fri Mar 3 00:04:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]#

[root@localhost ~]# cat /proc/cpuinfo  | grep -i flags
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx hypervisor lahf_lm ida arat epb pln pts dtherm tpr_shadow vnmi ept vpid
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx hypervisor lahf_lm ida arat epb pln pts dtherm tpr_shadow vnmi ept vpid
[root@localhost ~]# 

8GB 内存和 2 个 CPU 分配给 VM。

4

3 回答 3

1

1gb 巨页支持的 CPU 标志和来宾操作系统支持/启用不足以让 1gb 巨页在虚拟化环境中工作。

PMD(PAE 和 x86_64 之前的 2MB 或 4 MB)和 PUD 级别(1 GB)上的大页面的想法是创建从对齐的巨大虚拟区域到一些巨大的物理内存区域的映射(据我了解,它也应该对齐)。随着虚拟机管理程序的额外虚拟化级别,现在有三个(或四个)内存级别:来宾操作系统中应用程序的虚拟内存,一些被来宾操作系统视为物理的内存(它是由虚拟化解决方案管理的内存:ESXi、Xen、KVM , ....),以及真正的物理内存。可以合理地假设,hugepage 想法应该在所有三个级别中具有相同大小的巨大区域才能有用(生成更少的 TLB 未命中,使用更少的页表结构来描述大量内存 - grep “需要大于 4KB 的页面”在DickSites 的“数据中心计算机:CPU 设计中的现代挑战”,谷歌,2015 年 2 月)。

因此,要在来宾操作系统中使用某种级别的巨页,您应该已经在物理内存(在您的主机操作系统中)和您的虚拟化解决方案中拥有相同大小的巨页。当您的主机操作系统和虚拟化软件不可用时,您无法在 Guest 中有效地使用大页面。(有些像 qemu 或 bochs 可能会模仿它们,但这会从慢到非常慢。)当你想要 2 MB 和 1 GB 大页面时:你的 CPU、主机操作系统、虚拟系统和来宾操作系统都应该支持它们(并且主机系统应该有足够的对齐连续物理内存来分配 1 GB 页面,您可能无法将此页面拆分为 NUMA 中的多个套接字)。

不了解 ESXi,但有一些链接

程序 8.2。在引导时分配 1 GB 大页面

  1. 要在启动时分配不同大小的大页面,请使用以下命令,指定大页面的数量。此示例分配 4 个 1 GB 大页面和 1024 个 2 MB 大页面: ' default_hugepagesz=1G hugepagesz=1G hugepages=4 hugepagesz=2M hugepages=1024' 更改此命令行以指定在引导时分配的不同数量的大页面。

注意接下来的两个步骤也必须在您第一次在引导时分配 1 GB 大页面时完成。

  1. 在主机上挂载 2 MB 和 1 GB 的大页面:

    # mkdir /dev/hugepages1G # mount -t hugetlbfs -o pagesize=1G none /dev/hugepages1G # mkdir /dev/hugepages2M # mount -t hugetlbfs -o pagesize=2M none /dev/hugepages2M

  2. 重新启动 libvirtd 以在来宾上启用 1 GB 大页面:

    # 服务重启 libvirtd

1 GB 大页面现在可供客人使用。

通过增加页面大小,可以减少页表并减少 TLB 缓存的压力。... vm.nr_hugepages = 256... 重新启动系统(注意:这是关于主机和主机操作系统的物理重新启动) ... 设置 Libvirt 以使用 Huge Pages KVM_HUGEPAGES=1... 设置访客以使用 Huge Pages

缺乏对大页面的管理程序支持:最后,管理程序供应商可能需要几个生产周期才能完全采用大页面。例如,VMware 的 ESX 服务器目前在管理程序中不支持 1GB 大页面,即使 x86-64 系统上的客户机可以使用它们。

我们发现大页面与跨架构(例如,ARM、x86-64)和基于容器的技术的一系列管理程序(例如,ESX、KVM)的轻量级内存管理存在冲突。

VMware ESX Server 3.5 和 VMware ESX Server 3i v3.5 为虚拟化环境引入了 2MB 大页面支持。在早期版本的 ESX Server 中,来宾操作系统的大页面是使用小页面模拟的。这意味着,即使客户操作系统使用大页面,它也无法获得减少 TLB 未命中的性能优势。ESX Server 3.5 和 ESX Server 3i v3.5 中增强的大页面支持使 PAE 模式下的 32 位虚拟机和 64 位虚拟机能够使用大页面。

于 2017-06-12T23:36:43.777 回答
0

也许它是有帮助的。在描述 vm 的 xml 中设置 cpu fuature 如下:

  <cpu mode='custom' match='exact' check='partial'>
      <model fallback='allow'>Broadwell</model>
      <feature policy='force' name='pdpe1gb'/>
  </cpu>
于 2020-03-07T07:51:26.107 回答
0

将主机 cpu 传递到 VM 对我有用,这给了 VM pdpe1gb cpu 标志。

我使用 Qemu + libvirt,在主机上启用 1G hugepagesz。

于 2019-11-14T08:41:28.347 回答