Transparent Hugepages该如何理解

发布时间:2022-01-04 09:11:03 作者:柒染
来源:亿速云 阅读:235

Transparent Hugepages该如何理解,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

用过不少种类的数据库的人会遇到一个问题, transparent Hugepages 在不少的数据库中都被提到 disabled, turn off . Why should we turn off the transparent hugepage ?

透明的巨型页面是 transparenet 的专用中文释义名词,对于LINUX kernel 来说 page, 页面相当于一个内存的unit, (其实对于数据库来说,大部分也是).默认来说是2048KB, 当然有的不是.

Transparent Hugepages该如何理解

transparent Huge pages 允许为频繁频繁访问的数据保留相关的资源,打开他的确是可以提高系统的性能,保持数据滞留在linux 内存中.

在LINUX 中有一项建议(非数据库服务器), 设置3/8 以内的内存为transparenet huge page. 因为部分LINIUX的应用也不能使用transparenet huge page. 而在Linux内核中包括了 THP 的压缩功能,压缩的操作对资源是密集型的操作,对整体的系统性能是有影响的.

那么问题回到一个basement level , 为什么会有 HP  THP, 这样的东西,大部分的应用程序和OS 运行在虚拟内存中,虚拟内存,虚拟内存就是物理内存的映射,相当于地址转换,CPU通过 cpu's memory management unit  简称mmu来访问, 自然MMU也有自己的cache 来缓存经常访问的页面.这个cache 叫, Translation lookside buffer(TLB), 但实际上CPU 访问的内存数量越来越多

Transparent Hugepages该如何理解

后,会带来访问率或者叫命中率的降低, 那解决的方法有两种

1  提高 TLB 的大小 (这不容易,这是硬件的问题)

2  将每次寻址的单元扩大, 也就是以前一个页面 4KB,那我们将一个页面变为1MB ,这样访问的效率不就提升了. 所以就有了HP  THP 这样的东西了.

那这样的问题就产生了新的问题,一次尽量访问更多的内存, 但内存也有碎片,也不见得一次是完整的连续的空间, 如果不能满足HP THP 的需求, 则系统会对页面进行换出, 压缩 这样一番下来,会出现一个名词叫 latency spikes  , 会严重影响访问的时间和性能.

而为什么有些数据库要禁用掉THP ,主要的原因是这类数据库大部分访问内存的方式是分散的,并不是访问连续的页面,而这样的访问模式,就会造成内存的碎片化.访问的page 不也不是大量连续性的. 并且在不启用THP 时申请4KB的内存时,LINUX会分配相应的内存给应用, 但如果是在系统级别启用了THP,则类似数据库申请内存时,即使申请的值是4KB ,但分配是会以大于4KB例如 2MB 来进行分配,这样数据库申请使用内存的方式也会出现问题,和相关的损耗.

Transparent Hugepages该如何理解

Transparent Hugepages该如何理解

Transparent Hugepages该如何理解

Transparent Hugepages该如何理解

值得说明的是大部分数据库都会建议你关闭 THP , 包括 MYSQL  POSTGRESQL  ORACLE 等数据库也是建议关闭THP. 

但PostgreSQL 中有一个设置从PG9.4而来, Huge Page 并且有三个参数 ON OFF  TRY,默认使用 try ,内核中有足够的大页面,PostgreSQL将尝试使用大页面,若没有就不使用它。强制使用巨大的页面,内核没有足够大的页面则PostgreSQL将无法启动。HugePages可以通过显著减少内存页表中的页表条目数量来提高系统性能,要让应用程序使用HugePages,需要显式指令。用这种方式更改应用程序有时可以,有时不行,需要在系统管理级别进行重新设计。因此,引入了透明巨页(THP)技术。如果启用,它可能会在应用程序实际上“不知道”的情况下为应用程序分配巨大的页面;因此,透明度。

猜测这也就是PG 为什么支持HP 而建议关闭THP的原因之一吧

关于Transparent Hugepages该如何理解问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读:
  1. Oracle中如何配置HugePages内存
  2. PHP7中Hugepage如何使用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:怎么引用Java抽象接口

下一篇:JS的script标签属性有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》