大頁(Huge Page)簡單介紹


 

x86(包括x86-32x86-64)架構的CPU默認使用4KB大小的內存頁面(getconf PAGESIZE),但是它們也支持較大的內存頁,如x86-64系統就支持2MB大小的大頁(huge page)

Linux 2.6及以上的內核都支持huge page

如果在系統中使用了huge page,則內存頁的數量會減少,從而需要更少的頁表(page table)約了頁表所占用的內存數量,並且所需的地址轉換也減少了,TLB緩存失效的次數就減少了,從而提高了內存訪問的性能

另外,由於地址轉換所需的信息一般保存在CPU的緩存中,huge page的使用讓地址轉換信息減少,從而減少了CPU緩存的使用,減輕了CPU緩存的壓力,讓CPU緩存能更多地用於應用程序的數據緩存,也能夠在整體上提升系統的性能

 

在KVM中,也可以將huge page的特性應用到客戶機中:

qemu-kvm 就提供了"-mempath FILE"參數選項用於使用huge page

另外,還有一個參數"-mem-prealloc"可以讓宿主機在啟動客戶機時就全部分配好客戶機的內存,而不是在客戶機實際用到更多內存時才按需分配。

-mem-prealloc 必須在有"-mem-path" 參數時才能使用

提前分配好內存的好處是客戶機的內存訪問速度更快,缺點是客戶機啟動時就得到了所有的內存,從而讓宿主機的內存很快減少(而不是根據客戶機的需求而動態調整內存分配)。

 

通過在宿主機中的如下幾個操作讓客戶機使用huge page

(1)檢查宿主機目前狀態,檢查默認的內存大小和內存使用情況,如下:

getconf  PAGESIZE

cat  /proc/meminfo

 

 

(2)(在宿主機中)掛載hugetlbfs文件系統,命令為:

"mount  -t hugetlbfs  hugetlbfs  /dev/hugepages",

如下:

mount  -t hugetlbfs  hugetlbfs  /dev/hugepages

mount|grep  huge

( 3 )設置(在宿主機中設置允許虛擬機使用的)hugepage的數量,命令為"sysctl vm.nr_hugepages=num", 如下:

 

 

 

( 4 )啟動客戶機讓其使用hugepage的內存,使用"-mem-path" 參數,如下:

qemu-system-x86_64  -m 1024  -smp 2  /opt/cs-01.img  -mem-path /dev/hugepages

( 5 )查看宿主機中huge page的使用情況,可以看到"HugePages_Free"數值減少,因為客戶機使用了一定數最的hugepage。

在如下的輸出中,"HugePages_Free"數值的減少沒有512(512*2MB=1024MB)那么多,這是因為啟動客戶機時並沒有實際分配1024MB內存,qemu-kvm命令行中加上前面提到的"-mem-prealloc"參數就會讓meminfo文件中"HugePages_Free"的數量減少和分配給客戶機的一致

 

 

至此,如果在客戶機中運行的應用程序(典型的應用為oracle數據庫)具備使用huge page的能力,那么就可以在客戶機中使用huge page帶來性能的提升

總的來說,對於內存訪問密集型的應用,在KVM客戶機中使用huge page是可以較明顯地提高客戶機性能的,不過,它也有一個缺點,使用huge page的內存不能被換出(swap out),也不能使用ballooning方式自動增長


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM