亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Linux大頁與透明大頁

IT那活兒 / 2159人閱讀
Linux大頁與透明大頁

點擊上方“IT那活兒”,關(guān)注后了解更多精彩內(nèi)容?。?!




前言




最近看著手頭維護的數(shù)據(jù)庫服務(wù)器,發(fā)現(xiàn)物理內(nèi)存是越來越大,500G起步,TB也不在話下。都知道數(shù)據(jù)庫是一種吃內(nèi)存的軟件,但是面對如此巨大的物理內(nèi)存,如何高效的使用又成了一個話題,于是各家數(shù)據(jù)庫軟件廠商針對這個問題都引入了參數(shù)調(diào)優(yōu)。

比如oracle的use_large_pages,mysql的large_pages,postgres的huge_pages等參數(shù),都是用來告訴數(shù)據(jù)庫是否使用大頁模式的內(nèi)存策略。





大頁vs透明大頁




這里有個關(guān)鍵詞就是 大頁(huge page),我們以postgres為例來查一下他們的文檔解釋:

其中有2段話比較重要,第一段就是說使用大頁(huge page)能夠縮小page tables,減少cpu在內(nèi)存管理上的的系統(tǒng)開銷,提高性能,注意依賴于操作系統(tǒng)的大頁配置情況。而第二段意思說在Linux/FreeBSD這類操作系統(tǒng)上還有一種自動的大頁(huge page)管理策略稱之為透明大頁(transparent  huge page/ THP), 而THP經(jīng)常會導(dǎo)致數(shù)據(jù)庫性能下降,hang之類的,需要禁用這個THP策略。作為oracle老司機一看這個TPH就很懂,不管是MOS上的文檔,還是處理過的案例都是一茬一茬的。如下:

由于THP引起大量的重啟、以及性能問題 Oracle強烈建議客戶關(guān)閉THP特性。

經(jīng)過數(shù)據(jù)庫的文檔描述我們知道,數(shù)據(jù)庫廠商都建議啟用大頁來提升性能,并且都強烈建議關(guān)閉透明大頁以免引起各類故障。接下來我們就來深入了解一下這2個點:

大頁(huge page/large page):

我們以rhel的文檔為參考,如下:

文檔主要描述linux大多數(shù)頁為標準頁4k,當內(nèi)存較大時建議配置大頁,降低開銷之類的。

Linux內(nèi)存采用段頁式管理,這里我們不在深入探討。物理內(nèi)存會按照標準頁(page)4k來進行劃分,所有的4k頁打包在一塊就是page tables,比較簡單。當物理內(nèi)存為100G時 page tables=(100*1024*1024/4)。

由此可以確認page tables與物理內(nèi)存成正比關(guān)系,隨著物理內(nèi)存的增長,page tables 則會越來越龐大不利于管理,損耗就會逐步上升。舉個例子:當我們口袋里有1000塊的1元時,錢包都炸裂了,可以想象這是多么恐怖的一件事。此時我們就需要使用50和100的單位了。這個單位就是具體的 huge page size,通常在linux中為2048k,也就是2M。當巨量的數(shù)據(jù)庫內(nèi)存使用2M 的大頁時,產(chǎn)生的page tables則相對較小,page table的理開銷則相對較小,從而提升系統(tǒng)性能。如下圖:

實際數(shù)據(jù)庫一般使用共享內(nèi)存,大量的用戶連接進程attach到一個巨大的共享內(nèi)存段(page table)時,也會產(chǎn)生隱性開銷,比如進程fork過慢導(dǎo)致數(shù)據(jù)庫連接建立緩慢等等。搞清楚了大頁原理,我們在設(shè)置數(shù)據(jù)庫大頁時則相對簡單了,一般計算公式為:

大頁數(shù)=共享內(nèi)存(GB) *1024/2,當我們算出頁量時,設(shè)置Linux 參數(shù)vm.nr_hugepages就可以了,如下:

圖中我們使用計算器求出3G內(nèi)存的頁數(shù),然后設(shè)置nr_hugepages使之生效,就是HugePages_Total,當然我們這里沒有使用所以大頁都是Free狀態(tài). 注意寫入sysctl.conf中后可以永久生效。

透明大頁(transparent huge page / THP)


老樣子先查一下rhel的文檔描述,如下:

主要描述由于上文的大頁配置為手動模式,不是很靈活,于是內(nèi)核又搞出了一個自動分配大頁的技術(shù),用來代替手動分配大頁。以及THP主動性的分配連續(xù)大頁內(nèi)存以及頻繁的page compact等可能會導(dǎo)致內(nèi)存分配延遲,引發(fā)性能問題。

關(guān)閉也很簡單,如下:

# echo never > /sys/kernel/mm/transparent_hugepage/enabled

#
 或者修改/etc/grub.conf 添加transparent_hugepage=neve





總結(jié)



最后我們總結(jié)一下,實際在數(shù)據(jù)庫服務(wù)器上,巨大的共享內(nèi)存段屬于啟動時的一次性分配,且大部分的啟動操作都屬于計劃性的工作,不需要內(nèi)核給我們動態(tài)分配,而數(shù)據(jù)庫連接的那些server process往往內(nèi)存較小也不需要用到大頁,也就是Oracle強烈建議關(guān)閉THP的原因,本文就到此為止。





END




本 文 原 創(chuàng) 來 源:IT那活兒微信公眾號(上海新炬王翦團隊)


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/129728.html

相關(guān)文章

  • Swoole 源碼分析——內(nèi)存模塊之共享內(nèi)存

    摘要:前言我們知道,由于沒有多線程模型,所以更多的使用多進程模型,因此代碼相對來說更加簡潔,減少了各種線程鎖的阻塞與同步,但是也帶來了新的問題數(shù)據(jù)同步。相比多線程之前可以直接共享進程的內(nèi)存,進程之間數(shù)據(jù)的相互同步依賴于共享內(nèi)存。 前言 我們知道,由于 PHP 沒有多線程模型,所以 swoole 更多的使用多進程模型,因此代碼相對來說更加簡潔,減少了各種線程鎖的阻塞與同步,但是也帶來了新的問題...

    diabloneo 評論0 收藏0
  • Linux 30周年:Linux 5.14閃亮登場!添加新硬件和秘密內(nèi)存區(qū)域支持

    摘要:或許,最重要的是和內(nèi)核調(diào)度,兩者都是進行清理工作,以緩解英特爾的和漏洞。說到英特爾,增加了對的平臺的更多支持,該平臺可根據(jù)需要優(yōu)先處理工作負載。另外,還將增加戴爾硬件隱私支持。linux之父Linus Torvald:慶祝完Linux 30 歲了吧,一起來看新的 Linux 5.14。linux5.14晉升為穩(wěn)定版,在精彩的2021年秋季linux發(fā)行版大量出現(xiàn)之前提供最新的功能、硬件支持和...

    NicolasHe 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<