Hugepages你用了嗎?--原理概念篇

來源:互聯網
上載者:User


Hugepages你用了嗎?----原理概念篇

Hugepages你用了嗎?----測試案例篇

     引子

     系統進程是通過虛擬位址訪問記憶體,但是CPU必須把它轉換程實體記憶體地址才能真正訪問記憶體。為了提高這個轉換效率,CPU會緩衝最近的虛擬記憶體地址和實體記憶體地址的映射關係,並儲存在一個由CPU維護的映射表中。為了盡量提高記憶體的訪問速度,需要在映射表中儲存盡量多的映射關係。
    而在Linux中,記憶體都是以頁的形式劃分的,預設情況下每頁是4K,這就意味著如果實體記憶體很大,則映射表的條目將會非常多,會影響CPU的檢索效率。因為記憶體大小是固定的,為了減少映射表的條目,可採取的辦法只有增加頁的尺寸。

一、hugepages及相關概念

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

    有一些顯示的概念需要澄清,在我們繼續討論Hugepages之前, 如hugetlb, hugetlbfs

page table頁表)是作業系統上的虛擬記憶體系統的資料結構模型,用於儲存虛擬位址與物理地址的對應關係。

當我們訪問記憶體時,首先訪問”page table“,然後Linux在通過“page table”的mapping來訪問真實實體記憶體ram+swap)

TLB: A Translation Lookaside Buffer (TLB)

TLB是在cpu中分配的一個固定大小的buffer(or cache),用於儲存“page table”的部分內容,使CPU更快的訪問並進行地址轉換。

hugetlb: hugetlb 是記錄在TLB 中條目並指向到Hugepage。所以HugePages 通過 hugetlb entries來調用的。

hugetlbfs: 這是一個新的基於2.6 kernel之上的記憶體檔案系統,如同tmpfs。

在TLB中通過hugetlb來指向hugepage。這些被分配的hugepage作為記憶體檔案系統hugetlbfs(類似tmpfs)提供給進程使用。

二、“regular page”和“huge page“的請求過程

當一個進程請求記憶體時,它需要訪問檔案系統的“頁表”Pagetable)去調用一個實際的實體記憶體地址

650) this.width=650;" height="424" border="0" src="http://www.bkjia.com/uploads/allimg/131229/1Z055C52-0.gif" alt="clip_image002" title="clip_image002" style="border: 0px none;" />

當Hugepage部署後,依然是調用普通的頁表。 最大的不同是process pagetable和system pagetable增加了Hugepage屬性。所以任何頁表中的page條目可以是“regular page” 或者是“huge page”650) this.width=650;" height="432" border="0" src="http://www.bkjia.com/uploads/allimg/131229/1Z0551923-1.gif" alt="clip_image004" title="clip_image004" style="border: 0px none;" />

HugePage 的尺寸根據核心版本和硬體架構從 2MB 到 256MB , 如下表

HW Platform

Source Code Tree

Kernel 2.4

Kernel 2.6

Linux x86 (IA32)

i386

4 MB

4 MB *

Linux x86-64 (AMD64, EM64T)

x86_64

2 MB

2 MB

Linux Itanium (IA64)

ia64

256 MB

256 MB

IBM Power Based Linux (PPC64)

ppc64/powerpc

N/A **

16 MB

IBM zSeries Based Linux

s390

N/A

N/A

IBM S/390 Based Linux

s390

N/A

N/A

三、 hugepage 優點

1. HugePages 會在系統啟動時,直接分配並保留對應大小的記憶體地區

2. HugePages 在開機之後,如果沒有管理員的介入,是不會釋放和改變的。

3. Not swappable: HugePages 是不會swap.也就是沒有page-in/page-out。HugePages一直被pin在記憶體中

4. Relief of TLB pressure:

在purge TLB的時候,減少了事物條目的載入,提高了效能。

使用Hugepages後TLB能覆蓋更大的記憶體位址空間,加快地址轉換的時間

更少的TLB條目,意味著有更大空間用來記錄其他的地址空間

  1. No 'kswapd' Operations:在Linux下進程“kswapd”是管理swap的,如果是大記憶體,那pages的數量就非常龐大例如:50G記憶體包含1千3百萬頁表條目),就會耗費驚人的CPU資源。如果使用hugepages,kswapd就不會耗費資源去管理它,可以查看文檔361670.1。
  2. Eliminated page table lookup overhead: 因為hugepage是不swappable的,所有就沒有page table lookups。
  3. Faster overall memory performance:  由於虛擬記憶體需要兩步操作才能實際對應到實體記憶體地址,因此更少的pages,減輕了page table訪問熱度,避免了page table熱點瓶頸問題。

 

