[转帖]关于大内存页面 transparent_hugepage

关于,内存,页面,transparent,hugepage · 浏览次数 : 0

小编点评

**Transparent Huge Pages (THP)** **What is THP?** THP (Transparent Huge Pages) is a kernel feature that allows the kernel to allocate memory in large chunks (2MB to 1GB) directly to applications instead of using traditional 4KB pages. This reduces memory fragmentation and improves performance. **Benefits of THP:** * **Memory efficiency:** THP allows applications to allocate memory in large chunks, which can significantly reduce memory fragmentation and improve performance. * **Performance:** By reducing memory fragmentation, THP can improve memory access times, resulting in faster performance. * **Supports anonymous memory regions:** THP is suitable for managing anonymous memory regions, which are not supported by traditional 4KB page allocation. **How THP Works:** The kernel uses a khugepaged thread to dynamically allocate and deallocate memory in large chunks. This thread scans all memory regions and replaces any 4KB page allocation requests with THP allocations when possible. **Limitations of THP:** * **Memory availability:** THP requires continuous memory space to be available for allocation. * **Performance impact:** THP can slightly impact performance, as it involves additional memory management overhead. * **RAC compatibility:** THP is not supported in RAC environments, as it can lead to node restarts. **Optimizing THP Usage:** * Use `posix_memalign()` to ensure that large allocations are aligned to 2MB boundaries. * Consider disabling Transparent Huge Pages for applications that do not require memory allocation in large chunks. **Conclusion:** THP is a useful kernel feature for memory management in Linux systems with large memory allocations. However, it has some limitations and performance implications. By optimizing its usage and considering the limitations, you can maximize the benefits of THP while avoiding its drawbacks.

正文

https://www.cnblogs.com/kevinlucky/p/9955486.html

 

Transparent Huge Pages (THP) are enabled by default in RHEL 6 for all applications. The kernel attempts to allocate hugepages whenever possible and any Linux process will receive 2MB pages if the mmap region is 2MB naturally aligned. The main kernel address space itself is mapped with hugepages, reducing TLB pressure from kernel code. For general information on Hugepages, see: What are Huge Pages and what are the advantages of using them?

The kernel will always attempt to satisfy a memory allocation using hugepages. If no hugepages are available (due to non availability of physically continuous memory for example) the kernel will fall back to the regular 4KB pages. THP are also swappable (unlike hugetlbfs). This is achieved by breaking the huge page to smaller 4KB pages, which are then swapped out normally.

But to use hugepages effectively, the kernel must find physically continuous areas of memory big enough to satisfy the request, and also properly aligned. For this, a khugepaged kernel thread has been added. This thread will occasionally attempt to substitute smaller pages being used currently with a hugepage allocation, thus maximizing THP usage.

In userland, no modifications to the applications are necessary (hence transparent). But there are ways to optimize its use. For applications that want to use hugepages, use of posix_memalign() can also help ensure that large allocations are aligned to huge page (2MB) boundaries.

Also, THP is only enabled for anonymous memory regions. There are plans to add support for tmpfs and page cache. THP tunables are found in the /sys tree under /sys/kernel/mm/redhat_transparent_hugepage.

一般而言,内存管理的最小块级单位叫做page,一个page是4096bytes,1M的内存会有256个page,1GB的话就会有256,000个page。CPU通过内置的内存管理单元维护着page表记录。

正常来说,有两种方式来增加内存可以管理的内存大小:

1.增大硬件内存管理单元的大小。

2.增大page的大小。

第一个方法不是很现实,现代的硬件内存管理单元最多只支持数百到上千的page表记录,并且,对于数百万page表记录的维护算法必将与目前的数百条记录的维护算法大不相同才能保证性能,目前的解决办法是,如果一个程序所需内存page数量超过了内存管理单元的处理大小,操作系统会采用软件管理的内存管理单元,但这会使程序运行的速度变慢。

从redhat 6(centos,sl,ol)开始,操作系统开始支持 Huge Pages,也就是大页。

