[转帖]Linux 调优篇:虚拟化调优(hugepage 大页内存)* 叁

linux,虚拟化,hugepage,内存 · 浏览次数 : 0

小编点评

**三.Regular Pages 与 HugePages** * **Regular Pages:** 本地内存中存储的页面,每个页面包含64字节。 * **HugePages:** 本地内存中存储的页面,每个页面可以包含4kb到4mb的任意大小。 **四. hugepage 优点** * ** Not swappable:** 由于使用 hugepage,页面不会被换出换出,避免页面大小限制。 * ** Relief of TLB pressure:** 使用 hugepage 可以减少 TLB 压力,降低 cpu cache可缓存的地址映射压力。 * ** Decreased page table overhead:** 通过使用 hugepage,每个 page 只需要存储其大小,而不是每个 page 存储 64 bytes。 * ** Eliminated page table lookup overhead:** 使用 hugepage 可以减少 page table查找负载。 * ** Faster overall memory performance:** hugepage 可以提高内存访问密集型业务的性能。 **五. 调优方法** * ** 使用内存大页:** 通过开启内存大页,可以保证虚拟机的所有内存在Host上始终以大页形式存在,减少 TLB Miss。 * ** 配置虚拟机使用512MB内存大页:** 在虚拟机配置中,设置 `default_hugepagesz` 参数为 512M,并启用 `hugepages` 和 `hugepagesz` 参数。 * ** 重启服务器:** 重启服务器以应用内存大页配置。 * ** 查看内存大页配置情况:** 可以使用 `cat /proc/sys/vm/nr_hugepages` 和 `cat /sys/devices/system/node/node0/hugepages/hugepages-524288kB/nr_hugepages` 命令查看各个 NUMA 节点的配置情况。 * ** 确定 hugetlbfs 是否已经挂载:** 使用 `mount | grep hugetlbfs` 命令查看 hugetlbfs 是否已挂载。

正文

一. 大页(HugePages)概念
    Hugepage的引入
二. hugepages相关概念
三.Regular Pages 与 HugePages
    a、Regular Pages
    b、Huge Pages
四. hugepage 优点
五.调优方法
    5.1 在Host侧查看各个numa节点上的大页分配情况。
    5.2 配置虚拟机使用512MB内存大页。
    5.3 重启服务器。
    5.4 重新进入操作系统后,确定内存大页配置情况。
    5.5 确定hugetlbfs是否已经挂载。
    5.6 虚拟机配置大页内存,xml配置参考如下:


一. 大页(HugePages)概念

      HugePages是通过使用大页内存来取代传统的 4kb 内存页面,使得管理虚拟地址数变少,加快了从虚拟地址到物理地址的映射以及通过摒弃内存页面的换入换出以提高内存的整体性能。
尤其是对于8GB以上的内存以及较大的 Oracle SGA size,建议配值并使用 HugePage特性。

Hugepage的引入

      操作系统对于数据的存取直接从物理内存要比从磁盘读写数据要快的多,但是物理内存是有限的,这样就引出了物理内存与虚拟内存的概念。
虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,这部分磁盘空间Windows下称之为虚拟内存,Linux下被称为交换空间(Swap Space)。
      对于这个大内存的管理(物理内存+虚拟内存),大多数操作系统采用了分段分页的方式进行管理。
      分段是粗粒度的管理方式,而分页则是细粒度管理方式,分页方式可以避免内存空间的浪费。
相应地,也就存在内存的物理地址与虚拟地址的概念。通过前面这两种方式,CPU必须把虚拟地址转换程物理内存地址才能真正访问内存。
      为了提高这个转换效率,CPU会缓存最近的虚拟内存地址物理内存地址的映射关系,并保存在一个由 CPU 维护的映射表中。
      为了尽量提高内存的访问速度,需要在映射表中保存尽量多的映射关系。
      linux 的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会按照 LRU 算法在适当的时候将物理内存中不经常使用的内存页自动交换到虚拟内存中,而将经常使用的信息保留到物理内存。
      通常情况下,Linux默认情况下每页是 4K,这就意味着如果物理内存很大,则映射表的条目将会非常多,会影响CPU的检索效率。
      因为内存大小是固定的,为了减少映射表的条目,可采取的办法只有增加页的尺寸。因此Hugepage便因此而来。也就是打破传统的小页面的内存管理方式,使用大页面 2M,4M,16M等等。
      如此一来映射条目则明显减少。如果系统有大量的物理内存(大于8G),则物理32位的操作系统还是64位的,都应该使用Hugepage

