DPDK使用入門(補(bǔ)充)

DPDK安裝

從官網(wǎng)下載DPDK安裝包,常用的版本是:dpdk-16.07

1.解壓:

tar?zxvf?dpdk-16.07.tar.gz

cd?? dpdk-16.07

2.設(shè)置環(huán)境變量:

export RTE_SDK=$(pwd)????????? #DPDK主目錄

exportRTE_TARGET=x86_64-native-linuxapp-gcc

3.使用pcap庫:

make config T=x86_64-native-linuxapp-gcc

sed -ri 's,(PMD_PCAP=).*,\1y,' build/.config

4.編譯:

make?? 等等編譯完成

5.掛載巨頁:

mkdir -p /mnt/huge

mount -t hugetlbfs nodev /mnt/huge

echo 2048 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages


6.加載IGB模塊和綁定網(wǎng)卡:(建議使用dpdk-setup.sh腳本)

cd?$(RTE_SDK)/tools/

./dpdk-setup.sh

運(yùn)行如下圖所示:

dpdk-setup.sh

根據(jù)腳本步驟提示丁存,完成編譯哪個(gè)DPDK,加載哪種驅(qū)動(dòng)腔剂,綁定網(wǎng)卡等一系列動(dòng)作。

6.1.選擇[16]x86_64-native-linuxapp-gcc驼仪,等待編譯完成

x86_64:系統(tǒng)架構(gòu)

native:平臺(tái)自適應(yīng)

linuxapp:linux的應(yīng)用程序

gcc:使用GCC編譯器

6.2 選擇[19] Insert IGB UIO

module 掸犬,加載驅(qū)動(dòng),常用的是IGB驅(qū)動(dòng)

選擇[25] Bind Ethernet device to IGB UIO module绪爸,綁定網(wǎng)卡到IGB驅(qū)動(dòng)湾碎,輸入網(wǎng)卡的PCI地址,中間用空格隔開奠货。

選擇[24] Display current Ethernet device settings 介褥,查看當(dāng)前網(wǎng)卡設(shè)置

如下圖:

顯示網(wǎng)卡設(shè)置

圖中可以看出,DPDK使用的網(wǎng)卡有4塊I350递惋。

6.3選擇 [30] List hugepage info from /proc/meminfo 柔滔,可顯示當(dāng)前巨頁信息,也可以通過

[22] Setup hugepage mappings for non-NUMAsystems?? 或者

[23] Setup hugepage mappings for NUMAsystems

為系統(tǒng)設(shè)置巨頁萍虽,但不建議在這里設(shè)置睛廊,請(qǐng)查看第5點(diǎn)或系統(tǒng)配置里的描述。

退出dpdk_setup.sh:輸入36.? [36]Exit Script

注1:查看系統(tǒng)是否為NUMA架構(gòu):執(zhí)行$(RTE_SDK)/tools/cpu_layout.py 杉编,如果有2個(gè)Socket信息超全,為NUMA架構(gòu),只有1個(gè)Socket信息邓馒,則為non-NUMA架構(gòu)嘶朱。

注2:一般PCI ID 小于0000:08:00.x的網(wǎng)卡在Socket0,大于或等于0000:08:00.x的在Socket1.

7.執(zhí)行完以上6步光酣,DPDK環(huán)境已經(jīng)初始化好了疏遏,可以正常地跑DPDK的程序了,但系統(tǒng)的配置沒有達(dá)到最優(yōu)救军。

系統(tǒng)配置

1. BIOS設(shè)置,將BIOS中的性能參數(shù)設(shè)置到最優(yōu)改览,關(guān)閉任何省電配置和虛擬化選項(xiàng),比如:

CPU Power and Performance Policy

CPU C-state Disabled

CPU P-state Disabled

Enhanced Intel? Speedstep? Tech Disabled

Turbo Boost Disabled

等等

2.Boot設(shè)置缤言,要保證DPDK綁定的核心不被系統(tǒng)調(diào)度,因此需要將核心從內(nèi)核調(diào)度中隔離视事。

修改/etc/default/grub文件胆萧,在GRUB_CMDLINE_LINUX行中加入isolcpus=2,3,4,5,6 transparent_hugepage=never

