👉点击这里申请火山引擎VIP帐号,立即体验火山引擎产品>>>
关于透明大页
使用透明大页的优点
使用透明大页的缺点
内部碎片。例如给需要1个字节数据的应用程序分配了2MB的大页内存,会导致出现内部碎片。
缺页处理延迟增高。尽管透明大页减少了缺页的次数,但更大的页面需要更长的时间从磁盘传输,从而导致缺页处理延迟增高。同时,清零大页也需要更长的时间。
内存路径加锁带来的访存性能下降。在khugepaged扫描进程内存,并将4kB页面合并为大页的这个过程中,对于操作的内存的各种分配活动都需要各种内存锁,直接影响程序的内存访问性能。并且,这个过程对于应用是透明的,在应用层面不可控制,对于专门为4kB内存页优化的程序来说,可能会造成随机的性能下降现象。
后台任务占用系统资源。当系统没有足够的连续内存时,会触发内存压缩和内存回收,导致系统性能下降。
操作场景
SPECjbbⓇ场景
数据库场景
操作步骤
配置透明大页
登录Linux实例。
查看透明大页功能状态。
cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never:表示已启用透明大页。
always [madvise] never:只能通过madvise()系统调用在MADV_HUGEPAGE的内存区域使用透明大页。
always madvise [never]:表示已禁用透明大页。
配置透明大页模式。
执行如下命令,启用透明大页。
echo always > /sys/kernel/mm/transparent_hugepage/enabled
执行如下命令,禁用透明大页。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
执行如下命令,指定只能通过madvise()系统调用在MADV_HUGEPAGE的内存区域使用透明大页。
echo madvise > /sys/kernel/mm/transparent_hugepage/enabled
除此之外,您还可以在内核参数行中添加透明大页参数,实现在内核引导期间完成相关配置。
登录云服务器控制台,重启(强制重启)实例。操作详情可查看重启实例。
使用VNC连接实例,操作详情可查看通过控制台登录Linux实例。
当系统启动至内核选择界面时,按↑或↓键选择目标内核。
按e键进入修改Grub引导文件页面。
将光标定位至Linux内核参数行,添加transparent_hugepage=always、transparent_hugepage=madvise或transparent_hugepage=never参数,如下图所示。
按Ctrl + x键完成配置。
进入操作系统后,可执行步骤2命令查看配置是否生效。
查看透明大页使用情况
执行如下命令,查看系统级别的透明大页使用情况。
cat /proc/meminfo | grep AnonHugePages
AnonHugePages: 819200 kB
执行如下命令,查看进程级别的透明大页使用情况。
请将[pid]替换为目标进程的进程号。
cat /proc/[pid]/smaps | grep AnonHugePages
AnonHugePages: 0 kBAnonHugePages: 0 kBAnonHugePages: 0 kBAnonHugePages: 0 kBAnonHugePages: 0 kB
透明大页碎片整理配置
执行如下命令完成配置。
echo always >/sys/kernel/mm/transparent_hugepage/defrag
执行如下命令完成配置。
echo defer >/sys/kernel/mm/transparent_hugepage/defrag
执行如下命令完成配置。
echo madvise >/sys/kernel/mm/transparent_hugepage/defrag
执行如下命令完成配置。
echo defer+madvise >/sys/kernel/mm/transparent_hugepage/defrag
您还可以执行如下命令,禁止碎片整理。
echo never >/sys/kernel/mm/transparent_hugepage/defrag
Khugepaged配置
执行如下命令,禁用khugepaged碎片整理。
echo 0 > /sys/kernel/mm/transparent_hugepage/khugepaged/defrag
执行如下命令,启用khugepaged碎片整理。
echo 1 >/sys/kernel/mm/transparent_hugepage/khugepaged/defrag
执行如下命令,设置khugepaged每次扫描4096页(默认也是4096页)。
echo 4096 > /sys/kernel/mm/transparent_hugepage/khugepaged/pages_to_scan
执行如下命令,设置khugepaged每次唤醒的时间间隔为10000ms(默认也是10000ms)。
echo 10000 > /sys/kernel/mm/transparent_hugepage/khugepaged/scan_sleep_millisecs
执行如下命令,设置khugepaged分配大页失败后的等待时间为60000ms,防止短时间重复失败(默认也是60000ms)。
echo 60000 > /sys/kernel/mm/transparent_hugepage/khugepaged/alloc_sleep_millisecs
如果系统出现严重卡顿并且khugepaged使用率高达100%,您可以执行如下命令,禁用khugepage