[dpdk-dev] Windows Draft Build
Dmitry Kozlyuk
dmitry.kozliuk at gmail.com
Thu Feb 27 05:11:26 CET 2020
Finally managed to run l2fwd with virtio PMD. Providing details as promised.
1. For some reason, when l2fwd is running, virtual screen stops updating. The
system itself is NOT frozen: l2fwd forwards packets, processes can be
launched using QEMU guest agent, input is received and processed. Since this
doesn't happen with different driver and ported upstream DPDK, there is
obviously a software bug either in netUIO or in draft DPDK, not in QEMU.
2. Testing setup
Schematically:
+-------------------+ +-------------------+ +-------------------+
| Linux guest Alice | | Windows guest | | Linux guest Bob |
| | | | | |
| 172.16.0.1/24 | | __l2fwd__ | | 172.16.0.2/24 |
| 02:00:ac:10:00:01 | | / \ | | 02:00:ac:10:00:02 |
| ens4 | | 00:04.0 00:05.0 | | ens4 |
+-------------------+ +-------------------+ +-------------------+
| QEMU dp | | dp0 QEMU dp1 | | dp QEMU |
+-------------------+ +-------------------+ +-------------------+
connect listen listen connect
:10000 :10000 :10001 :10001
Linux host \___________/ \_________/
Windows VM (Windows 10 Pro):
qemu-system-x86_64 \
-enable-kvm -cpu host -smp 'cores=4,sockets=1,threads=1' -m 6G -drive "file=$disk,format=qcow2" \
-netdev 'socket,listen=:10000,id=dp0' -device 'virtio-net-pci,disable-modern=off,disable-legacy=on,netdev=dp0' \
-netdev 'socket,listen=:10001,id=dp1' -device 'virtio-net-pci,disable-modern=off,disable-legacy=on,netdev=dp1'
Linux VM "Alice" (Debian 10):
qemu-system-x86_64 \
-enable-kvm -cpu host -smp 'cores=2,sockets=1,threads=1' -m 1G drive "file=$disk,format=qcow2" \
-netdev "socket,connect=:10000,id=dp" -device 'virtio-net-pci,disable-modern=off,disable-legacy=on,netdev=dp'
Linux VM "Bob" (Debian 10):
qemu-system-x86_64 \
-enable-kvm -cpu host -smp 'cores=2,sockets=1,threads=1' -m 1G drive "file=$disk,format=qcow2" \
-netdev "socket,connect=:10001,id=dp" -device 'virtio-net-pci,disable-modern=off,disable-legacy=on,netdev=dp'
(Note: non-essential QEMU options omitted, like management NIC).
Driver: netUIO + multi-BAR patches from Narcisa + virtio HW ID patch.
DPDK: windpdk-v18.08-clang + PCI patch + patches for virtio.
Endpoint setup:
root at alice# ip link set ens4 address 02:00:ac:10:00:01
root at alice# ip address add 172.16.0.1/24 dev ens4
root at alice# ip link set ens4 up
root at bob# ip link set ens4 address 02:00:ac:10:00:02
root at bob# ip address add 172.16.0.2/24 dev ens4
root at bob# ip link set ens4 up
DUT setup:
Z:\dpdk\x64\Debug\netuio\netuio> pnputil /add-driver netuio.inf /install
Z:\dpdk\x64\Debug\l2fwd> l2fwd.exe -c3 -- -p3 -T1 --no-mac-updating
(display stops updating, exit later with Ctrl+C)
Validate connectivity:
root at alice# ping 172.16.0.2
3. Patch instruction is a bit involved:
* Base on windpdk-v18.08-clang.
* Import drivers/net/virtio from v18.08 (not attached due to size).
* Apply windpdk-virtio-1.patch (attached).
* Apply multi-BAR patches (not attached due to not being mine).
* Apply windpdk-virtio-2.patch (attached).
There is one patch in windpdk-virtio-2.patch that splits PCI config I/O of
arbitrary size to a series of 4/2/1 accesses. It is implemented in user-mode
because it was easier to debug, but maybe it should be moved to netUIO, so
that any region of PCI config space can be read/written in a single syscall.
--
Dmitry Kozlyuk
More information about the dev
mailing list