Linux 学习分享之标准大页和透明大页
Huge pages ( 标准大页 ) 和 Transparent Huge pages( 透明大页 )
在 Linux 中大页分为两种:Huge pages ( 标准大页 ) 和 Transparent Huge pages( 透明大页 ) 。
内存是以块即页的方式进行管理的,当前大大数据培训部分系统默认的页大小为 4096 bytes 即 4K。1MB 内存等于 256 页;1GB 内存等于 256000 页。
CPU 拥有内置的内存管理单元,包含这些页面的列表,每个页面通过页表条目引用。当内存越来越大的时候, CPU 需要管理这些内存页的成本也就越高,这样会对操作系统的性能产生影响。
Huge Pages
Huge pages 是从 Linux Kernel 2.6 后被引入的,目的是通过使用大页内存来取代传统的 4kb 内存页面, 以适应越来越大的系统内存,让操作系统可以支持现代硬件架构的大页面容量功能。
Huge pages 有两种格式大小:2MB 和 1GB ,2MB 页块大小适合用于 GB 大小的内存, 1GB 页块大小适合用于 TB 级别的内存;2MB 是默认的页大小。
Transparent Huge Pages
Transparent Huge Pages 缩写 THP ,这个是 RHEL 6 开始引入的一个功能,在 Linux6 上透明大页是默认启用的。
由于 Huge pages 很难手动管理,而且通常需要对代码进行重大的更改才能有效的使用,因此 RHEL 6 开始引入了 Transparent Huge Pages ,THP 是一个抽象层,能够自动创建、管理和使用传统大页。
THP 为系统管理员和开发人员减少了很多使用传统大页的复杂性 , 因为 THP 的目标是改进性能,因此其它开发人员 ( 来自社区和红帽 ) 已在各种系统、配置、应用程序和负载中对 THP 进行了测试和优化。这样可让 THP 的默认设置改进大多数系统配置性能。但是,不建议对数据库工作负载使用 THP 。
这两者最大的区别在于: 标准大页管理是预分配的方式,而透明大页管理则是动态分配的方式。
标准大页的页面大小
注:THP 目前只能映射异步内存区域,比如堆和栈空间
使用 Huge pages 优点
Oracle 官方是推荐我们使用 Huge pages 的,它拥有以下的好处:
Larger Page Size and Less # ofPages: Default page size is 4K whereas the HugeTLB size is 2048K. That meansthe system would need to handle 512 times less pages.
Reduced Page Table Walking:Since a HugePage covers greater contiguous virtual address range than a regularsized page, a probability of getting a TLB hit per TLB entry with HugePages arehigher than with regular pages. This reduces the number of times page tablesare walked to obtain physical address from a virtual address.
Less Overhead for MemoryOperations: On virtual memory systems (any modern OS) each memory operation isactually two abstract memory operations. With HugePages, since there are lessnumber of pages to work on, the possible bottleneck on page table access isclearly avoided.
Less Memory Usage: From theOracle Database perspective, with HugePages, the Linux kernel will use lessmemory to create pagetables to maintain virtual to physical mappings for SGAaddress range, in comparison to regular size pages. This makes more memory tobe available for process-private computations or PGA usage.
No Swapping: We must avoidswapping to happen on Linux OS at all Document 1295478.1. HugePages are notswappable (whereas regular pages are). Therefore there is no page replacementmechanism overhead. HugePages are universally regarded as pinned.
No 'kswapd' Operations: kswapdwill get very busy if there is a very large area to be paged (i.e. 13 millionpage table entries for 50GB memory) and will use an incredible amount of CPUresource. When HugePages are used, kswapd is not involved in managing them. Seealso Document 361670.1
使用 Huge pages 缺点
当然使用 Huge pages 也会存在某些缺点:
首先,开启该功能需要进行额外设置,
第二, Huge pages 和 Oracle 11g 新 特性 AMM ( Automatic Memory Management )是相互冲突的,但是 ASMM ( Automatic Shared Memory Management )仍然可以继续使用。
Transparent Huge pages 存在的问题
Oracle 官方虽然推荐我们使用 Huge pages ,但是却建议我们关闭 Transparent Huge pages ,因为透明大页存在一些问题:
在 RAC 环境下 透明大页( TransparentHugePages )会导致异常节点重启,和性能问题;
在单机环境中,透明大页( TransparentHugePages ) 也会导致一些异常的性能问题;
注:Transparent Huge Pages 在 32 位的 RHEL 6 中是不支持的。
如何关闭 Transparent Huge pages ?#
环境:CentOS Linux release 7.8.2003 (Core)
检查当前的 transparent_hugepage 状态(以下为开启状态)
透明大页关闭方法有两种,一种是通过命令关闭,一种通过修改 grub 开机引导文件关闭:
方法一
手动临时关闭
参数说明
never 关闭,不使用透明内存 alway 尽量使用透明内存,扫描内存,有 512 个 4k 页面可以整合,就整合成一个 2M 的页面 madvise 避免改变内存占用
开机自动关闭
vim /etc/rc.d/rc.local
授予执行权限
chmod +x /etc/rc.d/rc.local
方法二
备份配置文件
cp /etc/default/grub /etc/default/grub.date +%F.bak
备份 grub 配置文件
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.date +%F.bak
编辑/etc/default/grub 文件,在 GRUB_CMDLINE_LINUX 后面加上
transparent_hugepage=never
或者编辑/etc/sysconfig/grub,其实/etc/sysconfig/grub 是/etc/default/grub 的软链接。但我遇到过不是软链接的关系情况,这样编辑/etc/sysconfig/grub 是没有用户的;执行 grub2-mkconfig 不会把关闭 THP 的选项写入到 gurb.cfg。
再使用 grub2-mkconfig 生成 grub.cfg 配置文件。
重启后效果
扩展内容
使用情况监控 可以查看/sys/kernel/mm/transparent_hugepage/khugepaged 下信息
一个扫描周期被扫描的内存页数 pages_to_scan (默认 4096 = 16MB)
多长时间扫描一次 scan_sleep_millisecs (默认 10000 = 10sec)
多长时间整理一次碎片
alloc_sleep_millisecs (默认 60000 = 60sec)
原创作者:Guo·Rulai
评论