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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 本文介绍了倚天实例上的内存优化特性:代码段大页,并从优化原理、使用方法、性能收益进行详细阐述。

优化原理

代码大页特性主要为大代码段业务服务,可以降低程序的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

相关文章
|
数据中心 Anolis
性能优化特性之:LSE指令集编译优化
本文介绍了倚天实例上的编译优化特性:LSE,并从优化原理、使用方法进行了详细阐述。
|
存储 固态存储 关系型数据库
性能优化特性之:16K原子写
本文介绍了在倚天实例上进行内存优化的调优特性:16K原子写 的优化原理、使用方法。
|
Linux Anolis
性能优化特性之:EXT4 Fast Commit
本文介绍了倚天实例上进行IO优化的特性:Fast Commit,并对其优化原理、使用方法进行了详细阐述
|
编解码 搜索推荐 算法
Celero:一个 C++ 的基准测试管理库
对代码进行持续性开发和有意义的基准测试是一个复杂的任务。虽然测试工具本身(Intel® VTune™ Amplifier, SmartBear AQTime, Valgrind)与应用程序没有相关性,但是它们在某些时候对一些小团队,或者说是一些繁琐的工作来说还是很重要的。这个Celero项目,主要是要建仓一个小型的程序库,使它可以在加入 C++ 工程和对代码进行基准测试时能够非常容易地去重建,分享,并允许在独立的运行进程、开发者或者是工程间进行比较。Celero 使用一个与 GoogleTest 相似的构架,使得他的 API 很容易地使用,并融入一个工程中。当你在开发过程中进行自动测试时,自动
818 0
Celero:一个 C++ 的基准测试管理库
|
监控 调度 开发工具
IO神器blktrace使用介绍
## 前言 1. blktrace的作者正是block io的maintainer,开发此工具,可以更好的追踪IO的过程。 2. blktrace 结合btt可以统计一个IO是在调度队列停留的时间长,还是在硬件上消耗的时间长,利用这个工具可以协助分析和优化问题。 ## blktrace的原理 一个I/O请求的处理过程,可以梳理为这样一张简单的图: ![](http://image
21060 0
|
机器学习/深度学习 负载均衡 算法
深入探索Linux内核调度机制的优化策略###
本文旨在为读者揭开Linux操作系统中至关重要的一环——CPU调度机制的神秘面纱。通过深入浅出地解析其工作原理,并探讨一系列创新优化策略,本文不仅增强了技术爱好者的理论知识,更为系统管理员和软件开发者提供了实用的性能调优指南,旨在促进系统的高效运行与资源利用最大化。 ###
|
存储 关系型数据库 MySQL
带你读《2022龙蜥社区全景白皮书》——5.3.4 跨处理器节点内存访问优化
带你读《2022龙蜥社区全景白皮书》——5.3.4 跨处理器节点内存访问优化
929 90
|
存储 数据库 C语言
Hawkeyes: x86软件迁移Arm的弱内存序问题解决方案
本文介绍了x86软件迁移到Arm过程中可能遇到的弱内存序问题的解决方案,解析了弱内存序问题的根因,介绍了Hawkeyes的架构和实现原理。欢迎有需求的团队发送邮件咨询
2655 0
|
敏捷开发 算法 测试技术
龙蜥白皮书精选:面向芯片研发和验证的操作系统 SiliconFastOS
SliconFastOS 作为通用的芯片验证系统解决方案,可以有效帮助提高芯片验证的研发效率。
龙蜥白皮书精选:面向芯片研发和验证的操作系统 SiliconFastOS