Linux Hugepage ,AMM及 USE_LARGE_PAGES for oracle 11G(轉載)

來源:互聯網
上載者:User

標籤:

1.  Hugepage基本概念 
    系統進程是通過虛擬位址訪問記憶體,但是CPU必須把它轉換成實體記憶體地址才能真正訪問記憶體。
為了提高這個轉換效率,CPU會緩衝最近的“虛擬記憶體地址和實體記憶體地址”的映射關係,並儲存在
一個由CPU維護的映射表(page table)中。
    page table(頁表)是作業系統上的虛擬記憶體系統的資料結構模型,用於儲存虛擬位址與物理地
址的對應關係。當我們訪問記憶體時,首先訪問"page table",然後Linux再通過"page table"的mapping
來訪問真實實體記憶體(RAM或SWAP).
    在32位系統下,一個進程訪問1GB的記憶體,會產生1M的頁表,如果是在64位系統,將會增大到2M。
很容易推算,如果一個SGA設定為60G,有1500個ORACLE使用者進程,64位LINUX的系統上,最大的頁表
佔用記憶體為:60*2*1500/1024=175G 。

    為了盡量提高記憶體的訪問速度,需要在映射表中儲存盡量多的映射關係。而在Redhat Linux中,
記憶體都是以頁(Page)的形式劃分的,預設情況下每頁是4K Bytes,這就意味著如果實體記憶體很大,比
如64G ,則映射表的條目將會非常多,這將會影響CPU的檢索效率(CPU需要轉化虛擬位址為物理地址)。
而且根據上面的推算,頁表會佔用比實體記憶體還多的記憶體大小。
   因記憶體大小是固定的,為了減少映射表的條目,可採取的辦法只有增加頁的尺寸。這種增大的內
存頁尺寸在Linux 2.1中,稱為Big page;在AS 3/4或後續版本中,稱為Hugepage。如果系統有大量
的實體記憶體(大於8G),則無論32位的作業系統還是64位的,都應該使用Hugepage。

2.  Hugepage基本資料查看 
   Linux中,可以通過如下命令來查看HugePage相關的值:
$ cat /proc/meminfo | grep Huge
HugePages_Total:   0
HugePages_Free:    0
HugePages_Rsvd:    0
Hugepagesize:     2048 KB
  通常情況下,Linux hugepage大小為2MB (不同的處理器架構,可能不一樣)
HugePages_Total: Hugepage的頁面數量
HugePages_Free:  剩餘的頁面數量
HugePages_Rsvd:  被分配預留但是還沒有使用的page數目
Hugepagesize:    每單位元量大小
注意:  使用Hugepage記憶體是共用記憶體,它會一直pin在記憶體中,不會被交換出去,也就是說使用
hugepage的記憶體不能被其他的進程使用,所以一定要合理設定這個值,避免造成浪費。對於只使用
Oracle的伺服器來說,把Hugepage_pool設定成稍大於SGA大小即可。PGA因不是共用記憶體,是使用
不到Hugepage的。 
    HugePages_Free - HugePages_Rsvd部分的記憶體是浪費的,且不能被其他程式使用。在實際應用中,
儘可能讓HugePages_Free - HugePages_Rsvd=0
    設定了多少的huge page,free記憶體就會被使用多少。比如:設定sysctl vm.nr_hugepages=1024
之後, free命令可以看到free的記憶體會減少2048MB (1024*2M)。(這也和Hugepagesize的大小有關)
 
3.  Hugepage的好處:
a.  大大提高了CPU cache中存放的page table所覆蓋的記憶體大小,從而提高了TLB命中率。
b.  CPU cache中有一部分TLB(Translation Lookaside Buffer)用來存放部分page table以提高虛擬記憶體
地址到實體記憶體地址轉換的速度。因為page size變大了,所以同樣大小的TLB,所覆蓋的記憶體大小也變大了。
提高了TBL命中率,也就是提高了地址轉換的速度。
c. 減少CPU的sys的使用。由於提高了CPU的TLB的命中率,也就降低了CPU的sys部分的使用。
d. 大頁會將SGA LOCK在RAM裡, 當記憶體短缺的時候也不會被page out

