性能优化特性之:code_hugepage - 代码大页

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS Agent(兼容OpenClaw),2核4GB
简介: 本文介绍了倚天实例上的内存优化特性:代码段大页,并从优化原理、使用方法、性能收益进行详细阐述。

优化原理

代码大页特性主要为大代码段业务服务,可以降低程序的iTLB miss,从而提升程序性能。

使用方法

在Alinux3/Anolis8上,该特性默认是关闭的。可以使用sysfs接口进行启用,启用方式有三种不同的方式。

启用方法

方式一:仅打开二进制和动态库大页

echo 1 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled

方式二:仅打开可执行匿名大页

echo 2 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled

方式三:同时打开以上两类大页

echo 3 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled

关闭方法

使用sysfs接口关闭代码大页:

echo 0 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled

同时,注意释放已使用的大页,也有几种不同方式: 方式一:清理整个系统的page cache

echo 3 > /proc/sys/vm/drop_caches

方式二:清理单个文件的page cache

vmtouch -e /<path>/target

方式三:清理遗留大页

echo 1 > /sys/kernel/debug/split_huge_pages

检查是否启用代码大页

查看/proc//smaps中FilePmdMapped字段可确定是否使用了代码大页。 扫描进程代码大页使用数量(单位KB):

cat /proc/<pid>/smaps | grep FilePmdMapped | awk '{sum+=$2}END{print"Sum= ",sum}'


性能收益

该特性在不同平台优化效果不同,主要原因在于平台TLB的设计。当前已知较适用场景包括mysql、postgresql以及oceanbase,优化效果在5~8%。


附录-1:进一步优化——Padding

优化原理

Padding特性是对代码大页特性的优化,主要解决在分配给大页使用的内存剩余量不足以再分配出一个新的大页时导致的内存碎片问题。该特性需要在启用代码大页的基础上使用,不可独立使用。

举例说明:当二进制文件末尾剩余text段由于不足2M而无法使用大页,当剩余text大小超过hugetext_pad_threshold值,可将其填充为2M text,保证可使用上大页。

使用方法

启用方法

同样使用sysfs接口启用padding特性:

echo [0~2097151] >  /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold

建议一般情况写4096即可:echo 4096 > /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold

关闭方法

使用sysfs接口关闭padding特性,同时注意释放已使用的大页(参考“代码大页”的关闭方法)。

echo 0 >  /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold

附录-2:注意事项

  1. 打开、关闭并不意味着立即合并、拆散大页,hugetext 是异步的。
  2. 如果一段代码曾经被整理成大页,即使关闭 hugetext 功能,还是会大页映射。
  3. 在测试性能时,为了消除这些影响,可以通过 echo 3 > /proc/sys/vm/drop_caches 来回收整理的大页,下次就是小页映射了。
  4. 想确认代码段是否大页映射,可以通过 grep FilePmdMapped /proc/$(pidof mysqld)/smaps 来确认。


---------------------------------------------------------------------------------------

更多调优信息,请参考:

龙蜥社区:https://openanolis.cn/

KeenTune SIG:https://openanolis.cn/sig/KeenTune

阿里云龙蜥操作系统专区:https://developer.aliyun.com/group/aliyun_linux

相关文章
|
存储 固态存储 关系型数据库
性能优化特性之:16K原子写
本文介绍了在倚天实例上进行内存优化的调优特性:16K原子写 的优化原理、使用方法。
|
数据中心 Anolis
性能优化特性之:LSE指令集编译优化
本文介绍了倚天实例上的编译优化特性:LSE,并从优化原理、使用方法进行了详细阐述。
|
Linux Anolis
性能优化特性之:EXT4 Fast Commit
本文介绍了倚天实例上进行IO优化的特性:Fast Commit,并对其优化原理、使用方法进行了详细阐述
|
监控 调度 开发工具
IO神器blktrace使用介绍
## 前言 1. blktrace的作者正是block io的maintainer,开发此工具,可以更好的追踪IO的过程。 2. blktrace 结合btt可以统计一个IO是在调度队列停留的时间长,还是在硬件上消耗的时间长,利用这个工具可以协助分析和优化问题。 ## blktrace的原理 一个I/O请求的处理过程,可以梳理为这样一张简单的图: ![](http://image
21717 0
|
存储 调度 块存储
十二年磨一剑:三代架构演进,打造高性能、低成本的块存储!
上周,全球计算机存储顶会USENIX FAST 2024 在美国加州圣克拉拉召开,继去年获得国内首个FAST最佳论文奖后,凭借在分布式块存储上的创新,阿里云新作再次斩获FAST大会最佳论文奖。这也是国内唯一一家连续两年获得FAST最佳论文奖的科技公司。
107338 105
|
KVM 虚拟化
KVM的热添加技术之CPU
这篇文章介绍了如何在KVM虚拟机中热添加CPU资源,包括查看当前CPU配置、修改CPU核心数、永久性修改CPU配置以及注意事项等操作步骤。
607 1
KVM的热添加技术之CPU
|
固态存储 关系型数据库 MySQL
NVMe SSD原子写
NVMe SSD原子写
1390 0
NVMe SSD原子写
|
存储 SQL 缓存
一文带你了解MySQL之Adaptive Hash Index
在InnoDB体系架构图的内存结构中,还有一块区域名为:Adaptive Hash Index,翻译成中文:自适应哈希索引,缩写:AHI,它是一个纯内存结构,我们今天就来了解它。
3319 0
|
存储 关系型数据库 MySQL
带你读《2022龙蜥社区全景白皮书》——5.3.4 跨处理器节点内存访问优化
带你读《2022龙蜥社区全景白皮书》——5.3.4 跨处理器节点内存访问优化
1063 98
|
域名解析 网络协议 Linux
Linux系统下DNS配置指南
Linux系统下DNS配置指南
3935 1