01. usertools工具分析之dpdk-devbind

命令格式

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)綁回去。

代碼分析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容