使用HugePages的优点:
HugePages是Linux内核的一个特性,使用hugepage可以用更大的内存页来取代传统的4K页面。使用HugePage主要带来以下好处:
1. HugePages 会在系统启动时,直接分配并保留对应大小的内存区域。
2. HugePages 在开机之后,如果没有管理员的介入,是不会释放和改变的。
3. 大大提高了CPU cache中存放的page table所覆盖的内存大小,从而提高了TLB命中率。
4. 没有swap,永远常驻在内存中,所以也减少了内存页交换的额外开销。
5. 降低walk page table的长度: 由于大页的页表级数(PGD PUD PMD)比普通页面级数(PGD PUD PMD PTE)小1,所以在走表时会高效一些。(以普通页面是四级页表为例)。
使用HugePages的缺点:
使用hurgepages的内存不能被其他的进程使用,所以,一定要合理设置这个值,避免造成浪费。使用超过8G物理内存的系统,有人推荐使用HugePage。
1、可能需要对应用程序进行改造:对于传统巨页,必须使用特定的方式使用。详情参考巨页内存的类型及使用方式。
2、可能导致内存浪费:如果程序使用内存小,却申请了大页内存,会造成内存浪费,因为内存分配最小单位是页。
查看hurgepages的信息:
通过执行:cat /proc/meminfo | grep Huge
HugePages_Total: 1024
HugePages_Free: 1024
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
这些字段的意思如下。
(1)HugePages_Total:巨型页池的大小。
(2)HugePages_Free:巨型页池中没有分配的巨型页的数量。
(3)HugePages_Rsvd:“Rsvd”是“Reserved”的缩写,意思是“预留的”,是已经承诺从巨型页池中分配但是还没有分配的巨型页的数量。预留的巨型页保证应用程序在发生缺页异常的时候能够从巨型页池中分配一个巨型页。
(4)HugePages_Surp:“Surp”是“Surplus”的缩写,意思是“多余的”,是巨型页池中临时巨型页(临时分配的)的数量。临时巨型页的最大数量由“/proc/sys/vm/nr_overcommit_hugepages”控制。
(5)Hugepagesize:巨型页的大小。
kubernetes通过kubectl查看node的hugepages情况:
kubectl get node multinode-demo-m02 -o yaml
Capacity:
cpu: ...
ephemeral-storage: ...
hugepages-1Gi: 2Gi
hugepages-2Mi: 1Gi
memory: ...
pods: ...
Allocatable:
cpu: ...
ephemeral-storage: ...
hugepages-1Gi: 2Gi
hugepages-2Mi: 1Gi
memory: ...
pods: ...
禁用hurgepages:
#禁用大页缓存
vi /etc/sysctl.conf
vm.nr_hugepages = 0
vm.nr_hugepages_mempolicy = 0
# 生效
sysctl -p
排查内存占用情况:
#查看内存过高的进程
ps -aux | sort -k4nr | head -n 5#查看进程内存占用情况
ps aux --sort=-%mem#查看是否存在未被释放的进程
sudo lsof | grep deleted
------
引用:
页表缓存(TLB)和巨型页的实现_tlb 超页-CSDN博客
HugePage简介和KVM中使用HugePage_kvm启用hugepage-CSDN博客
管理巨页(HugePage) | Kubernetes
--end--