linux安装redis服务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, ES官⽅也明确建议把机器⼀半的内存留给lucene。我们知道程序使⽤的是内存虚拟地址,虚拟内存在转换成物理内存的时候需要查页表,也需要查页表的缓存TLB,这时就跟THP扯上关系了,开启THP,单页size⼤,需要的页⾯个数就少,从⽽就减少了缺页中断,并提⾼了TLB命中率。这样就能少查磁盘,降低磁盘IO,降低server load,从⽽提升ES查询性能。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论