On 11/2/21 4:14 PM, fwefew 4t4tg wrote:
I'm trying to use DPDK on AWS i3.metal instances. I have the code built
with AWS vfio-patches. In order to be logged into the machine on one NIC
while having a free ENA NIC for DPDK, I attached a second NIC.
./dpdk-devbind.py is able to ZjQcmQRYFpfptBannerStart
This Message Is From an External Sender
This message came from outside your organization.
ZjQcmQRYFpfptBannerEnd
I'm trying to use DPDK on AWS i3.metal instances. I have the code built
with AWS vfio-patches. In order to be logged into the machine on one NIC
while having a free ENA NIC for DPDK, I attached a second NIC.
./dpdk-devbind.py is able to see the second NIC, and bind to it. *All
that's working fine. However, by default this 2nd NIC does not have an
IP address.*
Meanwhile code needs a hostname or IP address of the client and server.
How do I get an IP address associated with this 2nd NIC?
I don't think you understand the intent behind the DPDK framework.
You're passing control of the NIC to a user application. That means you
don't receive any benefits of the kernel's networking stack. The user
application you use will need to handle all network services, including
it's own TCP/IP stack if required.
If you're using the bundled DPDK testpmd application then there's no
need to assign an IP address to the interface. The testpmd app can
build and send/receive ANY type of network packet, though it's mostly
only used to verify functionality provided by the DPDK framework. If
you're WRITING a network application then DPDK might be what you want,
but if you have a specific network function in mind then you're likely
looking for an application that USES DPDK.
And do I need
to do some sys-admin work to ensure traffic in and out of the DPDK bound
vfio-pci NIC is kept separate from the first NIC?
As far as I can see the correct approach is to:
# setup second NIC to have an IP address and make sure UP before
dpdk-devbind:
* sudo ip addr add <some-valid-ipv4-addr> dev ens1 label ens1:1
* sudo ip lin set ens1 u[
before I do DPDK bind.
The NIC, when AWS adds it, starts off down without an IP address by default:
ubuntu$ lspci | grep Ether
04:00.0 Ethernet controller: Amazon.com, Inc. Elastic Network Adapter (ENA)
05:00.0 Ethernet controller: Amazon.com, Inc. Elastic Network Adapter (ENA)
ubuntu$ sudo ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 <http://127.0.0.1/8> scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens785: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP
group default qlen 1000
link/ether 0a:0f:1f:db:ca:73 brd ff:ff:ff:ff:ff:ff
inet 172.31.17.144/20 <http://172.31.17.144/20> brd 172.31.31.255
scope global dynamic ens785
valid_lft 3544sec preferred_lft 3544sec
inet6 fe80::80f:1fff:fedb:ca73/64 scope link
valid_lft forever preferred_lft forever
*3: ens1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group
default qlen 1000
link/ether 0a:06:15:14:95:05 brd ff:ff:ff:ff:ff:ff
*
Once I bind 'ens1' dpdk-devbind reports it as bound -AND- it no longer
appears in `ip a`:
This is expected. You've removed the NIC from the kernel's control and
bound it to the vfio_pci driver, which allows the NIC to be controlled
entirely by a user application.
Network devices using DPDK-compatible driver
============================================
0000:05:00.0 'Elastic Network Adapter (ENA) ec20' drv=vfio-pci unused=ena
Network devices using kernel driver
===================================
0000:04:00.0 'Elastic Network Adapter (ENA) ec20' if=ens785 drv=ena
unused=vfio-pci *Active*
$ ip a
ubuntu@ip-172-31-17-144:~/Scripts$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 <http://127.0.0.1/8> scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens785: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP
group default qlen 1000
link/ether 0a:0f:1f:db:ca:73 brd ff:ff:ff:ff:ff:ff
inet 172.31.17.144/20 <http://172.31.17.144/20> brd 172.31.31.255
scope global dynamic ens785
valid_lft 3314sec preferred_lft 3314sec
inet6 fe80::80f:1fff:fedb:ca73/64 scope link
valid_lft forever preferred_lft forever
Everything seems in order here. If you can share what you're trying to
accomplish with DPDK we might be able to provide better guidance.
Dave