emmericp / MoonGen

MoonGen is a fully scriptable high-speed packet generator built on DPDK and LuaJIT. It can saturate a 10 Gbit/s connection with 64 byte packets on a single CPU core while executing user-provided Lua scripts for each packet. Multi-core support allows for even higher rates. It also features precise and accurate timestamping and rate control.
MIT License
1.03k stars 234 forks source link

Does latest MoonGen support I210 NIC for timestamping and latecny measurement? #288

Open yyu4 opened 3 years ago

yyu4 commented 3 years ago

Hi, I set up the network with two I210 NIC. By running "sudo ./moongen-simple start load-latency:0:1:rate=1Mp/s", it seems to run normally, as shown in the first snippet as below. But if ",time=3m" option is appended, it will report "[Error] 1 errors found while processing flow "load-latency" and "[WARN] Unknown option "time"".

Without "time=3m" option, now I have to hard stop the program, which may cause the logging problem, i.e. histogram of './load-latency_1-0_1.csv' is empty. So I can not check the latency recording.

For checking the timestamping capability of I210, I run "sudo ./build/MoonGen examples/timestamping-tests/test-timestamping-capabilities.lua 0 1". The results are shown as the second snippet as below. The outstanding error is "[ERROR] Received no packets." Does that mean I210 is not supported by MoonGen?

Hope for your help, Best, -Yi

slave@slave:/home/moongen-src/MoonGen$ sudo ./moongen-simple start -c flows load-latency:0:1:rate=1Mp/s [INFO] Initializing DPDK. This will take a few seconds... EAL: Detected 4 lcore(s) EAL: No free hugepages reported in hugepages-1048576kB EAL: Probing VFIO support... EAL: PCI device 0000:00:1f.6 on NUMA socket -1 EAL: Invalid NUMA socket, default to 0 EAL: probe driver: 8086:15b8 net_e1000_em EAL: PCI device 0000:01:00.0 on NUMA socket -1 EAL: Invalid NUMA socket, default to 0 EAL: probe driver: 8086:1533 net_e1000_igb EAL: PCI device 0000:02:00.0 on NUMA socket -1 EAL: Invalid NUMA socket, default to 0 EAL: probe driver: 8086:1533 net_e1000_igb [INFO] Found 2 usable devices: Device 0: A0:36:9F:72:87:DC (Intel Corporation I210 Gigabit Network Connection) Device 1: A0:36:9F:72:87:E8 (Intel Corporation I210 Gigabit Network Connection) [INFO] Flow load-latency => 0x1 [INFO] Waiting for devices to come up... [INFO] Device 1 (A0:36:9F:72:87:E8) is up: 1000 MBit/s [INFO] Device 0 (A0:36:9F:72:87:DC) is up: 1000 MBit/s [INFO] 2 devices are up. [Device: id=0] TX: 0.00 Mpps, 0 Mbit/s (0 Mbit/s with framing) [Device: id=1] RX: 0.00 Mpps, 0 Mbit/s (0 Mbit/s with framing) [Device: id=0] TX: 0.80 Mpps, 411 Mbit/s (539 Mbit/s with framing) [Device: id=1] RX: 0.87 Mpps, 443 Mbit/s (581 Mbit/s with framing) [Flow: dev=0 uid=0x1] TX: 1.01 Mpps, 515 Mbit/s (676 Mbit/s with framing) [Flow: dev=1 uid=0x1] RX: 1.00 Mpps, 511 Mbit/s (670 Mbit/s with framing) [Flow: dev=1 uid=?] RX: 0.00 Mpps, 0 Mbit/s (0 Mbit/s with framing) [Device: id=0] TX: 0.99 Mpps, 507 Mbit/s (665 Mbit/s with framing) [Device: id=1] RX: 0.99 Mpps, 507 Mbit/s (665 Mbit/s with framing) [Flow: dev=0 uid=0x1] TX: 0.99 Mpps, 507 Mbit/s (665 Mbit/s with framing) [Flow: dev=1 uid=0x1] RX: 0.98 Mpps, 500 Mbit/s (657 Mbit/s with framing) [Flow: dev=1 uid=?] RX: 0.00 Mpps, 0 Mbit/s (0 Mbit/s with framing) ^C[Flow: dev=1 uid=?] RX: 0.00 (StdDev nan) Mpps, 0 (StdDev nan) Mbit/s (0 Mbit/s with framing), total 182 packets with 16016 bytes (incl. CRC) [Flow: dev=1 uid=0x1] RX: 0.98 (StdDev nan) Mpps, 500 (StdDev nan) Mbit/s (657 Mbit/s with framing), total 2118162 packets with 135562368 bytes (incl. CRC) [Flow: dev=0 uid=0x1] TX: 0.99 (StdDev nan) Mpps, 507 (StdDev nan) Mbit/s (665 Mbit/s with framing), total 2138850 packets with 136886400 bytes (incl. CRC) [INFO] Saving histogram to './load-latency_1-0_1.csv' [Device: id=0] TX: 0.90 (StdDev 0.13) Mpps, 459 (StdDev 68) Mbit/s (602 Mbit/s with framing), total 2138808 packets with 136888080 bytes (incl. CRC) [Device: id=1] RX: 0.93 (StdDev 0.09) Mpps, 475 (StdDev 45) Mbit/s (623 Mbit/s with framing), total 2138808 packets with 136888080 bytes (incl. CRC) slave@slave:/home/moongen-src/MoonGen$ <<<<<<<<<<<<<<<<<<<<<<<<<<<<

slave@slave:/home/moongen-src/MoonGen$ sudo ./build/MoonGen examples/timestamping-tests/test-timestamping-capabilities.lua 0 1 [INFO] Initializing DPDK. This will take a few seconds... EAL: Detected 4 lcore(s) EAL: No free hugepages reported in hugepages-1048576kB EAL: Probing VFIO support... EAL: PCI device 0000:00:1f.6 on NUMA socket -1 EAL: Invalid NUMA socket, default to 0 EAL: probe driver: 8086:15b8 net_e1000_em EAL: PCI device 0000:01:00.0 on NUMA socket -1 EAL: Invalid NUMA socket, default to 0 EAL: probe driver: 8086:1533 net_e1000_igb EAL: PCI device 0000:02:00.0 on NUMA socket -1 EAL: Invalid NUMA socket, default to 0 EAL: probe driver: 8086:1533 net_e1000_igb [INFO] Found 2 usable devices: Device 0: A0:36:9F:72:87:DC (Intel Corporation I210 Gigabit Network Connection) Device 1: A0:36:9F:72:87:E8 (Intel Corporation I210 Gigabit Network Connection) [INFO] Waiting for devices to come up... [INFO] Device 1 (A0:36:9F:72:87:E8) is up: 1000 MBit/s [INFO] Device 0 (A0:36:9F:72:87:DC) is up: 1000 MBit/s [INFO] 2 devices are up. [INFO] Testing timestamping L2 PTP packets without rx filtering for 5 seconds. Samples: 0, Average: nan ns, StdDev: 0.0 ns, Quartiles: nan/nan/nan ns [ERROR] Received no packets.

[INFO] Testing timestamping L2 PTP packets with rx filtering for 5 seconds. Samples: 0, Average: nan ns, StdDev: 0.0 ns, Quartiles: nan/nan/nan ns [ERROR] Received no packets.

[INFO] Testing timestamping L2 PTP packets without rx filtering for 5 seconds. [INFO] Adding VLAN tag, this is not supported on some NICs. [WARN] Failed to timestamp packet on transmission [WARN] Failed to timestamp packet on transmission [WARN] Failed to timestamp packet on transmission [WARN] Failed to timestamp packet on transmission .... [WARN] Failed to timestamp packet on transmission [WARN] Failed to timestamp packet on transmission [WARN] Failed to timestamp packet on transmission Samples: 0, Average: nan ns, StdDev: 0.0 ns, Quartiles: nan/nan/nan ns [ERROR] Received no packets.

[INFO] Testing timestamping UDP packets to port 319 without rx filtering for 5 seconds. Samples: 0, Average: nan ns, StdDev: 0.0 ns, Quartiles: nan/nan/nan ns [ERROR] Received no packets.

[INFO] Testing timestamping UDP packets to port 1234 without rx filtering for 5 seconds. [WARN] Timestamping on UDP ports other than 319 is not supported by the hardware or driver Samples: 0, Average: nan ns, StdDev: 0.0 ns, Quartiles: nan/nan/nan ns [ERROR] Received no packets.

[INFO] Testing timestamping UDP packets to port 319 without rx filtering for 5 seconds. [INFO] Adding VLAN tag, this is not supported on some NICs. Samples: 0, Average: nan ns, StdDev: 0.0 ns, Quartiles: nan/nan/nan ns [ERROR] Received no packets.

[INFO] Testing timestamping UDP packets to port 319 with rx filtering for 5 seconds. Samples: 0, Average: nan ns, StdDev: 0.0 ns, Quartiles: nan/nan/nan ns [ERROR] Received no packets.

[INFO] Testing timestamping UDP packets to port 319 with rx filtering for 5 seconds. [INFO] Using multiple flows, this can be slower on some NICs. Samples: 0, Average: nan ns, StdDev: 0.0 ns, Quartiles: nan/nan/nan ns [ERROR] Received no packets.

[INFO] Flooding link with UDP packets with the same flow 5-tuple. [INFO] This tests whether the filter matches on payload. [INFO] Testing timestamping UDP packets to port 319 with rx filtering for 5 seconds. Samples: 0, Average: nan ns, StdDev: 0.0 ns, Quartiles: nan/nan/nan ns [ERROR] Received no packets.

[INFO] Trying to enable rx timestamping of all packets, this isn't supported by most nics [INFO] Trying to generate ~1000 mbit/s [WARN] Per-queue rate limit is not supported on this device, setting per-device rate limit to 1000 Mbit/s instead (note: this may fail as well if the NIC doesn't support any rate limiting). [WARN] global rate limiting is not supported by the hardware or driver [Device: id=1] RX: 0.69 Mpps, 354 Mbit/s (465 Mbit/s with framing) [Device: id=0] TX: 0.71 Mpps, 362 Mbit/s (475 Mbit/s with framing) [Device: id=1] RX: 1.49 Mpps, 762 Mbit/s (1000 Mbit/s with framing) [Device: id=0] TX: 1.49 Mpps, 762 Mbit/s (1000 Mbit/s with framing) [Device: id=1] RX: 1.49 Mpps, 762 Mbit/s (1000 Mbit/s with framing) [Device: id=0] TX: 1.49 Mpps, 762 Mbit/s (1000 Mbit/s with framing) [Device: id=1] RX: 1.49 Mpps, 762 Mbit/s (1000 Mbit/s with framing) [Device: id=0] TX: 1.49 Mpps, 762 Mbit/s (1000 Mbit/s with framing) [Device: id=1] RX: 1.49 Mpps, 762 Mbit/s (1000 Mbit/s with framing) [Device: id=0] TX: 1.49 Mpps, 762 Mbit/s (1000 Mbit/s with framing) [INFO] Inter-arrival time distribution, this will report 0 on unsupported NICs Samples: 7441622, Average: 0.0 ns, StdDev: 0.0 ns, Quartiles: 0.0/0.0/0.0 ns

slave@slave:/home/moongen-src/MoonGen$ <<<<<<<<<<<<<<<<<<<<<<<<<<<<

emmericp commented 3 years ago

I'm not sure if I've ever tested it with an i210, it should work. The register definitions are here: https://github.com/libmoon/libmoon/blob/master/lua/driver/igb.lua Maybe they are wrong for the i210?