命令格式
dpdk-devbind.py是一個工具,命令使用格式如下:
dpdk-devbind.py [options] DEVICE1 DEVICE2 ....
其中,
- DEVICE1、DEVICE2等表示使用PCI號(可以是domain:bus:slot.func或者bus:slot.func格式)來標(biāo)識的設(shè)備;對于綁定到Linux內(nèi)核驅(qū)動的設(shè)備,也可以使用Linux接口的名字來標(biāo)識該設(shè)備,例如eth0、eth1等等。
- options為可選參數(shù),可以取值:
- --help, --usage:顯示提示信息
- -s, --status:打印當(dāng)前已知的network、crypto、event、mempool設(shè)備的狀態(tài)。
- --status-dev dev_grp:打印給定設(shè)備組的狀態(tài),支持的組有:net、crypto、event、mempool、compress。
- -b drvier, --bind=driver:選擇將設(shè)備綁定到該驅(qū)動,設(shè)為none時表示解綁。
- -u, --unbind:解綁設(shè)備,等價于 -b none。
- --force:允許將active的設(shè)備進(jìn)行強(qiáng)制解綁。
舉例
查詢設(shè)備信息
# ./usertools/dpdk-devbind.py --status
Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=virtio_pci,igb_uio *Active*
0000:00:07.0 'Virtio network device 1000' if=eth1 drv=virtio-pci unused=virtio_pci,igb_uio *Active*
No 'Crypto' devices detected
============================
No 'Eventdev' devices detected
==============================
No 'Mempool' devices detected
=============================
No 'Compress' devices detected
==============================
從輸出的信息來看我的主機(jī)上有兩個網(wǎng)絡(luò)設(shè)備,目前使用的都是內(nèi)核驅(qū)動virtio-pci,都是Active狀態(tài),未使用的驅(qū)動是的igb_uio,這是dpdk的一款驅(qū)動,下面我們就要把其中一個設(shè)備綁定到該驅(qū)動上。
注:其他的crypto、eventdev等設(shè)備我的主機(jī)上找不到,下面的例子將省略這些設(shè)備信息的顯示,使用命令
./usertools/dpdk-devbind.py --status-dev net來顯示網(wǎng)絡(luò)設(shè)備的信息。
綁定設(shè)備
# ./usertools/dpdk-devbind.py --bind=igb_uio 0000:00:07.0
Routing table indicates that interface 0000:00:07.0 is active. Not modifying
# ./usertools/dpdk-devbind.py --force --bind=igb_uio 0000:00:07.0
# ./usertools/dpdk-devbind.py --status-dev net
Network devices using DPDK-compatible driver
============================================
0000:00:07.0 'Virtio network device 1000' drv=igb_uio unused=virtio_pci
Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=virtio_pci,igb_uio *Active*
第一條我使用命令將PCI為0000:00:07.0的設(shè)備綁定到igb_uio的dpdk驅(qū)動上,顯示該設(shè)備是active,不允許修改;第二條命令加了一個--force之后成功綁定;第三條命令顯示當(dāng)前設(shè)備的狀態(tài),可以看到有一個DPDK兼容的驅(qū)動設(shè)備,還有一個內(nèi)核驅(qū)動的設(shè)備。
注:綁定時一定要避免正在使用ssh登陸的網(wǎng)卡,否則綁定之后網(wǎng)絡(luò)將會中斷,只能重啟主機(jī)來恢復(fù)環(huán)境了。
解綁設(shè)備
# ./usertools/dpdk-devbind.py -u 0000:00:07.0
# ./usertools/dpdk-devbind.py --status-dev net
Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=virtio_pci,igb_uio *Active*
Other Network devices
=====================
0000:00:07.0 'Virtio network device 1000' unused=virtio_pci,igb_uio
# ./usertools/dpdk-devbind.py --bind=virtio-pci 0000:00:07.0
# ./usertools/dpdk-devbind.py --status-dev net
Network devices using kernel driver
===================================
0000:00:03.0 'Virtio network device 1000' if=eth0 drv=virtio-pci unused=virtio_pci,igb_uio *Active*
0000:00:07.0 'Virtio network device 1000' if=eth1 drv=virtio-pci unused=virtio_pci,igb_uio
第一條命令將igb_uio驅(qū)動的設(shè)備進(jìn)行解綁,第二條命令查看狀態(tài)可以看到該設(shè)備當(dāng)前沒有綁定到任何驅(qū)動上,第三條命令將該設(shè)備綁回virtio-pci的內(nèi)核驅(qū)動,第四條命令可以看到已經(jīng)綁回去。