Transparent Hugepages該如何理解,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
成都創(chuàng)新互聯(lián)是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設(shè)公司,自成立以來公司不斷探索創(chuàng)新,始終堅(jiān)持為客戶提供滿意周到的服務(wù),在本地打下了良好的口碑,在過去的10年時(shí)間我們累計(jì)服務(wù)了上千家以及全國(guó)政企客戶,如成都人造霧等企業(yè)單位,完善的項(xiàng)目管理流程,嚴(yán)格把控項(xiàng)目進(jìn)度與質(zhì)量監(jiān)控加上過硬的技術(shù)實(shí)力獲得客戶的一致稱揚(yáng)。
用過不少種類的數(shù)據(jù)庫(kù)的人會(huì)遇到一個(gè)問題, transparent Hugepages 在不少的數(shù)據(jù)庫(kù)中都被提到 disabled, turn off . Why should we turn off the transparent hugepage ?
透明的巨型頁(yè)面是 transparenet 的專用中文釋義名詞,對(duì)于LINUX kernel 來說 page, 頁(yè)面相當(dāng)于一個(gè)內(nèi)存的unit, (其實(shí)對(duì)于數(shù)據(jù)庫(kù)來說,大部分也是).默認(rèn)來說是2048KB, 當(dāng)然有的不是.
transparent Huge pages 允許為頻繁頻繁訪問的數(shù)據(jù)保留相關(guān)的資源,打開他的確是可以提高系統(tǒng)的性能,保持?jǐn)?shù)據(jù)滯留在linux 內(nèi)存中.
在LINUX 中有一項(xiàng)建議(非數(shù)據(jù)庫(kù)服務(wù)器), 設(shè)置3/8 以內(nèi)的內(nèi)存為transparenet huge page. 因?yàn)椴糠諰INIUX的應(yīng)用也不能使用transparenet huge page. 而在Linux內(nèi)核中包括了 THP 的壓縮功能,壓縮的操作對(duì)資源是密集型的操作,對(duì)整體的系統(tǒng)性能是有影響的.
那么問題回到一個(gè)basement level , 為什么會(huì)有 HP THP, 這樣的東西,大部分的應(yīng)用程序和OS 運(yùn)行在虛擬內(nèi)存中,虛擬內(nèi)存,虛擬內(nèi)存就是物理內(nèi)存的映射,相當(dāng)于地址轉(zhuǎn)換,CPU通過 cpu's memory management unit 簡(jiǎn)稱mmu來訪問, 自然MMU也有自己的cache 來緩存經(jīng)常訪問的頁(yè)面.這個(gè)cache 叫, Translation lookside buffer(TLB), 但實(shí)際上CPU 訪問的內(nèi)存數(shù)量越來越多
后,會(huì)帶來訪問率或者叫命中率的降低, 那解決的方法有兩種
1 提高 TLB 的大小 (這不容易,這是硬件的問題)
2 將每次尋址的單元擴(kuò)大, 也就是以前一個(gè)頁(yè)面 4KB,那我們將一個(gè)頁(yè)面變?yōu)?MB ,這樣訪問的效率不就提升了. 所以就有了HP THP 這樣的東西了.
那這樣的問題就產(chǎn)生了新的問題,一次盡量訪問更多的內(nèi)存, 但內(nèi)存也有碎片,也不見得一次是完整的連續(xù)的空間, 如果不能滿足HP THP 的需求, 則系統(tǒng)會(huì)對(duì)頁(yè)面進(jìn)行換出, 壓縮 這樣一番下來,會(huì)出現(xiàn)一個(gè)名詞叫 latency spikes , 會(huì)嚴(yán)重影響訪問的時(shí)間和性能.
而為什么有些數(shù)據(jù)庫(kù)要禁用掉THP ,主要的原因是這類數(shù)據(jù)庫(kù)大部分訪問內(nèi)存的方式是分散的,并不是訪問連續(xù)的頁(yè)面,而這樣的訪問模式,就會(huì)造成內(nèi)存的碎片化.訪問的page 不也不是大量連續(xù)性的. 并且在不啟用THP 時(shí)申請(qǐng)4KB的內(nèi)存時(shí),LINUX會(huì)分配相應(yīng)的內(nèi)存給應(yīng)用, 但如果是在系統(tǒng)級(jí)別啟用了THP,則類似數(shù)據(jù)庫(kù)申請(qǐng)內(nèi)存時(shí),即使申請(qǐng)的值是4KB ,但分配是會(huì)以大于4KB例如 2MB 來進(jìn)行分配,這樣數(shù)據(jù)庫(kù)申請(qǐng)使用內(nèi)存的方式也會(huì)出現(xiàn)問題,和相關(guān)的損耗.
值得說明的是大部分?jǐn)?shù)據(jù)庫(kù)都會(huì)建議你關(guān)閉 THP , 包括 MySQL POSTGRESQL ORACLE 等數(shù)據(jù)庫(kù)也是建議關(guān)閉THP.
但PostgreSQL 中有一個(gè)設(shè)置從PG9.4而來, Huge Page 并且有三個(gè)參數(shù) ON OFF TRY,默認(rèn)使用 try ,內(nèi)核中有足夠的大頁(yè)面,PostgreSQL將嘗試使用大頁(yè)面,若沒有就不使用它。強(qiáng)制使用巨大的頁(yè)面,內(nèi)核沒有足夠大的頁(yè)面則PostgreSQL將無法啟動(dòng)。HugePages可以通過顯著減少內(nèi)存頁(yè)表中的頁(yè)表?xiàng)l目數(shù)量來提高系統(tǒng)性能,要讓應(yīng)用程序使用HugePages,需要顯式指令。用這種方式更改應(yīng)用程序有時(shí)可以,有時(shí)不行,需要在系統(tǒng)管理級(jí)別進(jìn)行重新設(shè)計(jì)。因此,引入了透明巨頁(yè)(THP)技術(shù)。如果啟用,它可能會(huì)在應(yīng)用程序?qū)嶋H上“不知道”的情況下為應(yīng)用程序分配巨大的頁(yè)面;因此,透明度。
猜測(cè)這也就是PG 為什么支持HP 而建議關(guān)閉THP的原因之一吧
關(guān)于Transparent Hugepages該如何理解問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。