HugePage簡介和KVM中使用HugePage

2022-03-25 09:42:12 字數 2914 閱讀 3376

現在,有許多的處理器架構都支援多種的記憶體頁大小,其中就包括比一般的page size大很多的huge page。就目前來說,儘管在個人電腦中基本都實現了對huge page的支援,然而,huge page的使用主要還是在一些大型伺服器和計算機集群中使用。

1,一般的記憶體頁查詢:

# getconf page_size

說明:一般是4096byte

2,hugepagesize查詢

# cat /pro/meminfo | grep huge

hugepagesize=2048

說明:不同的處理器架構,可能不一樣,通常情況下,是2048kb即2m.

c程式呼叫介面:sysconf(_sc_pagesize));  /* _sc_page_size is ok too. */ 涉及標頭檔案:unistd.h

3, 檢視hugepage相關資訊

cat /proc/meminfo | grep huge

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: 每單位數量大小

又摘:hugepages_total: 所分配的頁面數目,

和hugepagesize相乘後得到所分配的記憶體大小。43000*2/1024大約為84gb

hugepages_free:  從來沒有被使用過的hugepages數目。

即使oracle sga已經分配了這部分記憶體,但是如果沒有實際寫入,那麼看到的還是free的。這是很容易誤解的地方

hugepages_rsvd:  已經被分配預留但是還沒有使用的page數目。

在oracle剛剛啟動時,大部分記憶體應該都是reserved並且free的,隨著oracle sga的使用,reserved和free都會不斷的降低

hugepages_total為設定的值大小,hugepages_free應該和hugepages_total一樣大,hugepages_rsvd為0.

hugepages_free – hugepages_rsvd 這部分是沒有被使用到的記憶體,如果沒有其他的oracle instance,這部分記憶體也許永遠都不會被使用到,也就是被浪費了。在該系統上有11.5gb的記憶體被浪費了。

4設定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 這樣的引數)

其它:1.設定了多少的huge page,free記憶體就會被使用多少。

比如:我使用sysctl vm.nr_hugepages=1024 之後,free命令可以看到free的記憶體會減少nr_hugepages*hugepagesize大小,這裡是2048m。

2,使用hugepages的記憶體頁是不會被交換出去到磁碟的,永遠常駐在記憶體中,所以也減少了記憶體頁交換的額外開銷。使用hurgepage的記憶體不能被其他的程序使用,所以,一定要合理設定這個值,避免造成浪費。使用超過8g物理記憶體的系統,有人推薦使用hugepage。

hugepages_free - hugepages_rsvd部分的記憶體是浪費的,且不能被其他程式使用。在實際應用中,盡可能讓hugepages_free - hugepages_rsvd=0

3,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維護的對映表中。為了盡量提高記憶體的訪問速度,需要在對映表中儲存盡量多的對映關係。

4,linux kernel 2.6.x 通過hugetlbfs檔案系統對huge pages進行了支援。當然windows也有相應的支援,此處暫不詳述。

5,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數量有所減少)

HugePage簡介和KVM中使用HugePage

在 kvm的 測試中,有一項是要測試huge page的使用,所以對huge page 巨頁 做了一些了解,結合網上的一些資料進行總結一下。現在,有許多的處理器架構都支援多種的 記憶體 頁大小,其中就包括比一般的page size大很多的huge page。就目前來說,儘管在個人電腦中基本都實現了對...

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具有集中遠端控管能力 借助網路,簡化連線線纜,擴容簡單 系統維護也比較簡單,具有非常高的投入回 值 產品成熟,具有廣泛使用者群。...