A. はじめに
DPDK18 SDKではDPDKドライバもmakeしていたが、DPDK20ではLinux標準のドライバを使うのが標準みたい。DPDK18でmakeされるドライバ(igb_uio)は動作が安定していたが、Linux標準ドライバはどうなのかちょっと不安なところ。
igb_uioはカーネルが更新される度にmakeし直すが必要があったが、Linux標準のドライバではその手間がなくなるというメリットがある。
いろいろなドライバ名が出てくるので最初に整理しておくと。
ドライバ名 | DPDK対応 | Linux標準 | 備考 |
---|---|---|---|
e1000e | NO | YES | インテル1G NIC |
ixgbe | NO | YES | インテル10G NIC |
igb_uio | YES | NO | SDKでmake |
uio_pci_generic | YES | YES | |
vfio-pci | YES | YES | IOMMU対応 |
「ドライバ付け外し」コマンド dpdk-devbind を使ってみる
dpdk-devbindコマンドはよく使うので、以下のようにaliasでdbと短くして使っている。
alias db='/usr/local/bin/dpdk-devbind.py'
DPDKドライバ未登録状態で、dbコマンドを使ってみると以下のようになる。
# db -s
Network devices using kernel driver
===================================
0000:00:1f.6 'Ethernet Connection (2) I219-V 15b8' if=eno1 drv=e1000e unused= *Active*
0000:01:00.0 'Ethernet Controller 10G X550T 1563' if=enp1s0f0 drv=ixgbe unused=
0000:01:00.1 'Ethernet Controller 10G X550T 1563' if=enp1s0f1 drv=ixgbe unused=
(後略)
3つのNICポートにカーネル標準のドライバ(e1000eとixgbe)が割り当てられているのが分かる。ここでDPDK対応ドライバを登録して、再度同じコマンドを入れると、
# modprobe uio
# modprobe uio_pci_generic
# modprobe vfio-pci
# db -s
Network devices using kernel driver
===================================
0000:00:1f.6 'Ethernet Connection (2) I219-V 15b8' if=eno1 drv=e1000e unused=vfio-pci,uio_pci_generic *Active*
0000:01:00.0 'Ethernet Controller 10G X550T 1563' if=enp1s0f0 drv=ixgbe unused=vfio-pci,uio_pci_generic
0000:01:00.1 'Ethernet Controller 10G X550T 1563' if=enp1s0f1 drv=ixgbe unused=vfio-pci,uio_pci_generic
(後略)
3つのNICポートに「DKDK対応ドライバ」(vfio-pciとuio_pci_generic)が適用可能なことが表示されるようになった。注:まだ適用されてない。 X550Tの2つのNICポートをカーネル標準ドライバ(ixgbe)からDPDK対応用(uio_pci_generic)に付け替えてみる。
`
db -b uio_pci_generic 0000:01:00.0
db -b uio_pci_generic 0000:01:00.1
db -s
Network devices using DPDK-compatible driver
0000:01:00.0 'Ethernet Controller 10G X550T 1563' drv=uio_pci_generic unused=ixgbe,vfio-pci 0000:01:00.1 'Ethernet Controller 10G X550T 1563' drv=uio_pci_generic unused=ixgbe,vfio-pci
Network devices using kernel driver
0000:00:1f.6 'Ethernet Connection (2) I219-V 15b8' if=eno1 drv=e1000e unused=vfio-pci,uio_pci_generic Active (後略) ` nmcliコマンドで確認すると、以下のようにX550Tの2つのNICポートがカーネルから見えなくなっている。
`
nmcli d
DEVICE TYPE STATE CONNECTION eno1 ethernet connected Wired connection 3 lo loopback unmanaged -- ` X550Tの2つのNICポートをDPDK対応用(uio_pci_generic)からカーネル標準ドライバ(ixgbe)に戻してみる。
`
db -b ixgbe 0000:01:00.0
db -b ixgbe 0000:01:00.1
nmcli d
DEVICE TYPE STATE CONNECTION eno1 ethernet connected Wired connection 3 enp1s0f0 ethernet disconnected -- enp1s0f1 ethernet unavailable -- lo loopback unmanaged --
db -s
Network devices using kernel driver
0000:00:1f.6 'Ethernet Connection (2) I219-V 15b8' if=eno1 drv=e1000e unused=vfio-pci,uio_pci_generic Active 0000:01:00.0 'Ethernet Controller 10G X550T 1563' if=enp1s0f0 drv=ixgbe unused=vfio-pci,uio_pci_generic 0000:01:00.1 'Ethernet Controller 10G X550T 1563' if=enp1s0f1 drv=ixgbe unused=vfio-pci,uio_pci_generic (後略) ` もとに戻った。
次回予告
次回はSR-IOVの設定をしてみたい。