四. 如何配置Hugepages

   根據下面的步驟來配置Hugepages,修改Hugepages需要重啟機器,使用請計劃停機時間。

Step 1: 需要在/etc/security/limits.conf 中設定memlock值(單位KB),該值小於記憶體大小,例如你的記憶體大小是64G,有可以設定以下的值

*   soft   memlock    60397977
*   hard   memlock    60397977

這個值大於SGA需求並沒有什麼害處。

如果是Exadata機器,參數要求請參考文檔1284261.1


Step 2: 重新登入root和oracle使用者,檢查memlock  limit

$ ulimit -l
60397977

Step 3: 如果你使用11G及以後的版本,AMM已經預設開啟,但是AMM與Hugepages是不相容的,必須先disable AMM。
-----------------------------------------------------------------

禁用memory_max_target和memory_target參數方法

這裡注意,官方文檔說的是“unset” ,直接alter system set memory_target=0 scope=spfile;是更改不成功的。直接設定為‘0’,就抱如下的錯誤

ORA-00843: Parameter not taking MEMORY_MAX_TARGET into account
ORA-00849: SGA_TARGET 35433480192 cannot be set to more than MEMORY_MAX_TARGET 0.
ORA-01078: failure in processing system parameters

通過建立pfile.ora檔案,然後在檔案裡刪除兩個參數"MEMORY_TARGET/MEMORY_MAX_TARGET"。然後再建立spfile就可以了。

-----------------------------------------------------------------

Step 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
Step 5: 編輯/etc/sysctl.conf 設定 vm.nr_hugepages參數:

...
vm.nr_hugepages = 1496
...

Step 6: 停止執行個體並重啟OS系統

Step 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”.

五、如何控制資料庫SGA是否使用Hugepages?

  11.2.0.2之前的版本,database的SGA只能選擇全部使用hugepages或者完全不使用hugepages。

  11.2.0.2 及以後的版本, oracle增加了一個新的參數“USE_LARGE_PAGES”來管理資料庫如何使用 hugepages.

USE_LARGE_PAGES參數有三個值: "true" (default), "only", "false" and "auto"(since 11.2.0.3 patchset).

1. 現在預設值是"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。

2. 如果設定為"false" , SGA就不會使用hugepages

3. 如果設定為 "only" 如果hugepages大小不夠的話,資料庫執行個體是無法啟動的 (防止記憶體溢出的情況發生).

4. 11.2.0.3版本之後,可以設定為 "auto".這個選項會觸發oradism進程重新設定linux核心,以增加hugepages的數量。Oradism需要被賦予相應的許可權,如下

-rwsr-x--- 1 root <oracle group>

它不會去改變/etc/sysctl.conf檔案中的hugepages值,當OS重啟後,系統會再恢複到/etc/sysctl.conf中配置的hugepages值。

六、如果Database / SGA 配置改變,會怎麼樣?

當你的系統涉及到以下改變的時候,你需要注意了,Hugepages可能需要重新設定

  • Linux OS 實體記憶體大小的改變
  • 安裝新的資料庫執行個體
  • SGA 大小在一個或多個資料庫執行個體上被改變

如果設定不匹配你的系統改變,會需要下面的問題:

  • Poor database performance
  • 很差的資料庫效能
  • 系統記憶體溢出或者大量的swapping
  • 資料庫執行個體無法啟動
  • 核心系統服務失敗

針對以上概念,可以根據“Hugepages你用了嗎?--測試案例篇”來更深入的理解。

 

Oracle官方文檔

HugePages on Linux: What It Is... and What It Is Not... (Doc ID 361323.1)

HugePages on Oracle Linux 64-bit (Doc ID 361468.1)

HugePages and Oracle Database 11g Automatic Memory Management (AMM) on Linux (Doc ID 749851.1)

Linux IA64 example of allocating 48GB SGA using hugepages (Doc ID 397568.1)

Shell Script to Calculate Values Recommended Linux HugePages / HugeTLB Configuration (Doc ID 401749.1)

USE_LARGE_PAGES To Enable HugePages In 11.2 (Doc ID 1392497.1)

650) this.width=650;" height="32" border="0" src="http://www.bkjia.com/uploads/allimg/131229/1Z0551493-2.gif" alt="clip_image005" title="clip_image005" style="border: 0px none;" />650) this.width=650;" height="32" border="0" src="http://www.bkjia.com/uploads/allimg/131229/1Z0553J2-3.gif" alt="clip_image005[1]" title="clip_image005[1]" style="border: 0px none;" />

 

本文出自 “小小狗窩” 部落格,謝絕轉載!

相關文章

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.