在
kvm的
測試中,有一項是要測試huge page的使用,所以對huge page(巨頁)做了一些了解,結合網上的一些資料進行總結一下。
現在,有許多的處理器架構都支援多種的
記憶體
頁大小,其中就包括比一般的page size大很多的huge page。就目前來說,儘管在個人電腦中基本都實現了對huge page的支援,然而,huge page的使用主要還是在一些大型伺服器和計算機集群中使用。
1.檢視huge page的size是多大?
linux中,可以通過 cat /pro/meminfo | grep hugepagesize 來檢視。
通常情況下,是2048kb即2mb (不同的處理器架構,可能不一樣)
另外,一般的記憶體頁大小為4kb,可以通過命令:getconf page_size 來檢視,一般是4096byte
也可以通過c程式呼叫sysconf()函式來查詢,示例**如下
#include
#include /* sysconf(3) */
int main(void)
hugepages_total: 1024
hugepages_free: 1024
hugepages_rsvd: 0
hugepages_surp: 0
hugepagesize: 2048 kb
解釋一下顯示輸出中的幾個引數的意義吧。
hugepages_total: hugepage的頁面數量
hugepages_free: 剩餘的頁面數量
hugepages_rsvd: 被分配預留但是還沒有使用的page數目
hugepages_surp:hugepages_total減去/proc/sys/vm/nr_hugepages中的值(我對這個理解也不很清楚)。
hugepagesize: 每單位數量大小
3.設定了多少的huge page,free記憶體就會被使用多少。
比如:我使用sysctl vm.nr_hugepages=1024 之後,free命令可以看到free的記憶體會減少2048mb。(這也和hugepagesize的大小有關)
4.使用hugepages的記憶體頁是不會被交換出去到磁碟的,永遠常駐在記憶體中,所以也減少了記憶體頁交換的額外開銷。使用hurgepage的記憶體不能被
其他的程序使用,所以,一定要合理設定這個值,避免造成浪費。使用超過8g物理記憶體的系統,有人推薦使用hugepage。
hugepages_free - hugepages_rsvd部分的記憶體是浪費的,且不能被其他程式使用。在實際應用中,盡可能讓hugepages_free - hugepages_rsvd=0
5.hugepage的好處:
大大提高了cpu cache中存放的page table所覆蓋的記憶體大小,從而提高了tlb命中率。程序的虛擬記憶體位址段先連線到page tables然後再連線到物理記憶體。所以在訪問記憶體時需要先訪問page tables得到虛擬記憶體和物理記憶體的對映關係,然後再訪問物理記憶體。cpu cache中有一部分tlb(translation lookaside buffer)用來存放部分page table以提高這種裝換的速度。因為page size變大了,所以同樣大小的tlb,所覆蓋的記憶體大小也變大了。提高了tbl命中率,也就是提高了位址轉換的速度。
系統程序是通過虛擬位址訪問記憶體,但是cpu必須把它轉換程物理記憶體位址才能真正訪問記憶體。為了提高這個轉換效率,cpu會快取最近的虛擬記憶體位址和物理記憶體位址的對映關係,並儲存在乙個由cpu維護的對映表中。為了盡量提高記憶體的訪問速度,需要在對映表中儲存盡量多的對映關係。
6.linux kernel 2.6.x 通過hugetlbfs檔案系統對huge pages進行了支援。當然
windows也有相應的支援,此處暫不詳述。
7.如何設定huge pages?
首先mount乙個hugetlbfs檔案系統: mount -t hugetlbfs hugetlbfs /dev/hugepages
然後為huge pages保留一定數量的記憶體:sysctl vm.nr_hugepages=1024
(另乙個操作方法,
在/etc/sysctl.conf加入如下配置就可以:vm.nr_hugepages=1024 修改後,用命令sysctl -p 使得設定生效)
(或者,改動linux啟動的grub引數也是可以的,加上 hugepages=1024 這樣的引數)
8.kvm如何讓guest使用huge pages ?
首先,讓host開啟huge pages(像上面那樣設定)
在qemu啟動時加上引數,示例:qemu-system-x86_64 -m 2048 -hda /mnt/rhel6.img -mem-path /dev/hugepages
如果是用libvirt來啟動kvm的,那麼需要在啟動guest的xml配置檔案中新增如下的引數:
(啟動guest後,可以發現,在host中的cat /pro/meminfo看到的hugepages_free數量有所減少)
9.很多
oracledba對hugepages比較關係的,他們也寫了些關於huge pages的東西,可以看看後面的參考資料,有dba建議將huge pages的大小設定為sga的大小。關於oracle的sga這些細節,我也不甚了解:thesga(system global area) is an area of memory (ram) allocated when an oracle instance starts up. the sga's size and function are controlled by initialization (init.ora or spfile) parameters.
HugePage簡介和KVM中使用HugePage
現在,有許多的處理器架構都支援多種的記憶體頁大小,其中就包括比一般的page size大很多的huge page。就目前來說,儘管在個人電腦中基本都實現了對huge page的支援,然而,huge page的使用主要還是在一些大型伺服器和計算機集群中使用。1,一般的記憶體頁查詢 getconf pa...
KVM中vhost user簡介(十三)
在 vhost 的方案中,由於 vhost 實現在核心中,guest 與 vhost 的通訊,相較於原生的 virtio 方式效能上有了一定程度的提公升,從 guest 到 kvm.ko 的互動只有一次使用者態的切換以及資料拷貝。這個方案對於不同 host 之間的通訊,或者 guest 到 host...
數字kvm和模擬kvm區別
數字kvm和模擬kvm最主要的區別是 數字kvm可以通過網路遠端進行管理 操控pc或者伺服器 模擬kvm只能在本地管理 操控pc或者伺服器 1 數字kvm裝置優點 通過ip具有集中遠端控管能力 借助網路,簡化連線線纜,擴容簡單 系統維護也比較簡單,具有非常高的投入回 值 產品成熟,具有廣泛使用者群。...