简单来说, Huge Pages就是大小为2M到1GB的内存page,主要用于管理数千兆的内存,比如1GB的page对于1TB的内存来说是相对比较合适的。

THP(Transparent Huge Pages)是一个使管理Huge Pages自动化的抽象层。

目前需要注意的是,由于实现方式问题,THP会造成内存锁影响性能,尤其是在程序不是专门为大内内存页开发的时候,简单介绍如下:

操作系统后台有一个叫做khugepaged的进程,它会一直扫描所有进程占用的内存,在可能的情况下会把4kpage交换为Huge Pages,在这个过程中,对于操作的内存的各种分配活动都需要各种内存锁,直接影响程序的内存访问性能,并且,这个过程对于应用是透明的,在应用层面不可控制,对于专门为4k page优化的程序来说,可能会造成随机的性能下降现象。

小知识点:

1:从RedHat 6, OEL 6, SLES 11 and UEK2 kernels 开始,系统缺省会启用 Transparent HugePages :用来提高内存管理的性能透明大页(Transparent HugePages )和之前版本中的大页功能上类似。主要的区别是:Transparent HugePages 可以实时配置,不需要重启才能生效配置;

2:Transparent Huge Pages在32位的RHEL 6中是不支持的。

Transparent Huge Pages are not available on the 32-bit version of RHEL 6.

3: ORACLE官方不建议我们使用RedHat 6, OEL 6, SLES 11 and UEK2 kernels 时的开启透明大页(Transparent HugePages ), 因为透明大页(Transparent HugePages ) 存在一些问题:

        1.在RAC环境下 透明大页(Transparent HugePages )会导致异常节点重启,和性能问题;

        2.在单机环境中,透明大页(Transparent HugePages ) 也会导致一些异常的性能问题;

Transparent HugePages memory is enabled by default with Red Hat Enterprise Linux 6, SUSE Linux Enterprise Server 11, and Oracle Linux 6 with earlier releases of Oracle Linux Unbreakable Enterprise Kernel 2 (UEK2) kernels. Transparent HugePages memory is disabled in later releases of Oracle Linux UEK2 kernels.Transparent HugePages can cause memory allocation delays during runtime. To avoid performance issues, Oracle recommends that you disable Transparent HugePages on all Oracle Database servers. Oracle recommends that you instead use standard HugePages for enhanced performance.Transparent HugePages memory differs from standard HugePages memory because the kernel khugepaged thread allocates memory dynamically during runtime. Standard HugePages memory is pre-allocated at startup, and does not change during runtime.

Starting with RedHat 6, OEL 6, SLES 11 and UEK2 kernels, Transparent HugePages are implemented and enabled (default) in an attempt to improve the memory management. Transparent HugePages are similar to the HugePages that have been available in previous Linux releases. The main difference is that the Transparent HugePages are set up dynamically at run time by the khugepaged thread in kernel while the regular HugePages had to be preallocated at the boot up time. Because Transparent HugePages are known to cause unexpected node reboots and performance problems with RAC, Oracle strongly advises to disable the use of Transparent HugePages. In addition, Transparent Hugepages may cause problems even in a single-instance database environment with unexpected performance problems or delays. As such, Oracle recommends disabling Transparent HugePages on all Database servers running Oracle.

4:安装Vertica Analytic Database时也必须关闭透明大页功能。

 

 

RHEL6优化了内存申请的效率,而且在某些场景下对KVM的性能有明显提升:http://www.linux-kvm.org/wiki/images/9/9e/2010-forum-thp.pdf。

Hadoop是个高密集型内存运算系统,这个改动似乎给它带来了副作用。理论上运算型Java程序应该更多的使用用户态CPU才对,Cloudera官方也推荐关闭THP。于是参考一些文章作了调整:

http://structureddata.org/2012/06/18/linux-6-transparent-huge-pages-and-hadoop-workloads/

 

效果很明显,大概12:05分的时候操作的,系统态占用基本消失了。文件Cache使用上升、机器负载下降。

除了手动修改运行时参数之外,还可以修改 /etc/grub.conf 里内核的启动参数,追加“transparent_hugepage=never”(此选项只对 /sys/kernel/mm/redhat_transparent_hugepage/enabled 有效)。

与[转帖]关于大内存页面 transparent_hugepage相似的内容:

[转帖]关于大内存页面 transparent_hugepage

https://www.cnblogs.com/kevinlucky/p/9955486.html Transparent Huge Pages (THP) are enabled by default in RHEL 6 for all applications. The kernel attem

[转帖]tidb-系统内核调优及对比

一、背景 验证系统调优对性能的影响,用sysbench做了一些简单的测试,具体调整方法可见官方文档 二、特殊说明 1.透明大页查看 # 查看透明大页是否开启,[]在always处表示开启,[]在never处表示关闭 cat /sys/kernel/mm/transparent_hugepage/en

[转帖]网络转发性能测试方法 ( l3fwd, ovs-dpdk )

https://aijishu.com/a/1060000000212215 1 简介 本文记录l3fwd和ovs-dpdk性能测试中用到的关键脚本。 2 测试拓扑 l3fwd测试拓扑 ovs-dpdk测试拓扑 3 测试步骤 设置大页内存 #set hugepage umount /dev/huge

[转帖]删除数据后的Redis内存占用率为什么还是很高?

https://zhuanlan.zhihu.com/p/490569316 有时候Redis明明做了数据删除,数据量已经不大了,但是使用top命令的时候,还会发现Redis占用了很多内存? PS:关于 Redis的高并发及高可用,到底该如何保证?可以参考下这个帖子:httss://http://z

[转帖]服务器内存故障预测居然可以这样做!

https://www.jianshu.com/p/f2b399cf260a 作者:vivo 互联网服务器团队- Hao Chan 随着互联网业务的快速发展,基础设施的可用性也越来越受到业界的关注。内存发生故障的故障率高、频次多、影响大,这些对于上层业务而言都是不能接受的。 本文主要介绍EDAC(E

[转帖]Nginx性能优化-CPU篇

性能优化方法论 软件层面提升硬件使用率 增大CPU的利用率 增大内存的利用率 增大硬盘IO的利用率 增大网络带宽的利用率 提升硬件 网卡:万兆网卡 硬盘:固体硬盘,关注IOPS和BPS指标 CPU:更快主频,更多核心,更大缓存,更优架构 内存:更快访问速度 超出硬件性能上限后使用DNS CPU基本知

[转帖]ss 输出格式说明

ss 命令输出详解ss 全名socket statistics,是iproute2中的一员ss已经替代netstat,大热于江湖。但是关于ss命令输出的内容,是什么意思呢? [root@test]# ss -s Total: 26437 (kernel 27730) TCP: 31961 (esta

[转帖]解读两大精简指令集:RISC-V和MIPS

https://www.bilibili.com/read/cv14392730?spm_id_from=333.999.0.0 关注 来源:内容来自「SIMIT战略研究室」,谢谢。 当前CPU的两大架构是CISC(复杂指令集)和RISC(精简指令集),x86是CISC的代表架构,占领了95%以上的

[转帖]linux网络常见概念

Linux用户态和内核态 为了减少有限资源的访问和使用冲突,Unix/Linux的设计哲学之一就是:对不同的操作赋予不同的执行等级,就是所谓特权的概念。简单说就是有多大能力做多大的事,与系统相关的一些特别关键的操作必须由最高特权的程序来完成。Intel的X86架构的CPU提供了0到3四个特权级,数字

[转帖]linux网络常见概念

Linux用户态和内核态 为了减少有限资源的访问和使用冲突,Unix/Linux的设计哲学之一就是:对不同的操作赋予不同的执行等级,就是所谓特权的概念。简单说就是有多大能力做多大的事,与系统相关的一些特别关键的操作必须由最高特权的程序来完成。Intel的X86架构的CPU提供了0到3四个特权级,数字