執(zhí)行:grub2-mkconfig -o /boot/grub2/grub.cfg

(將修改后的配置刷新新/boot中配置去,此步驟操作完,則系統(tǒng)的啟動(dòng)參數(shù)真正的被修改了)

查看CPU性能是否為最優(yōu),執(zhí)行:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

3./etc/default/grub,加入isolcpus時(shí)需要注意跌穗,加入的邏輯核心需要在同一個(gè)Socket上订晌,non-NUMA架構(gòu)只有一個(gè)Socket,只需要將要隔離的核心加上即可蚌吸,在NUMA架構(gòu)上就先要知道Socket1和Socket2上的核心有哪些锈拨?

執(zhí)行$(RTE_SDK)/tools/cpu_layout.py可查看核心屬性哪個(gè)Socket。把與網(wǎng)卡在同一Socket上的core添加到isolcpus中羹唠,目前用的i350,是綁定在Socket0中

4.設(shè)置巨頁,系統(tǒng)默認(rèn)是2M奕枢,如下圖:

2M巨頁

如果要修改為1G巨頁,參考下圖佩微,修改GRUB_CMDLINE_LINUX為:

1G巨頁

把default_hugepagesz設(shè)為1G缝彬,hugepagesz設(shè)為1G,hugepages設(shè)為8哺眯,表示設(shè)置8塊1G的巨頁谷浅,然后執(zhí)行:grub2-mkconfig -o /boot/grub2/grub.cfg? 執(zhí)行之后重啟服務(wù)器。

5.查看配置信息常用命令

查看系統(tǒng)巨頁:cat /proc/meminfo| grep -i huge

查看綁定的網(wǎng)卡:./$(RTE_SDK)/tools/dpdk-devbind.py-s

查看網(wǎng)卡PCI信息:lspci | grep -i eth

查看lcore在哪個(gè)Socket上:./$(RTE_SDK)/cpu_layout.py

查看掛載點(diǎn)信息:cat /proc/mounts?? 或者mount

查看CPU型號(hào):cat /proc/cpuinfo | grep -i 'model name'

查看內(nèi)存頻率:dmidecode -t memory | grep Speed

功能點(diǎn)測(cè)試

Testpmd測(cè)試:

在初始化完DPDK環(huán)境后奶卓,我們通常需要測(cè)試環(huán)境是否正常一疯,我們使用的測(cè)試程序是用dpdk_setup.sh腳本,因?yàn)榉奖愣峁谩?dòng)腳本之后墩邀,選擇

[29] Run testpmdapplication in interactive mode ($RTE_TARGET/app/testpmd)

然后輸入掩碼位,如果綁定了4個(gè)網(wǎng)口,輸入:0xf0即可瑟幕。

由于testpmd的命令很多磕蒲,無法一一說明,這里只驗(yàn)證環(huán)境是否正常只盹。

1.輸入 辣往? 可查看所有的命令。

2.往端口上發(fā)送數(shù)據(jù)殖卑,查看是否有收到數(shù)據(jù)站削,查看命令:show port stats all

如果收有數(shù)據(jù),則環(huán)境正常

3.退出:quit

4.退出腳本:輸入36.? [36]Exit Script

Test測(cè)試:

這個(gè)測(cè)試是各個(gè)庫模塊的獨(dú)立測(cè)試

編譯:

cd $(RTE_SDK)

make –C app/test

執(zhí)行:./app/test/test –c 0xf0 –n 4

輸入 孵稽? 查看所有的測(cè)試單元

輸入version_autotest

RTE>>version_autotest

Version string: 'DPDK 16.07.0'

Test OK

RTE>>

這里面有很多測(cè)試许起,常用的有核心的測(cè)試:per_lcore_autotest

內(nèi)存的測(cè)試:memory_autotest 隊(duì)列性能測(cè)試:ring_perf_autotest 等等

可以測(cè)試隊(duì)列大小對(duì)性能的影響,可以測(cè)試使用不同的隊(duì)列接口函數(shù)對(duì)性能的影響菩鲜,也可以測(cè)試burst_size 或bulk_size大小不同园细,對(duì)性能的影響,因?yàn)槲覀兊某绦蚺c這里的測(cè)試環(huán)境是一樣的接校,這里的測(cè)試結(jié)果對(duì)修改一些程序參數(shù)可以起到參考作用猛频。

RTE>>quit

注:test程序也可以通過 dpdk_setup.sh啟動(dòng)狮崩,選擇

[28] Run test application($RTE_TARGET/app/test)

問題解決

1. 編譯DPDK程序的時(shí)候,出現(xiàn):

make: ***/lib/modules/3.10.0-123.el7.x86_64/build: No such file or directory.

解決:

cd/lib/modules/3.10.0-123.el7.x86_64/

ln -s/usr/src/kernels/3.10.0-327.36.3.el7.x86_64/?build

1.1.如果在解決問題1的時(shí)候出現(xiàn)鹿寻,發(fā)現(xiàn)/usr/src/kernels/? 中沒有3.10.0-327.36.3.el7.x86_64

解決:

rpm -ivhkernel-devel-3.10.0-123.el7.x86_64.rpm?????????? #要先下載對(duì)應(yīng)的rpm包:

https://buildlogs.centos.org/c7-updates/kernel/3.10.0-123.el7/20140630120647/

2.執(zhí)行腳本./dpdk_devbind.py –s 出現(xiàn)下面的問題:

Traceback (most recent call last):

? File "./dpdk_nic_bind.py", line539, in

??? main()

? File "./dpdk_nic_bind.py", line535, in main

??? get_nic_details()

? File "./dpdk_nic_bind.py", line228, in get_nic_details

??? dev_lines =check_output(["lspci", "-Dvmmn"]).splitlines()

? File "./dpdk_nic_bind.py", line120, in check_output

??? stderr=stderr).communicate()[0]

? File"/usr/lib64/python2.7/subprocess.py", line 711, in __init__

??? errread, errwrite)

? File"/usr/lib64/python2.7/subprocess.py", line 1308, in _execute_child

??? raise child_exception

OSError: [Errno2] No such file or directory


這是由于沒有安裝 lspci的原因睦柴。

解決:yum installpciutils -y


3.執(zhí)行skeleton出現(xiàn)下面現(xiàn)象:

...

EAL: Error reading from file descriptor 13:Input/output error

EAL: Error reading from file descriptor 15:Input/output error

...

修改代碼行

lib/librte_eal/linuxapp/igb_uio/igb_uio.c

把pci_intx_mask_supported(dev) 修改為pci_intx_mask_supported(dev)||true

重新編譯dpdk.

用dpdk-setup.sh 執(zhí)行以下操作

remod igb_uio

insmod

igb_uio


DPDK的基礎(chǔ)就介紹到這里,下次再統(tǒng)一介紹 l2fwd,l3fwd,test-pipeline等模型毡熏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末坦敌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子痢法,更是在濱河造成了極大的恐慌狱窘,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疯暑,死亡現(xiàn)場(chǎng)離奇詭異训柴,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)妇拯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門幻馁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人越锈,你說我怎么就攤上這事仗嗦。” “怎么了甘凭?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵稀拐,是天一觀的道長。 經(jīng)常有香客問我丹弱,道長德撬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任躲胳,我火速辦了婚禮蜓洪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坯苹。我一直安慰自己隆檀,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布粹湃。 她就那樣靜靜地躺著恐仑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪为鳄。 梳的紋絲不亂的頭發(fā)上裳仆,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音孤钦,去河邊找鬼鉴逞。 笑死记某,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的构捡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼壳猜,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼勾徽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起统扳,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤喘帚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后咒钟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吹由,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年朱嘴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了倾鲫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萍嬉,死狀恐怖乌昔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壤追,我是刑警寧澤磕道,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站行冰,受9級(jí)特大地震影響溺蕉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悼做,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一疯特、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贿堰,春花似錦辙芍、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纵搁,卻和暖如春吃衅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背腾誉。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國打工徘层, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留峻呕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓趣效,卻偏偏與公主長得像瘦癌,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子跷敬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容