Commit Graph

147 Commits

Author SHA1 Message Date
Jesper Dangaard Brouer
18908873a7 refactor code test02_should_fail
Introduce helper to make is easier to test two struct variations
with the same invalid btf_id struct location.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-04-22 12:21:35 +02:00
Jesper Dangaard Brouer
1e4e033c3a btf_unit_test: Add test02_should_fail
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-04-22 11:29:47 +02:00
Jesper Dangaard Brouer
7409814e44 btf_unit_test: Fix small leak
If init_btf_info_via_bpf_object() fails, then we should release bpf_object.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-04-22 10:43:55 +02:00
Jesper Dangaard Brouer
f14a20a15d btf_unit_test: Prepare partition of tests
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-04-22 10:41:27 +02:00
Jesper Dangaard Brouer
8b2494f0c0 btf_unit_test: Remember to free memory
It is a bad habit to rely on process exit to free memory.
Add proper memory free operations.

Using checker command: 
  valgrind --leak-check=yes ./btf_unit_test

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-04-22 10:34:16 +02:00
Jesper Dangaard Brouer
9ed0567cf3 btf_unit_test: Load BPF-object file btf_unit_test_bpf.o
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-04-22 10:15:05 +02:00
Jesper Dangaard Brouer
1f15e94296 btf_unit_test: Refactor load_bpf_object to take filename
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-04-22 10:12:50 +02:00
Jesper Dangaard Brouer
20916547db AF_XDP-interaction: Add BPF object/code for unit test
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-04-22 08:33:40 +02:00
Jesper Dangaard Brouer
a0e2c91983 AF_XDP-interaction: lib user don't need to check for btf_id
Now that lib side of xsk_btf__init_xdp_hint check for a valid
btf_id variable, then users of the call doesn't need to check
for the existance of a btf_id member.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-04-05 10:35:34 +02:00
Jesper Dangaard Brouer
871378bd4d AF_XDP-interaction: lib_xsk_extend: Validate 'btf_id' is last member
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-03-25 14:17:23 +01:00
Jesper Dangaard Brouer
7715df83ee AF_XDP-interaction: Add BTF decoding code to btf_unit_test
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-03-24 12:25:07 +01:00
Jesper Dangaard Brouer
2b3fcf932d AF_XDP-interaction: Add btf_unit_test
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-03-21 15:10:46 +01:00
Jesper Dangaard Brouer
f9095c5caf AF_XDP-interaction: lib_xsk_extend: Validate 'btf_id' member MUST exist
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-03-21 13:24:26 +01:00
Jesper Dangaard Brouer
02ccbfc152 AF_XDP-interaction: Move function xsk_btf__init_xdp_hint
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-03-21 12:47:56 +01:00
Jesper Dangaard Brouer
ce714625ce AF_XDP-interaction: Fix function tx_pkt
If there were more transmit slots, then we umem free the
packet, but we continued sending it anyhow.

The places tx_pkt() is currently used this never happened.
Still fix the bug.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-02-21 19:03:49 +01:00
Jesper Dangaard Brouer
e1b18d7b12 AF_XDP-interaction: Fix another warning in complete_tx
warning: ‘return’ with no value, in function returning non-void

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-21 12:09:30 +01:00
Jesper Dangaard Brouer
96e5daf52c AF_XDP-interaction: Fix compiler warnings
warning: suggest parentheses around assignment used as truth value

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-21 12:05:09 +01:00
Jesper Dangaard Brouer
0c2ec8a1bd AF_XDP-interaction: Exclude first measurement min/max stats as no next_adj happened
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-19 12:18:27 +01:00
Jesper Dangaard Brouer
4ee53b1fd5 AF_XDP-interaction: Add cmdline options for specifying IPs
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-18 16:48:34 +01:00
Jesper Dangaard Brouer
9eefd4bd56 AF_XDP-interaction: Change IP for my testlab
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-18 16:33:17 +01:00
Jesper Dangaard Brouer
1a8a2b9188 AF_XDP-interaction: Add option for selecting batch pkts size
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-18 14:01:57 +01:00
Jesper Dangaard Brouer
86b76f564f AF_XDP-interaction: workaround for detecting when AF_XDP is read for TX
I hope there exist a better API for determining when AF_XDP
is ready for transmitting packets.

This workaround keeps trying to send a single packet, and
check return value seen from sendto() syscall, until it
doesn't return an error.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-14 16:48:13 +01:00
Jesper Dangaard Brouer
6d6ac23f3b AF_XDP-interaction: warning if code completed more than possible
Give a print WARN if code/AF_XDP somehow have MORE packets to
complete from CQ than our counter for xsk->outstanding_tx packets.
This should not happen, but currently hunting for a TX issue.

The code (below) reset xsk->outstanding_tx, which were introduced
via a discussion on xdp-tutorial:
 https://github.com/xdp-project/xdp-tutorial/issues/180

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-14 14:33:11 +01:00
Jesper Dangaard Brouer
49c1efadf8 AF_XDP-interaction: Report warning when TX-kick via sendto fails
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-14 13:26:24 +01:00
Jesper Dangaard Brouer
b1b465a32f AF_XDP-interaction: Remove hack that started tv_nsec as zero
When interval goes below 1 sec this hack screwup first clock_nanosleep.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-14 11:30:50 +01:00
Jesper Dangaard Brouer
6367e82069 AF_XDP-interaction: Add param to adjust TX-cyclic interval
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-14 11:12:24 +01:00
Jesper Dangaard Brouer
2d86845b02 AF_XDP-interaction: Add option for debugging time
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-07 17:38:19 +01:00
Jesper Dangaard Brouer
42ea6e7938 AF_XDP-interaction: Hack to start next interval with nsec as zero
This is done to easier visually see the time difference
when debug printing the timespec's (via print_timespec).

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-07 17:38:19 +01:00
Jesper Dangaard Brouer
37e650cd72 AF_XDP-interaction: Handle if adjusting next_adj goes negative
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-07 17:38:19 +01:00
Jesper Dangaard Brouer
f53b5670a5 AF_XDP-interaction: Adjust for inaccuracy of clock_nanosleep
Measurements show that on test systems, clock_nanosleep fairly
consistently wakeup later (or after) the requested sleep time.

