DPDK (1) - PMD驱动方案
為了支持Userspace IO,DPDK可以選擇如下三種類型的驅(qū)動(dòng):
- uio_pci_generic
- uio + igb_uio
- vfio-pci
uio_pci_generic是內(nèi)核原生的一種uio驅(qū)動(dòng),該驅(qū)動(dòng)提供了uio功能,直接使用如下命令加載:
sudo modprobe uio_pci_generic這個(gè)原生驅(qū)動(dòng)是不支持VF設(shè)備創(chuàng)建的,因此DPDK也提供了另外一種uio驅(qū)動(dòng)igb_uio,它是可以用于宿主機(jī)上來創(chuàng)建VF設(shè)備的。適用性比內(nèi)核原生的uio_pci_generic更強(qiáng)一些,其中igb_uio.ko是由dpdk代碼庫編譯出來的:
sudo modprobe uio sudo insmod kmod/igb_uio.ko從DPDK release 1.7開始,DPDK對(duì)VFIO進(jìn)行了支持,因此VFIO Driver成了新的可選項(xiàng):
sudo modprobe vfio-pci當(dāng)DPDK使用vfio來實(shí)現(xiàn)網(wǎng)絡(luò)功能時(shí)可以直接加載該驅(qū)動(dòng)。
特別注意:
對(duì)于使用VFIO驅(qū)動(dòng)來使用DPDK的場(chǎng)景,必須保證:
1.硬件上支持支持VT-x、VT-d,BIOS中需要打開相關(guān)特性
2.對(duì)于物理機(jī)的內(nèi)核中需要支持IOMMU特性(在啟動(dòng)參數(shù)添加 iommu=pt, intel_iommu=on)
物理機(jī)上使用DPDK
在物理機(jī)上使用DPDK,需要內(nèi)核中加載DPDK PMD Driver,那么需要使用如下命令加載DPDK的驅(qū)動(dòng):
modprobe uio insmod igb_uio usertools/dpdk-devbind.py --bind=igb_uio bb:ss.f當(dāng)然這里我們也可以使用上面介紹過的其他類型的內(nèi)核模塊:uio_pci_generic 或者 vfio-pci 。
虛擬機(jī)中使用DPDK
對(duì)于支持SR-IOV的網(wǎng)卡來說,比如Intel的X710/XL710網(wǎng)卡,在虛擬化的環(huán)境中使用,網(wǎng)卡可以進(jìn)行透?jìng)?#xff0c;本文以透?jìng)鞯姆绞絹磉M(jìn)行實(shí)踐介紹,對(duì)于支持SR-IOV的網(wǎng)卡來說,它分為PF和VF模塊,在宿主機(jī)中需要加載對(duì)應(yīng)的PF Driver和VF Driver來驅(qū)動(dòng)這兩個(gè)子模塊。
宿主機(jī)
在宿主機(jī)上可以直接使用Linux kernel官方的intel PF驅(qū)動(dòng),比如i40e,也可以使用DPDK專用的 PMD PF驅(qū)動(dòng)。如果使用了DPDK PMD PF 驅(qū)動(dòng),那么這個(gè)宿主機(jī)網(wǎng)絡(luò)的管理權(quán)就完全交給DPDK了。
- 方案一:i40e驅(qū)動(dòng)
通過重新加載intel提供的i40e驅(qū)動(dòng),并指定max_vfs參數(shù)來創(chuàng)建VF功能,對(duì)于該網(wǎng)卡的VF功能內(nèi)核默認(rèn)使用的驅(qū)動(dòng)為i40evf,因此在使用dpdk之前,還需要在Host上將VF與i40evf驅(qū)動(dòng)解綁,重新綁定到vfio-pci驅(qū)動(dòng)上:
modprobe vfio-pci宿主機(jī)中需要使用vfio_pci這個(gè)內(nèi)核模塊來對(duì)需要分配給客戶機(jī)的設(shè)備進(jìn)行隱藏, 從而讓宿主機(jī)和未被分配該設(shè)備的客戶機(jī)都無法使用該設(shè)備, 達(dá)到隔離和安全使用的目的。而在客戶機(jī)不需要使用該設(shè)備后, 讓宿主機(jī)使用該設(shè)備, 則需要將其恢復(fù)到使用原本的驅(qū)動(dòng)。
這里也可以利用DPDK提供的腳本dpdk_bind_nic.py來設(shè)置:
usertools/dpdk-devbind.py --bind=vfio-pci bb:ss.f此時(shí)該VF已經(jīng)由vfio驅(qū)動(dòng)接管,對(duì)于上一章介紹的,如果在宿主機(jī)上使用VFIO DPDK,那么此時(shí)就已經(jīng)滿足了條件,但是我們此處是為了演示虛擬機(jī)中使用DPDK,所以此時(shí)不能啟動(dòng)DPDK去使用該VF,而需要在虛擬機(jī)中透?jìng)髟撛O(shè)備來使用。
- 方案二:DPDK PMD PF驅(qū)動(dòng)
需要內(nèi)核啟動(dòng)參數(shù)中使能iommu=pt, intel_iommu=on,然后啟動(dòng)后加載DPDK驅(qū)動(dòng):
modprobe uio insmod kmod/igb_uio.ko usertools/dpdk-devbind.py --bind=igb_uio bb:ss.f echo 2 > /sys/bus/pci/devices/0000\:bb\:ss.f/max_vfs (To enable two VFs on a specific PCI device)虛擬機(jī)
對(duì)于虛擬機(jī)來說,透?jìng)鬟^來的VFIO網(wǎng)卡對(duì)于虛擬機(jī)來說就相當(dāng)于是一個(gè)常規(guī)的物理網(wǎng)卡,默認(rèn)就會(huì)使用該物理網(wǎng)卡對(duì)應(yīng)的驅(qū)動(dòng),比如i40e driver,那么如果要在虛擬機(jī)中使用DPDK,就需要把虛擬網(wǎng)卡重新綁定到igb_uio驅(qū)動(dòng),這樣就可以在虛擬機(jī)中使用DPDK了。實(shí)際上操作還是與宿主機(jī)中一樣:
modprobe uio insmod kmod/igb_uio.ko usertools/dpdk-devbind.py --bind=igb_uio bb:ss.f總結(jié)
以上是生活随笔為你收集整理的DPDK (1) - PMD驱动方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银行卡号自动识别,包括银行名称、英文缩写
- 下一篇: 电脑重启桌面 计算机图标消失,电脑重启桌