多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 服務器 > 使用HugePages優化內存性能

使用HugePages優化內存性能

來源:程序員人生   發布時間:2015-03-12 09:26:45 閱讀次數:6304次

版權聲明:轉載時請以超鏈接情勢標明文章原始出處和作者信息及本聲明
http://blog.csdn.net/wenshuangzhu/article/details/44095565


1. 引子

系統進程是通過虛擬地址訪問內存,但是CPU必須把它轉換程物理內存地址才能真正訪問內存。為了提高這個轉換效力,CPU會緩存最近的虛擬內存地址和物理內存地址的映照關系,并保存在1個由CPU保護的映照表中。為了盡可能提高內存的訪問速度,需要在映照表中保存盡可能多的映照關系。

而在Linux中,內存都是以頁的情勢劃分的,默許情況下每頁是4K,這就意味著如果物理內存很大,則映照表的條目將會非常多,會影響CPU的檢索效力。由于內存大小是固定的,為了減少映照表的條目,可采取的辦法只有增加頁的尺寸。


2. HugePages簡介


2.1 相干概念

HugePages是在Linux2.6內核被引入的,主要提供4k的page和比較大的page的選擇。

 

概念

概念說明

page table

page table是操作系統上的虛擬內存系統的數據結構模型,用于存儲虛擬地址與物理地址的對應關系。

當我們訪問內存時,首先訪問page table,然后Linux在通過page table的mapping來訪問真實物理內存(ram+swap)

TLB

A Translation Lookaside Buffer (TLB)

TLB是在cpu中分配的1個固定大小的buffer(or cache),用于保存page table的部份內容,使CPU更快的訪問并進行地址轉換。

hugetlb

hugetlb 是記錄在TLB 中的條目并指向Hugepages。

hugetlbfs

這是1個新的基于2.6 kernel之上的內存文件系統,猶如tmpfs。

在TLB中通過hugetlb來指向hugepage。這些被分配的hugepage作為內存文件系統hugetlbfs(類似tmpfs)提供給進程使用。


2.2 使用HugePages的意義

HugePages是linux內核的1個特性,使用hugepage可以用更大的內存頁來取代傳統的4K頁面。使用HugePage主要帶來以下好處:

1. HugePages 會在系統啟動時,直接分配并保存對應大小的內存區域。

2. HugePages 在開機以后,如果沒有管理員的參與,是不會釋放和改變的。

3. 沒有swap。

Notswappable: HugePages are not swappable. Therefore thereis no page-in/page-outmechanism overhead.HugePages are universally regarded aspinned.

4. 大大提高了CPU cache中寄存的page table所覆蓋的內存大小,從而提高了TLB命中率。

進程的虛擬內存地址段先連接到page table然后再連接到物理內存。所以在訪問內存時需要先訪問page tables得到虛擬內存和物理內存的映照關系,然后再訪問物理內存。

CPU cache中有1部份TLB用來寄存部份page table以提高這類轉換的速度。由于page size變大了,所以一樣大小的TLB,所覆蓋的內存大小也變大了。提高了TLB命中率,也提高了地址轉換的速度。

5. 減輕page table的負載。

進行XXX系統性能測試時,如果沒有使用HugePages,數據庫服務器上的pagetable大小大約為5G(這應當也是致使性能測試時數據庫服務器內存不足的主要緣由):

node74:/home/oracle # cat /proc/meminfo

MemTotal:       16323732 kB

PageTables:       5442384kB

配置了HugePages后,pagetable大小僅為124M(性能測試時內存使用率穩定在80%左右):

node74:/home/oracle # cat /proc/meminfo

MemTotal:       16323732 kB

PageTables:       127384 kB

Eliminated page tablelookup overhead: 由于hugepage是不swappable的,所有就沒有page table lookups。

Faster overall memory performance:  由于虛擬內存需要兩步操作才能實際對應到物理內存地址,因此更少的pages,減輕了page table訪問熱度,避免了page table熱門瓶頸問題。

6. 提高內存的性能,下降CPU負載,原理同上


2.3 使用HugePages需要注意的地方

1. Hugepages是在分配后就會預留出來的,其大小1定要比服務器上所有實例的SGA總和要大,差1點都不行。

比如說Hugepages設置為8G,oracle SGA為9G,那末oracle在啟動的時候就不會使用到這8G的Hugepages。這8G就浪費了。所以在設置Hugepages時要計算SGA的大小,后面會給出1個腳本來計算。

2. 其他進程沒法使用Hugepages的內存,所以不要設置太大,稍稍比SGA大1點保證SGA可使用到hugepages就行了。

3. 在meminfo中和Hugepage相干的有4項:

HugePages_Total:   4611

HugePages_Free:     474

HugePages_Rsvd:     467

Hugepagesize:      2048 kB

HugePages_Total為所分配的頁面數目,和Hugepagesize相乘后得到所分配的內存大小。4611*2/1024大約為9GB

