溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

教你如何解決DPDK內(nèi)存大頁在NUMA架構(gòu)重分配問題

發(fā)布時(shí)間:2020-08-09 12:42:12 來源:ITPUB博客 閱讀:641 作者:安全劍客 欄目:建站服務(wù)器
在DPDK中往往是在內(nèi)核啟動(dòng)參數(shù)中設(shè)置要啟動(dòng)的大頁的總數(shù)量,比如設(shè)置大頁個(gè)數(shù)為16個(gè),每個(gè)大頁是1G,這樣系統(tǒng)啟動(dòng)后,就能在/sys/devices/system/node/node0/hugepages/hugepages-1048576KB/nr_hugepages上看到node0上分配的大頁,同樣可以查看到node1上的大頁。
一. 問題介紹

在DPDK中往往是在內(nèi)核啟動(dòng)參數(shù)中設(shè)置要啟動(dòng)的大頁的總數(shù)量,比如設(shè)置大頁個(gè)數(shù)為16個(gè),每個(gè)大頁是1G,這樣系統(tǒng)啟動(dòng)后,就能在/sys/devices/system/node/node0/hugepages/hugepages-1048576KB/nr_hugepages上看到node0上分配的大頁,同樣可以查看到node1上的大頁。默認(rèn)的情況是內(nèi)核會(huì)平均分配到 不同的socket上。在我的機(jī)器上,就是2個(gè)socket,這樣的話,每個(gè)node上會(huì)分到8個(gè)大頁。

然而,問題就來了。對于使用DPDK ring的primary進(jìn)程和secondary進(jìn)程而言,為了提高性能,在其中的線程綁core的時(shí)候,最好是在同一個(gè)socket上,假設(shè)我們綁定了socket 0上的多個(gè)core,這時(shí)候,無論是primary進(jìn)程還是secondary進(jìn)程分配內(nèi)存的時(shí)候都是優(yōu)先在socket 0上的node 0分配內(nèi)存,這就導(dǎo)致一個(gè)問題,node 1上的內(nèi)存基本就分配不到,也就是說,雖然留出了16G的大頁給DPDK的應(yīng)用使用,但實(shí)際上,只有不到一半的使用率。這就有點(diǎn)浪費(fèi)內(nèi)存咯。

急于上面的問題,我們期望能夠重新分配大頁在不同socket上的分配比例,比如,如果DPDK進(jìn)程都是在socket 0上,那么16G大頁可以分配12G給node 0,剩余的4G給node 1,充分利用內(nèi)存。

二. 重新配置方法

對于不同的系統(tǒng),配置的方法大同小異,對于2M的大頁而言,可以直接進(jìn)行配置,而對于1G的大頁,老些的版本則存在一些問題,如在使用 CentOS 6.3時(shí),動(dòng)態(tài)修改1G大頁的個(gè)數(shù)就不成功。

因此這里只說通用的做法,對于自己的系統(tǒng),可以再進(jìn)行細(xì)調(diào)。在內(nèi)核啟動(dòng)參數(shù)中配置大頁的大小和個(gè)數(shù),以Ubuntu為例:

default_hugepagesz=1G hugepagesz=1G hugepages=1設(shè)置到/etc/default/grub中的GRUB_CMDLINE_ LINUX中,然后運(yùn)行update-grub更新啟動(dòng)參數(shù)配置文件 /boot/grub/grub.cfg。之后重新啟動(dòng),cat /proc/meminfo就能看到系統(tǒng)中顯示大頁數(shù)量和剩余的數(shù)量(這個(gè)圖是配置的2M的頁)。

教你如何解決DPDK內(nèi)存大頁在NUMA架構(gòu)重分配問題

接下來就是如何解決提到的背景問題了:

在系統(tǒng)啟動(dòng)后,是可以再進(jìn)行調(diào)整大頁的數(shù)量的,配置的參數(shù)就在/sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages,這個(gè)是2M的配置,對于1G的頁,無非就是2048K變?yōu)槠渌?。注意這里的node0,如果還有其他socket,就可以調(diào)整對應(yīng)的socket上的大頁的數(shù)量。

也正是基于上面的可調(diào)整參數(shù),可以在系統(tǒng)啟動(dòng)后,先進(jìn)行大頁在不同socket上重新調(diào)整,然后再啟動(dòng)DPDK的應(yīng)用進(jìn)程。比如共設(shè)置16個(gè)大頁,其中node 0上分配12個(gè),node 1上分配4個(gè)。這里也會(huì)有另一個(gè)問題:就是如果調(diào)整后的大頁分配大于原來的總頁數(shù)會(huì)怎么樣?對于2M的應(yīng)該沒啥問題,對于1G的,恐怕是不行的,暫時(shí)沒實(shí)驗(yàn),需要注意。這樣調(diào)整后,把DPDK的應(yīng)用都綁定在node 0上對應(yīng)的core(因?yàn)槲覀兘o他分的大頁多),這樣的話,就能充分利用到我們分配的大頁了。

原文地址: https://www.linuxprobe.com/dpdk-numa.html

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI