[dpdk-dev] Interface once added to DPDK goes missing from ifconfig

Keunhong Lee dlrmsghd at gmail.com
Mon Jun 29 03:30:46 CEST 2015


To fully utilize DPDK's performance, it is recommended to use native
userspace drivers.
Because userspace drivers do not interact with your kernel,
it is trivial not having 'interfaces' for your kernel.

YES you are bypassing whole kernel, if you are using userspace drivers.
You may need KNI when:
1. If you want to work legacy applications alongside DPDK applications.
2. If you do not have native userspaces drivers but kernel drivers.
KNI is similar with AF_PACKET interface, but it uses ioctl instead of
system calls.
(I'm not familiar with KNI, so please tell me if I'm wrong.)

*Userspace driver: Bypass whole kernel*
*KNI driver: Bypass kernel network stack, but go through kernel driver*

Keunhong.


2015-06-29 9:55 GMT+09:00 Abhishek Verma <abhishekv.verma at gmail.com>:

> Hi Keunhong,
>
> Thanks for the response.
>
> I was reading about KNI (
> http://dpdk.org/doc/guides/sample_app_ug/kernel_nic_interface.html), and
> that seems to defeat the purpose of DPDK -- the whole point of using DPDK
> was to bypass the kernel. Now, when i implement KNI, then packets emanating
> from the DPDK get into the Linux kernel -- which is what i really wanted to
> avoid.
>
> Now that i have tied my eth2 to use a dpdk driver, then does it mean that
> any packet arriving on that NIC will directly come to my user space
> callback? Its like a raw socket -- so i will get all incoming packets with
> all payloads, and i will have to implement the IP stack in my user space
> now so that i can deal with that packet. Is my understanding correct here?
>
> If Yes, then what is the need of KNI? Isnt that violating the whole reason
> why we have DPDK?
>
> Thanks, Abhishek
>
> On Mon, Jun 29, 2015 at 5:46 AM, Keunhong Lee <dlrmsghd at gmail.com> wrote:
>
>> DPDK's igb_uio driver does not generate 'netdev' interfaces,
>> so you cannot see any interface via ifconfig.
>> (However, they are registered as 'rte_eth_dev' in your DPDK application.)
>>
>> You'd better to use KNI drivers to have 'netdev' intefaces.
>>
>> Keunhong.
>>
>>
>> 2015-06-29 8:51 GMT+09:00 Abhishek Verma <abhishekv.verma at gmail.com>:
>>
>>> Hi,
>>>
>>> I have three ethernet interfaces in my VirtualBox as shown below:
>>>
>>> root at VirtualBox:/home/akabra/dpdk/dpdk-2.0.0/tools# ifconfig
>>> eth1      Link encap:Ethernet  HWaddr 08:00:27:3f:34:56
>>>       inet addr:192.168.0.123  Bcast:192.168.0.255  Mask:255.255.255.0
>>>       inet6 addr: fe80::a00:27ff:fe3f:3456/64 Scope:Link
>>>       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>>>       RX packets:132 errors:0 dropped:0 overruns:0 frame:0
>>>       TX packets:26 errors:0 dropped:0 overruns:0 carrier:0
>>>       collisions:0 txqueuelen:1000
>>>       RX bytes:20982 (20.9 KB)  TX bytes:3724 (3.7 KB)
>>>
>>> eth2      Link encap:Ethernet  HWaddr 08:00:27:f7:13:f5
>>>       inet addr:1.1.1.1  Bcast:1.1.1.255  Mask:255.255.255.0
>>>       inet6 addr: fe80::a00:27ff:fef7:13f5/64 Scope:Link
>>>       UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>>>       RX packets:51932 errors:0 dropped:0 overruns:0 frame:0
>>>       TX packets:660805 errors:0 dropped:0 overruns:0 carrier:0
>>>       collisions:0 txqueuelen:1000
>>>       RX bytes:32407739 (32.4 MB)  TX bytes:1647410289 (1.6 GB)
>>>
>>> lo        Link encap:Local Loopback
>>>       inet addr:127.0.0.1  Mask:255.0.0.0
>>>       inet6 addr: ::1/128 Scope:Host
>>>       UP LOOPBACK RUNNING  MTU:65536  Metric:1
>>>       RX packets:1681 errors:0 dropped:0 overruns:0 frame:0
>>>       TX packets:1681 errors:0 dropped:0 overruns:0 carrier:0
>>>       collisions:0 txqueuelen:0
>>>       RX bytes:358901 (358.9 KB)  TX bytes:358901 (358.9 KB)
>>>
>>> root at manav-VirtualBox:/home/globus/dpdk/dpdk-2.0.0/tools#
>>> ./dpdk_nic_bind.py --status
>>>
>>>
>>>
>>> Network devices using DPDK-compatible driver
>>>
>>> ============================================
>>>
>>> <none>
>>>
>>> Network devices using kernel driver
>>>
>>> ===================================
>>>
>>> 0000:00:03.0 '82540EM Gigabit Ethernet Controller' if=eth1 drv=e1000
>>> unused=igb_uio,vfio-pci *Active*
>>>
>>> 0000:00:08.0 '82540EM Gigabit Ethernet Controller' if=eth2 drv=e1000
>>> unused=igb_uio,vfio-pci *Active*
>>>
>>>
>>> I will now add eth2 to DPDK
>>>
>>> root at manav-VirtualBox:/home/globus/dpdk/dpdk-2.0.0/tools# sudo ifconfig
>>> eth2 down
>>>
>>> root at manav-VirtualBox:/home/globus/dpdk/dpdk-2.0.0/tools#
>>> ./dpdk_nic_bind.py -b igb_uio 0000:00:08.0
>>>
>>>
>>> I now see that eth2 has been removed from my ifconfig output. I cant seem
>>> to understand why this has happened?
>>>
>>>
>>> root at manav-VirtualBox:/home/globus/dpdk/dpdk-2.0.0/tools# ifconfig
>>>
>>> eth1      Link encap:Ethernet  HWaddr 08:00:27:3f:34:56
>>>
>>>           inet addr:192.168.0.123  Bcast:192.168.0.255
>>> Mask:255.255.255.0
>>>
>>>           inet6 addr: fe80::a00:27ff:fe3f:3456/64 Scope:Link
>>>
>>>           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>>>
>>>           RX packets:182 errors:0 dropped:0 overruns:0 frame:0
>>>
>>>           TX packets:86 errors:0 dropped:0 overruns:0 carrier:0
>>>
>>>           collisions:0 txqueuelen:1000
>>>
>>>           RX bytes:27757 (27.7 KB)  TX bytes:12789 (12.7 KB)
>>>
>>>
>>>
>>> lo        Link encap:Local Loopback
>>>
>>>           inet addr:127.0.0.1  Mask:255.0.0.0
>>>
>>>           inet6 addr: ::1/128 Scope:Host
>>>
>>>           UP LOOPBACK RUNNING  MTU:65536  Metric:1
>>>
>>>           RX packets:1705 errors:0 dropped:0 overruns:0 frame:0
>>>
>>>           TX packets:1705 errors:0 dropped:0 overruns:0 carrier:0
>>>
>>>           collisions:0 txqueuelen:0
>>>
>>>           RX bytes:360948 (360.9 KB)  TX bytes:360948 (360.9 KB)
>>>
>>>
>>> I see that it has been successfully recognized as an interface using DPDK
>>> driver, but why dont i see it in my ifconfig. Any ideas here?
>>>
>>>
>>> root at manav-VirtualBox:/home/globus/dpdk/dpdk-2.0.0/tools#
>>> ./dpdk_nic_bind.py --status
>>>
>>>
>>>
>>> Network devices using DPDK-compatible driver
>>>
>>> ============================================
>>>
>>> 0000:00:08.0 '82540EM Gigabit Ethernet Controller' drv=igb_uio
>>> unused=vfio-pci
>>>
>>>
>>>
>>> Network devices using kernel driver
>>>
>>> ===================================
>>>
>>> 0000:00:03.0 '82540EM Gigabit Ethernet Controller' if=eth1 drv=e1000
>>> unused=igb_uio,vfio-pci *Active*
>>>
>>>
>>>
>>> Other network devices
>>>
>>>
>>> Would appreciate some help here.
>>>
>>>
>>> Thanks, Abhishek
>>>
>>
>>
>


More information about the dev mailing list