HugePages_Free為歷來沒有被使用過的Hugepages數目。即便oraclesga已分配了這部份內存,但是如果沒有實際寫入,那末看到的還是Free的。這是很容易誤解的地方。

HugePages_Rsvd為已被分配預留但是還沒有使用的page數目。在Oracle剛剛啟動時,大部份內存應當都是Reserved并且Free的,隨著oracle SGA的使用,Reserved和Free都會不斷的下降。

HugePages_Free-HugePages_Rsvd 這部份是沒有被使用到的內存,如果沒有其他的oracle instance,這部份內存或許永久都不會被使用到,也就是被浪費了。

4. HugePages和oracle AMM(自動內存管理)是互斥的,所以使用HugePages必須設置內存參數MEMORY_TARGET / MEMORY_MAX_TARGET 為0。


3.  配置HugePages


3.1 修改內核參數memlock

修改內核參數memlock,單位是KB,如果內存是16G,memlock的大小要略微小于物理內存。計劃lock 12GB的內存大小。參數設置為大于SGA是沒有壞處的。

以root用戶登錄兩臺數據庫服務器,編輯limits.conf文件:

node74:~ # vi /etc/security/limits.conf

增加以下兩行內容:

*  soft  memlock    12582912

*  hard  memlock    12582912


3.2 驗證memlock limit

重新登錄root和oracle用戶,檢查memlocklimit

node74:~ # ulimit -l

12582912

oracle@node74:~> ulimit -l

12582912


3.3 禁用AMM

如果使用11G及以后的版本,AMM已默許開啟,但是AMM與Hugepages是不兼容的,必須先disable AMM。禁用AMM的步驟以下:


3.3.1 關閉數據庫實例

已oracle用戶登錄兩臺數據庫服務器,通過sqlplus關閉2個數據庫實例。

oracle@node74:~> sqlplus / as sysdba

SQL> shutdown immediate


3.3.2 創建pfile

以oracle用戶登錄其中1臺主機,履行以下命令創建pfile:

oracle@node74:~> sqlplus / as sysdba

SQL> create pfile='/home/oracle/pfile.ora' fromspfile=’+DG_ORA/orcl/spfileorcl.ora’;


3.3.3 編輯pfile

編輯pfile,刪除memory_max_target和memory_target參數:

oracle@node74:~> vi /home/oracle/pfile.ora

刪除下面幾行:

orcl1.memory_max_target=11114905600

orcl2.memory_max_target=11114905600

*.memory_max_target=0

orcl1.memory_target=11114905600

orcl2.memory_target=11114905600

*.memory_target=0

修改后保存文件。


3.3.4 創建spfile

履行以下命令創建spfile:

oracle@node74:~> sqlplus / as sysdba

SQL> create spfile='+DG_ORA/orcl/spfileorcl.ora'from pfile='/home/oracle/pfile.ora';


3.3.5 修改系統參數kernel.shmall

Kernel.shmall是系統1次可使用的最大同享內存大小。單位是page(4KB)。禁用AMM后,需要修改系統參數kernel.shmall,該參數設置太小的話,可能會致使數據庫啟動失敗ORA⑵7102(詳見附錄4.2)。

ORACLE建議將其設置為系統中所有數據庫實例的SGA總和。例如SGA總和為9GB,則需要設置kernel.shmall=9*1024*1024/4=2359296。 

以root用戶登錄兩臺數據庫服務器,編輯sysctl.conf文件。

node74:~ # vi /etc/sysctl.conf

修改kernel.shmall參數:

kernel.shmall = 2359296

履行sysctl

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品自在线 | 欧美精品黄页免费高清在线 | 亚洲视频在线网站 | 18在线观看国内精品视频 | 欧美高清视频手机在在线 | www视频在线观看免费 | 亚洲成a人片777777久久 | 国产亚洲人成a在线v网站 | 中文字幕在线亚洲 | 欧美精品久久久久久久小说 | 欧美性色视频 | 天天综合亚洲国产色 | 亚洲老女人 | japanese强迫第一次护士 | 欧美亚洲激情视频 | 欧美一区二区三区在观看 | 亚洲 中文 欧美 日韩 在线人 | 日韩欧美综合在线二区三区 | 亚洲国产成人资源在线软件 | 在线观看中文字幕亚洲 | 一级大黄美女免费播放 | 亚洲一区二区精品 | 97精品伊人久久久大香线蕉 | аⅴ资源中文在线天堂 | 黑粗硬大欧美视频 | 最近最新中文字幕在线第一页 | 国产成人午夜91精品麻豆剧场 | 亚洲日本在线观看网址 | 欧美1卡一卡二卡三新区 | 岛国视频在线播放 | 欧美日韩一区二区高清视 | 亚洲欧美一区二区三区综合 | 美女私人影院 | 中文乱码一二三四有限公司 | 特级毛片女人18毛片 | 国产一级精品绿帽视频 | 最新中文字幕乱码在线 | 成人影院一区二区三区 | 一本久久精品一区二区 | 午夜影院官网 | 欧美福利在线播放 |