一、什么是透明大页
透明大页顾名思义就是把大页透明化,“透明”很好理解,我们在软件设计中经常涉及到组件“透明化”,方便调用方使用。透明大页就是对“标准大页”的优化:方便使用和管理。所以,只要搞明白什么是标准大页基本就够了。
透明大页 缩写 THP ,这个是 RHEL 6 开始引入的一个功能,在 Linux6 上透明大页是默认启用的。
标准大页是从 Linux Kernel 2.6 后被引入的,目的是通过使用大页内存来取代传统的 4kb 内存页面, 以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。
标准大页有两种格式大小: 2MB 和 1GB , 2MB 页块大小适合用于 GB 大小的内存, 1GB 页块大小适合用于 TB 级别的内存; 2MB 是默认的页大小。
由于 标准大页 很难手动管理,而且通常需要对代码进行重大的更改才能有效的使用,因此 RHEL 6 开始引入了 透明大页 ( THP ), THP 是一个抽象层,能够自动创建、管理和使用传统大页。
THP 为系统管理员和开发人员减少了很多使用传统大页的复杂性 , 因为 THP 的目标是改进性能 , 因此其它开发人员 ( 来自社区和红帽 ) 已在各种系统、配置、应用程序和负载中对 THP 进行了测试和优化。这样可让 THP 的默认设置改进大多数系统配置性能。但是 , 不建议对数据库工作负载使用 THP 。
这两者最大的区别在于 : 标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。
二、透明大页开启的危害是什么
- 可能导致redis延迟和内存使用问题。
- I/O读写性能会降低30%左右
- 查看透明大页状态
三、透明大页关闭
[root@KP10641 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
结论:透明大页启动状态
- 关闭透明大页,编辑/etc/default/grub
[root@KP10641 ~]# vi /etc/sysconfig/grub
在GRUB_CMDLINE_LINUX行最后添加(空格)transparent_hugepage=never,注意添加位置必须在最后,否则不生效
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=klas/root rd.lvm.lv=klas/swap smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15 crashkernel=1024M,high video=efifb:off video=VGA-1:640x480-32@60me transparent_hugepage=never"
- 重新生成grub.cfg
[root@KP10641 ~]# grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cf
- 重启服务器,并查看透明大页状态
[root@KP10641 ~]# reboot
[root@KP10641 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled