Linux透明大頁(Transparent Huge Pages)對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查詢性能。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM