惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Register - Security
The Register - Security
云风的 BLOG
云风的 BLOG
U
Unit 42
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
D
Docker
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
Secure Thoughts
Hacker News: Ask HN
Hacker News: Ask HN
Vercel News
Vercel News
S
Security @ Cisco Blogs
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
I
Intezer
MongoDB | Blog
MongoDB | Blog
AI
AI
MyScale Blog
MyScale Blog
Engineering at Meta
Engineering at Meta
Y
Y Combinator Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
W
WeLiveSecurity
博客园 - 叶小钗
S
SegmentFault 最新的问题
N
News | PayPal Newsroom
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
DataBreaches.Net
小众软件
小众软件
Microsoft Azure Blog
Microsoft Azure Blog
Spread Privacy
Spread Privacy
H
Help Net Security
美团技术团队
博客园 - 司徒正美
T
Threat Research - Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
K
Kaspersky official blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
V
Vulnerabilities – Threatpost
TaoSecurity Blog
TaoSecurity Blog
N
Netflix TechBlog - Medium
L
Lohrmann on Cybersecurity
J
Java Code Geeks
量子位
Martin Fowler
Martin Fowler
博客园_首页

博客园 - 软件心理学工程师

SPIFFE/SPIRE 的身份哲学与技术实现 后量子密码学(post-quantum cryptography):为什么重要以及如何使用 密钥管理碎碎念 SpringBoot集成resilience4j进行熔断和一个响应式编程的问题 凤凰项目&DevOps实践指南 OAuth2和OpenID API横向越权问题的分析和解决 初识RAG 基于AWS的密钥管理系统 加密算法的使用场景 《java8 in action》读书笔记 ES索引的一些长度限制 初识redis Elasticsearch慢查询故障诊断 Elasticsearch搜索调优 elasticsearch基础知识杂记 elasticsearch.yml 常用参数说明 linux log rotate elasticsearch local debug环境搭建 CAP碎碎念 彻底删除kafka topic步骤
Linux透明大页(Transparent Huge Pages)对ES性能对影响
软件心理学工程师 · 2020-04-06 · via 博客园 - 软件心理学工程师

上周对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查询性能。