[development][dpdk][hugepage] 為不同的結點分配不同大小的大頁內存


 

這個事來自dpdk, 所以, 先參考.

http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html

當前, 假設你已經讀過上邊內容, 知道大頁內存時候, dpdk是什么,以及怎樣使用.

 

我們已經知道, 為系統分配大頁內存有兩種大小:

2M 和 1G 

1G的只有64位系統支持, 並且我們推薦64位的操作系統盡量使用1G的page

同時, 我們還知道配置大頁內存,有兩個時機

boot time 和 run time

boot time的配置寫在grub里,給內核.

run time的配置方式, 類似如下:

# 不是 numa 的
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

# 是 numa 的
echo 1024 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 1024 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages

 

據說, 1G的必須在boot time分配, 而且,就算是2M的也應該在開機之后盡快分配, 因為申請的大頁需要連續空間, 如果不連續, 申請將失敗.

那么, boot time是申請1G大頁的內核參數如下:

default_hugepagesz=1G hugepagesz=1G hugepages=4

上面的例子, 申請了4G的大頁, 如果是numa的話, 這4G會被平分給兩個node, 每個node, 2G

而接下的問題是: 在實際生產生活中我們並不想這樣用. 比如,我只想在node0上申請4G的大頁, 而不想在node1上申請大頁.

 

這時候, 一個人在intel問了這個問題, 然后intel的人很不負責人的回答了(我只是為了吐槽)

https://embedded.communities.intel.com/thread/6681

 

真正的解決方案在這里:

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/performance_tuning_guide/sect-red_hat_enterprise_linux-performance_tuning_guide-memory-configuring-huge-pages

 

簡單的來說就是

1. 先用這樣的參數

default_hugepagesz=1G hugepagesz=1G

2. 在用下面的命令, 給不同的node配置不同的頁數

echo $1 > $nodes_path/$2/hugepages/hugepages-1048576kB/nr_hugepages

 

另外如果知道,支不支持1G的大頁?

2M, 查看CPU的 psr 標記

[root@dpdk ~]# cat /proc/cpuinfo |grep pse

1G, 查看CPU的 pdpe1gb  標記

[root@dpdk ~]# cat /proc/cpuinfo |grep pdpe1gb

 

另外的另外, 我的QEMU不支持怎么辦?

首先查看支不支持,

qemu-system-x86_64 -cpu help

然后, 啟動的時候在CPU類型后面加一個參數:

qemu-system-x86_64 -cpu Nehalem,pdpe1gb

 

參考: 

[daily][qemu][kvm] qemu增加減少CPUID

 


免責聲明!

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



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