二. hugepages相关概念

      Page Table(页表):  page table也就是一种用于内存管理的实现方式,用于物理地址到虚拟之间的映射。因此对于内存的访问,先是访问Page Table,然后根据Page Table 中的映射关系,隐式的转移到物理地址来存取数据。
      TLB: Translation Lookaside Buffer (页表缓存) ,CPU中的一块固定大小的 cache,包含了部分page table的映射关系,用于快速实现虚拟地址到物理地址的转换。
      Hugetlb: hugetlb 是TLB中指向HugePage的一个entry(通常大于4k或预定义页面大小)。
      HugePage 通过hugetlb entries来实现,也可以理解为HugePage 是hugetlb page entry的一个句柄。
      Hugetlbfs: 一个类似于tmpfs的新的in-memory filesystem,在2.6内核被提出。

三.Regular Pages 与 HugePages

a、Regular Pages

     在下图中有两个不同的进程,两个进程对于内存的访问是首先访问本地的page table,而本地的page table又参照了system-wide table的page(也就是前面描述的TLB),最终system-wide table中的entry指向了实际的物理地址。
     图中物理地址page size大小4kb。也可以看到进程1和进程2在system-wide table中都指向了page2,也就是同一个物理地址。Oracle sga中共享内存的使用会出现上述情形。

 b、Huge Pages

       在下图中,本地的page table 与system page table中都包含了huge page属性。因此page table中的任意一个page可能使用了常规的page,
也有可能使用了huge page。同样进程1和进程2都共享了其中的Hpage2。图中的物理内存常规的page size是4kb,huge page size 是4mb。

四. hugepage 优点

 对于较大的系统内存以及sga,使用hugepage可以极大程度的提高Oracle数据库性能。
a、Not swappable 
无需交换。也就是不存在页面由于内存空间不足而存在换入换出的问题
b、Relief of TLB pressure 
减轻TLB的压力,也就是降低了cpu cache可缓存的地址映射压力。由于使用了huge page,相同的内存大小情况下,管理的虚拟地址数量变少。
TLB entry可以包含更多的地址空间,cpu的寻址能力相应的得到了增强。
c、Decreased page table overhead
降低page table负载,对于普通的page,每个entry需要64bytes进行管理,对于50gb的内存,管理这些entry,需要800mb的大小
(50*1024*1024)kb/4kb*64bytes/1024/1024=800mb。
d、Eliminated page table lookup overhead
消除page table查找负载
e、Faster overall memory performance 
提高内存的整体性能

五.调优方法

      使用内存大页的好处是能保证虚拟机的所有内存在Host上始终以大页形式存在,并且保证物理连续,可以有效的减少TLB Miss,显著提升内存访问密集型业务的性能。
在虚拟机使用内存大页的场景下,通过关闭透明大页(参见关闭透明大页),可以减少Host侧的开销,使得虚拟机可以获得更稳定的性能。

说明:
不同OS对于内存大页的单位设置会不一样,UVP一般设置1G,而本文提及的 CentOS 7.6则设置为 512MB。虚拟化场景,配置内存大页时,至少要预留总内存的15%给Host。

5.1 在Host侧查看各个numa节点上的大页分配情况。

cat /sys/devices/system/node/node*/meminfo | grep Huge

如果HugePages显示信息为0,说明此时系统没有配置内存大页。

5.2 配置虚拟机使用512MB内存大页。

须知:

KVM虚拟化场景下,配置内存大页时,至少要预留总内存的15%给Host。

以 32U180G 规格配置虚拟机为例,先在Host(物理机)侧分配300个512MB内存大页。

      a) 对于CentOS 7.6操作系统,编辑 /boot/efi/EFI/centos/grub.cfg。

vim /boot/efi/EFI/centos/grub.cfg

      b) 在Linux行输入以下配置。

default_hugepagesz=512M hugepagesz=512M  hugepages=300

如下所示:

5.3 重启服务器。

reboot

5.4 重新进入操作系统后,确定内存大页配置情况。

cat /proc/sys/vm/nr_hugepages

说明:

此时各个NUMA节点的HugePages显示信息为75,说明此时系统已为各个NUMA节点(numa0~node3)配置了75个512MB内存大页。

如果需要查看某个NUMA节点上的大页配置情况,可以执行如下命令:

这里以node0为例:

cat /sys/devices/system/node/node0/hugepages/hugepages-524288kB/nr_hugepages

cat /sys/devices/system/node/node0/hugepages/hugepages-524288kB/free_hugepages

说明:

nr_hugepages显示信息为75,说明此时系统为该numa节点配置了75个512MB内存大页;free_hugepages显示信息为75,说明此时系统剩余75个512MB内存大页。

5.5 确定hugetlbfs是否已经挂载。

mount | grep hugetlbfs

上述回显信息表示已经挂载上了。

