1. 程式人生 > >官檔翻譯-安裝dpdk前的準備工作

官檔翻譯-安裝dpdk前的準備工作

翻譯地址:http://doc.dpdk.org/guides/linux_gsg/sys_reqs.html

編譯DPDK所需系統要求

1.GUN make
2.coreutils: cmp,sed,grep,archetc
3.gcc:版本 4.9+
4.需要安裝kernel - devel.x86_64或者 kernel - devel.ppc64
5.針對32和64位的系統需要考慮不同的安裝包

  • glibc.i686, libgcc.i686, libstdc++.i686 and glibc-devel.i686 for Intel i686/x86_64;
  • glibc.ppc64, libgcc.ppc64, libstdc++.ppc64 and glibc-devel.ppc64 for IBM ppc_64;
    6.libnuma-devel 處理NUMA的庫,(Non Uniform Memory Access)
    7.python2.7+或者python3.2+。用於處理dpdk包中的各種輔助指令碼

可選工具

1.Intel C++ 編譯器(icc)。針對一些額外需要安裝的包可能需要icc庫來進行編譯。安裝該編譯器之前可以檢視icc的安裝文件來獲取更多幫助。
2.針對powerlinux,可能需要安裝IBM Advance ToolChain。這是一組開源工具,允許客戶在IBM最新的POWER硬體上使用runtime時間庫(機器需要安裝了linux作業系統)
3.libpcap頭和libraries(libpcap-devel)包。為的是可以編譯載入libpcap-based pool-mod。這個驅動在初始化的時候預設關閉的,可以通過編譯安裝來使用該驅動。
4.libarchive頭和對應的庫,該工具可以適用於一些單元測試,使用tar來獲取單元測試中的資源。

系統軟體要求

1.Kernel版本 >=3.2

DPDK還在設計開發的時候,基於當時可用的kernel穩定版本。你的作業系統kernel版本可以使用如下命令檢查:

uname -r

2.glibc >=2.7 (針對有關cpuset的特性)

glibc的版本檢查可以基於ldd --version來檢視,這種方式不一定正確,可以通過strings /lib64/libc.so.6 | grep GLIBC命令檢視
這裡如果要升級的話可以使用原始碼升級

核心配置要求

在Fedora OS作業系統和其他大部分發行版的linux作業系統,例如Ubuntu或者redhat。這些發行版的作業系統核心配置都可以支援DPDK執行大部分的測試用例。

針對其他核心build,應該為dpdk開啟的選項包括:
HUGETLBFS

支援PROC_PAGE_MONITOR

如果需要開啟HPET,則相應的需要開啟HPET和HPET_MMAP配置。

使用大頁記憶體

Hugepage支援大記憶體池,記憶體用於處理資料緩衝區。(HUGETLBFS選項在執行核心時必須開啟)。使用大頁記憶體分配技術,只需要分配少量的大頁給DPDK,效能便會大大提高,因此會使Translation lookaside Buffers緩衝區交換報文減少。(TLBs,高速交換快取區)用於減少虛擬頁地址定址物理頁地址的時間。沒有大頁之前,TLB會在4k頁上下交換時出現未命中的情況,這樣會導致信效能降低。

保留大頁記憶體給DPDK使用

大頁記憶體的分配應該在啟動時,或者在系統啟動之後儘快從實體記憶體中取出記憶體保留。在開機啟動時保留大頁記憶體,通過控制核心的命令將引數傳遞給linux核心。大頁記憶體大大小預設為2M,如果設定2M的大頁記憶體,只需要將大頁記憶體的引數傳遞給核心。例如:需要保留1024頁2M大小的大頁記憶體。

hugepages=1024

針對其他大小的大頁,例如設定1G大小的大頁,大頁的規格也需要被特殊註明,當然也可以設定系統預設的大頁記憶體大小。例如,為了保留4G大小的大頁記憶體,每個大頁的記憶體大小設定為1G,則傳入核心的引數設定應該為:

default_hugepagesz=1G hugepagesz=1G hugepages=4

注意:選取為單顆CPU設定的大頁記憶體的大小取決於CPU支援的識別符號,這也就取決於CPU的架構。如果pse識別符號存在,則支援2M的大頁記憶體,如果pdpe 1gb識別符號存在,則支援1G大頁記憶體。在IBM Power架構下,支援的大頁記憶體的大小是16MB和16GB。

注意:針對64位的應用,如果平臺能夠支援1GB大小的大頁記憶體,建議使用1GB的大頁記憶體。

在雙單元NUMA系統中,被分配的大頁記憶體在開機的時候會平均的分配給每一側的numa節點上。假設每個numa節點都能足夠分配到應有的記憶體。
http://doc.dpdk.org/guides/linux_gsg/sys_reqs.html

可選項:
針對2MB的大頁記憶體,在系統已經啟動之後仍然可以分配大頁記憶體。使用echo命令將你所需要的大頁寫入到大頁記憶體檔案中,該檔案在/sys/devices資料夾中。針對單CPU節點,可以使用如下的命令來加入大頁記憶體(以寫入1024頁為一個實驗)
echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages

針對一個NUMA機器,需要單獨為每個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的大頁記憶體分配,如果在系統啟動之後是不能通過命令的形式來動態的分配該大頁記憶體。

在IBM POWER的系統中,設定nr_overcommit_hugepages的值應該與nr_hugepages的值一樣。例如,如果需要將大頁的數設定為128,則需要使用如下的命令:
echo 128 > /sys/kernel/mm/hugepages/hugepages-16384kB/nr_hugepages
echo 128 > /sys/kernel/mm/hugepages/hugepages-16384kB/nr_overcommit_hugepages

在DPDK中使用大頁記憶體

一旦大頁記憶體被分配,要讓DPDK使用分配出來的大頁記憶體則需要執行以下命令:
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge

如果要是掛載點在重啟之後仍然可用則需要將掛載點寫入到fstab檔案中。
nodev /mnt/huge hugetlbfs defaults 0 0

針對1GB大頁,大頁的大小最好作為掛載點名寫入到配置檔案中。
nodev /mnt/huge_1GB hugetlbfs pagesize=1GB 0 0