可能很多朋友都了解在大記憶體的伺服器上使用hugepage有助於提公升應用的效能?不過為什麼會這樣呢?是不是使用hugepage就一定對應用的效能有幫助呢?linux的transparent hugepages功能是不是對我們有幫助呢?
如果要回答這些問題,我們必須了解hugepage是什麼,可能很多朋友都知道普通的linux記憶體頁是4k的,也就是說1m記憶體需要對映為256個頁面。而hugepage每個頁面是2m以上(不同的核心版本支援hugepage頁面的大小不同,一般是2m-256m),比如:
上面例子中的hugepage就是2m大小。那麼hugepage和普通記憶體頁的使用有什麼差異呢?當然一次性訪問4k和一次性訪問2m記憶體的效能是不存在太大的差異的,這是intel cpu的結構決定的。而最大的問題在於,使用不同的頁大小,pagetable的大小是不同的。因此,如果使用較小的頁面,那麼pagetable會比較大。當然如果只有乙份pagetable,那麼大不了也就多占用一些記憶體而已。這個pagetable不是只有乙份,第二個是每個程序都會有乙份pagetable。這樣問題就來了,如果我們系統中有幾千個會話,那麼pagetable就十分巨大了。我們做個簡單的計算,比如,乙個96g sga的資料庫,pagetable的大小大約為144m,如果我們的系統中只有100個會話,那麼大約占用14.4g的虛擬記憶體空間,如果有1000個會話,那麼就會占用144g的虛擬記憶體,甚至比sga還大。這種記憶體占用帶來的系統換頁、記憶體碎片化等等問題,在某些場景下就會變得十分嚴重。
因為共享記憶體的使用,同時使用共享記憶體的會話數量很大的情況下,乙個不是特別大的物理記憶體區域的pagetable的數量會隨著會話數的增加而增加,從而導致pagetable達到乙個海量的大小。從上面的分析我們也可以得到乙個結論,如果你的sga比較大,同時會話數比較多,那麼使用hugepage就一定會有很好的效果。否則hugepage帶來的效能提公升不會太明顯。
再衍生一下,不僅僅是oracle資料庫,所有使用較大的共享記憶體,同時程序數量十分巨大的系統都會存在類似的問題。對於共享記憶體使用hugepage都能解決這方面的問題。
弄明白了了huagepage,下面我們就要來討論一下transparent hugepages的問題了。普通的hugepage管理模式是十分麻煩的,需要手工設定hugepage的數量,如果共享記憶體超過了hugepage的大小,那麼就無法使用配置好的hugepage,必須手工加大hugepage的數量,並且重啟作業系統。這種情況下,transparent hugepages技術就登場了。
上圖的藍色區域中的directmapxx就是系統中各種大小頁面的可用容量評估值。也就是說大頁不需要提前設定好,而是可用透明的使用。如果sga需要100g的記憶體,2m的大頁和4k的小頁可以根據系統的記憶體情況動態的使用,這樣就避免了hugepage動態管理不方便的問題。
雖然透明大頁可以解決普通大頁管理的弊端,不過這種透明大頁管理的使用更為複雜,對應用有更為嚴格的要求。在某些環境中,有可能使用透明大頁帶來一些負面的影響。比如在oracle資料庫11g的環境中,已知的由於透明大頁引起的bug就不少,特別是在rac環境中會引起一些gcs/ges的效能問題,因此oracle官方建議在oracle 11g中不要使用透明大頁。綜上所述,具體是否使用透明大頁,還是要看具體的情況了。
簡單聊聊8583
網上應該有不少關於8583的文章,這個算是屬於老生常談了,但是要找一篇細緻的,容易理解的可能還真不太好找,那我們今天就來簡單的聊聊。這個其實銀聯給的文件上已經很全了,我們再複習下 m 強制域 mandatory 此域在該訊息中必須出現否則將被認為訊息格式出錯。c 條件域 conditional 此域...
簡單聊聊echarts
2.準備乙個具備大小的dom容器 3.初始化echarts實列物件 4.指定配置項和資料 5.將配置項設定給echarts實列物件 echarts的屬性 title設定圖示的標題 tooltip是滑鼠放上去顯示的內容 圖表的提示框 tooptip legend是圖例元件 如果series物件 有na...
簡單聊聊HTTP TCP IP協議
一丶什麼是http協議 http協議是hypertexttransferprotocol 超文字傳輸協議 的簡寫,它是tcp ip協議的乙個應用層協議,用於定義web瀏覽器伺服器之間交換資料的過程,客戶端連上web伺服器後,若想獲得web伺服器中的某個資源,需遵守一定的通訊格式,http協議用於定義...