It is fairly trivial to simply adjust the sleep/wakeup time
with the measure inaccuracy of clock_nanosleep, and "ask"
clock_nanosleep to wakeup a bit earlier.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-07 17:38:19 +01:00
Jesper Dangaard Brouer
3d66217586 AF_XDP-interaction: Debug TX issue
Calling tx_pkt() before the link is ready, result in no packets
transmitted, but xsk_ring_prod__reserve() still succeeds.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-07 17:38:19 +01:00
Jesper Dangaard Brouer
9ba52af3b4 AF_XDP-interaction: Enable libbpf pr_debug via --debug
Like described in guide:
 https://facebookmicrosites.github.io/bpf/blog/2020/02/20/bcc-to-libbpf-howto-guide.html#libbpf-log

Enable extra libbpf debug printing when --debug gets
specified as option to our program.

This is acheived via setting a custom log handler via
libbpf API call libbpf_set_print().

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2022-01-07 17:30:53 +01:00
Jesper Dangaard Brouer
f3d5d3ca93 AF_XDP-interaction: cmdline options for MAC-addresses
Change Ethernet MAC in transmitted frames
 via cmdline options (-G|--tx-dmac) or (-H|--tx-smac)

Based on suggestion from: Ong Boon Leong <boon.leong.ong@intel.com>
 https://lore.kernel.org/all/20211124091821.3916046-3-boon.leong.ong@intel.com/

Suggested-by: Ong Boon Leong <boon.leong.ong@intel.com>
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-14 13:52:27 +01:00
Jesper Dangaard Brouer
b71f7f8cac AF_XDP-interaction: Add cmdline option for enable/disabling busy-poll mode
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-14 12:26:12 +01:00
Jesper Dangaard Brouer
3685d5ea93 AF_XDP-interaction: Try preferred busy-polling trick
The apply_setsockopt() was taken from samples/bpf/xdpsock_user.c

Testing with --zero-copy this unfortunately doesn't solve
the issue of 8 packets bulks when requesting 4.
Notice this test was with driver igc and chip i225.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-13 23:01:09 +01:00
Jesper Dangaard Brouer
842c707c4e AF_XDP-interaction: Try adding XDP_USE_NEED_WAKEUP
Measurements on a receiver shows that TX doesn't happen immediately.
Even when calling sendto() for doing TX kick.

Added bind flag XDP_USE_NEED_WAKEUP, but this didn't help.

TX burst 4 packets, but in --zero-copy mode we often observe
8 packets arriving in a burst.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-13 21:34:14 +01:00
Jesper Dangaard Brouer
185431e6d8 AF_XDP-interaction: convert to tx_cyclic_and_rx_process
Function now also RX process packet after cyclic TX.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-13 20:45:11 +01:00
Jesper Dangaard Brouer
95a5a31c90 AF_XDP-interaction: add tx_cyclic_batch
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-13 20:03:39 +01:00
Jesper Dangaard Brouer
1750679402 AF_XDP-interaction: Move invent_tx_pkts() out of tx_batch_pkts
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-13 18:25:58 +01:00
Jesper Dangaard Brouer
56ba3a10df AF_XDP-interaction: Implement a TX batching function
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-07 18:12:11 +01:00
Jesper Dangaard Brouer
8b02218dde AF_XDP-interaction: Move function tx_pkt
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-07 15:55:30 +01:00
Jesper Dangaard Brouer
bd49ff6ca8 AF_XDP-interaction: Issue with XDP link down/up
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-07 15:35:51 +01:00
Jesper Dangaard Brouer
bb86dc7f1b AF_XDP-interaction: Adjust error msg
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-07 15:29:39 +01:00
Jesper Dangaard Brouer
709607bfdd AF_XDP-interaction: Fix pointer to UDP data area for memset
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-03 23:12:20 +01:00
Jesper Dangaard Brouer
1e8ad22fe0 AF_XDP-interaction: Limit FQ refill size
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-03 22:56:19 +01:00
Jesper Dangaard Brouer
37d4f466dd AF_XDP-interaction: Fix bug in mem_frame_allocator
The assumption was that our simple memory allocator for umem
frames return an addr that point to the start of the frame.

When a frame addr is freed/returned via mem_free_umem_frame()
this frame addr doesn't necessary point to the start of the
frame.  Often this is not the case.  As the kernel RX process
will add some headroom.  Our userspace TX process can also choose
to add headroom, resulting in frames returned in Completion Queue
will also have this headroom offset in the addr.

Fix by removing headroom offset when freeing/returning the
frame addr in mem_free_umem_frame().

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-03 22:30:30 +01:00
Jesper Dangaard Brouer
ea8b2df6aa AF_XDP-interaction: packet TX test
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-03 21:35:02 +01:00
Jesper Dangaard Brouer
25e8873f2f AF_XDP-interaction: Packet fill helpers
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-03 18:06:39 +01:00
Jesper Dangaard Brouer
c3ca3a6ffc AF_XDP-interaction: Add debug function pr_addr_info()
The packet umem addr can be an offset into the packet.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-12-03 17:44:13 +01:00
Jesper Dangaard Brouer
76af06aaab AF_XDP-interaction: Start on new tx and rx batch process code
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-29 16:02:57 +01:00