5.6 虚拟机配置大页内存,xml配置参考如下:

  1. <domain type = 'KVM'>
  2. ...
  3. <memory unit='KiB'>8388608</memory>
  4. <currentMemory unit='KiB'>83886088</currentMemory>
  5. <memoryBacking>
  6. <hugepages/>
  7. </memoryBacking>
  8. <vcpu placement = 'static' cpuset='12-15'>4</vcpu>
  9. <cputune>
  10. <vcpupin vcpu='0' cpuset='12'/>
  11. <vcpupin vcpu='1' cpuset='13'/>
  12. <vcpupin vcpu='2' cpuset='14'/>
  13. <vcpupin vcpu='3' cpuset='15'/>
  14. <emulatorpin cpuset='12-15'/>
  15. </cputune>
  16. <numatune>
  17. <memnode cellid='0' mode='strict' nodeset='0'/>
  18. </numatune>
  19. ...
  20. </domain>

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux入门初识Linux22054 人正在系统学习中

与[转帖]Linux 调优篇:虚拟化调优(hugepage 大页内存)* 叁相似的内容:

[转帖]Linux 调优篇:虚拟化调优(hugepage 大页内存)* 叁

一. 大页(HugePages)概念 Hugepage的引入二. hugepages相关概念三.Regular Pages 与 HugePages a、Regular Pages b、Huge Pages四. hugepage 优点五.调优方法 5.1 在Host侧查看各个numa节点上的大页分配情

【转帖】Linux 调优篇:虚拟化调优(hugepage 大页内存)* 叁

一. 大页(HugePages)概念 Hugepage的引入二. hugepages相关概念三.Regular Pages 与 HugePages a、Regular Pages b、Huge Pages四. hugepage 优点五.调优方法 5.1 在Host侧查看各个numa节点上的大页分配情

[转帖]Linux 调优篇 :虚拟化调优(irqbalance 网卡中断绑定)* 贰

一.网络流量上不去二.中断绑定 2.1 关闭中断平衡守护进程 2.2 脱离中断平衡守护进程 2.3 手动设置中断的CPU亲和性三. 总结 一.网络流量上不去 在Linux的网络调优方面,如果你发现网络流量上不去,那么有一个方面需要去查一下: 网卡处理网络请求的中断是否被绑定到单个CPU(或者说跟处理

【转帖】Linux 调优篇 :虚拟化调优(irqbalance 网卡中断绑定)* 贰

一.网络流量上不去二.中断绑定 2.1 关闭中断平衡守护进程 2.2 脱离中断平衡守护进程 2.3 手动设置中断的CPU亲和性三. 总结 一.网络流量上不去 在Linux的网络调优方面,如果你发现网络流量上不去,那么有一个方面需要去查一下: 网卡处理网络请求的中断是否被绑定到单个CPU(或者说跟处理

[转帖]linux 调优篇 :硬件调优(BIOS配置)* 壹

https://blog.csdn.net/tony_vip?type=blog 一. 设置内存刷新频率为Auto二. 开启NUMA三. 设置Stream Write Mode四. 开启CPU预取配置五. 开启SRIOV六. 开启SMMU 通过在BIOS中设置一些高级选项,可以有效提升虚拟化平台性能

【转帖】linux 调优篇 :硬件调优(BIOS配置)* 壹

一. 设置内存刷新频率为Auto二. 开启NUMA三. 设置Stream Write Mode四. 开启CPU预取配置五. 开启SRIOV六. 开启SMMU 通过在BIOS中设置一些高级选项,可以有效提升虚拟化平台性能。表1列出了TaiShan服务器和性能相关的BIOS推荐配置项。 表1 BIOS性

[转帖]linux 调优各项监控指标小记

https://z.itpub.net/article/detail/8A4E4E96522BD59D45AB5A4CA442EDB3 自开始负责生产环境部署,中间遇到了若干线上环境内存以及CPU的问题。由于微服务以及容器的流行,现在已经可以很方便的使用 K8s + prometheus + gra

[转帖]Linux性能调优工具-9张图-包你用到爽!抓紧收藏吧

这里包含Linux 性能资料的工具图。这些使用大字体可以用作海报幻灯片。也可以将它们打印出来贴在办公室墙上。它们展示了:Linux 可观察性工具、 Linux 静态性能分析工具、 Linux 基准测试工具、 Linux 调优工具和Linux sar。 性能观察工具: 静态性能工具 性能压测工具: 性

[转帖]Linux性能调优,看这一篇就够了

调优是一件因地制宜的事情,生搬硬套可能适得其反。互联网企业,生产环境大多数都是linux操作系统,Linux服务器性能调优,是一个重要的课题。linux有成百上千的参数可以调整,对这些参数的理解,可以帮助我们更好的理解服务器工作的原理,帮助更快的找到瓶颈和解决问题。 为了帮助理解,先上一个Linux

[转帖]Linux句柄调优之nofile、nr_open、file-max

https://www.jianshu.com/p/8fb056e7b9f8 在开发运维的时候我们常常会遇到类似“Socket/File: Can’t open so many files”,“无法打开更多进程”,或是coredump过大等问题,这些都可以设置资源限制来解决。今天在教某位客户设置最大