Linux透明大页(TransparentHugePages)对ES性能对影响
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Linux透明⼤页(TransparentHugePages)对ES性能对影响上周对ES集群进⾏扩容,运维同学找了⼏台物理机部署data node,结果发现新的data node⽐以前的data node性能差很多。
同样的data node配置,同样的查询量,测试结果:CPU低,load⾮常⾼,diskIO打满。
最后通过对⽐系统配置,发现区别是新加⼊的物理机以前是跑MongoDB的,按官⽅建议关闭了透明⼤页(THP),⽽⽼机器的透明⼤页是开启的,遂把THP enable、重启。
果然data node性能恢复正常。
以前读到的ES相关⽂档中似乎没有涉及到THP的,不过在对THP有⼀定了解之后,就能够弄明⽩为什么开启THP会有助于提升data node性能了。
透明⼤页顾名思义就是把⼤页透明化,“透明”很好理解,我们在软件设计中经常涉及到组件“透明化”,⽅便调⽤⽅使⽤。
透明⼤页就是对“标准⼤页”的优化:⽅便使⽤和管理。
所以,只要搞明⽩什么是标准⼤页基本就够了。
操作系统内存管理上每个页是4kb,这是在计算机技术发展的初期定下来的,当时计算机的内存都⽐较⼩,到了今天,服务器内存动辄⼏⼗G上百G,进程使⽤的内存也普遍⼏G⼏⼗G,某些使⽤场景中每页⼤⼩4kb的不⾜就逐渐体现出来了。
⽐如程序使⽤2M的内存,每页4kb则需要512个页,同时TLB(快表,就是所谓的⾼级缓存)中有512项。
当需要加载到内存时,会产⽣512次缺页中断,当查询的时候页容易出现TLB Miss。
如果每页是2M,则只需要1次缺页中断以及更⾼的cache命中率,从⽽使⽤⼤页相应的增⼤了内存的使⽤率。
不过也不是所有场景都适合开启THP,MongoDB,Redis,OracleDB等数据库⽅⾯的应⽤明确表明需要disable THP,因与本⽂⽆关不再展开。
再回来说说为什么ES对THP那么敏感。
ES---准确的说是lucene---⾮常依赖内存,lucene⽤到内存的地⽅很多:Field Data, Term Dictionary,Posting List... ES官⽅也明确建议把机器⼀半的内存留给lucene。
我们知道程序使⽤的是内存虚拟地址,虚拟内存在转换成物理内存的时候需要查页表,也需要查页表的缓存TLB,这时就跟THP扯上关系了,开启THP,单页size⼤,需要的页⾯个数就少,从⽽就减少了缺页中断,并提⾼了TLB命中率。
这样就能少查磁盘,降低磁盘IO,降低server load,从⽽提升ES查询性能。