4. 如何配置Hugepages 
   根據下面的步驟來配置Hugepages,修改Hugepages需要重啟機器。   
1). 需要在/etc/security/limits.conf 中設定memlock值(單位KB),該值小於記憶體大小,
例如你的記憶體大小是64G,有可以設定以下的值:  
*   soft   memlock    60397977 
*   hard   memlock    60397977
這個值大於SGA需求並沒有什麼害處。
 
如果是Exadata機器,參數要求請參考文檔1284261.1
2). 重新登入root和oracle使用者,檢查memlock limit
$ ulimit -l 
60397977 
3). 如果你使用11G及以後的版本,AMM(自動記憶體管理)已經預設開啟,但是AMM與Hugepages
是不相容的(因為hugepage是共用記憶體,不適合PGA),必須先關閉AMM。
4). 確保你的全部執行個體都已經啟動(包括ASM) ,然後根據Document 401749.1 的hugepages_settings.sh
去評估需要設定的Hugepages的大小。  
$ ./hugepages_settings.sh 
... 
Recommended setting: vm.nr_hugepages = 1496
註:也可以自己計算需要的Hugepages大小,其實就是Hugepages size> all of the SGA size
5).  編輯/etc/sysctl.conf 設定 vm.nr_hugepages參數:
vm.nr_hugepages = 1496 
 
6).  停止執行個體並重啟OS系統 
7).  檢查設定是否生效 
系統重啟後,啟動全部的資料庫,通過以下命令檢查
 
# grep HugePages /proc/meminfo 
HugePages_Total:    1496 
HugePages_Free:      485 
HugePages_Rsvd:      446 
HugePages_Surp:        0
 
HugePages_Free< HugePages_Total 既說明Hugepages已經生效,同時HugePages_Rsvd不為“0”.

5.  如何控制資料庫SGA是否使用Hugepages?
 
  11.2.0.2之前的版本,DB的SGA只能選擇全部使用hugepages或者完全不使用hugepages。
 
  11.2.0.2 及以後的版本, oracle增加了一個新的參數“USE_LARGE_PAGES”來管理資料庫如何使用 hugepages.
  在11.2.0.3的時候,USE_LARGE_PAGES這個參數讓Oracle的行為更加靈活。如果出現HugePage分派不足的情況,
SGA是可以使用那些small pages的。這就保證了極端情況下資料庫是可以正常啟動並執行。
 
USE_LARGE_PAGES參數有三個值: "true" (default), "only", "false" and "auto"(since 11.2.0.3 patchset).
 
a). 現在預設值是"true",如果系統設定Hugepages的話,SGA會優先使用hugepages,有多少用多少。 
11.2.0.2 如果沒有足夠的 hugepages, SGA是不會使用hugepages的. 這會導致ORA-4030錯誤,因為hugepages已
經從實體記憶體分配,但是SGA沒有使用它,卻使用其他部分記憶體,導致記憶體資源不足。  但是在11.2.0.3版本這個
使用原則被改變了,SGA可以一部分使用hugepages,剩餘部分使用small pages。這樣,SGA會有限使用hugepages,
在hugepages用完之後,再使用regular sized pages。
 
b). 如果設定為"false" , SGA就不會使用hugepages
 
c). 如果設定為 "only" 如果hugepages大小不夠的話,資料庫執行個體是無法啟動的 (防止記憶體溢出的情況發生).
 
d). 11.2.0.3版本之後,可以設定為 "auto".這個選項會觸發oradism進程重新設定linux核心,以增加hugepages
的數量。

參考 : 
http://hsbxxl.blog.51cto.com/181620/1075166
http://blog.csdn.net/herecles/article/details/16861743
http://oracle.codemach.com/zai-linux-xia-wei-oracle-kai-qi-da-ye-hugepage.html
http://blog.itpub.net/17203031/viewspace-775004 

Linux Hugepage ,AMM及 USE_LARGE_PAGES for oracle 11G(轉載)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.