Commit Graph

372 Commits

Author SHA1 Message Date
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
Jesper Dangaard Brouer
fcb6ef74f3 Merge pull request #30 from xdp-project/vestas02_AF_XDP_example
AF_XDP example added some results
2021-11-24 18:01:52 +01:00
Jesper Dangaard Brouer
021d262a0b AF_XDP-interaction: Debug RX-batch processing
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-24 17:54:52 +01:00
Jesper Dangaard Brouer
9584e53e57 AF_XDP-interaction: Record NIC chip used
As drivers supports multiple chips.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-24 17:10:20 +01:00
Jesper Dangaard Brouer
457a7a5e1e AF_XDP-interaction: Add results from system with RT kernel
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-24 17:06:25 +01:00
Jesper Dangaard Brouer
46cc148a03 AF_XDP-interaction: Add spin results from system B
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-19 16:21:33 +01:00
Jesper Dangaard Brouer
d5ff1ac505 AF_XDP-interaction: Adjust formatting#2, test GitHub rendering
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-19 16:12:14 +01:00
Jesper Dangaard Brouer
5a45bcbb16 AF_XDP-interaction: Adjust formatting, test GitHub rendering
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-19 16:07:18 +01:00
Jesper Dangaard Brouer
ff01e2a300 AF_XDP-interaction: Collect interesting data-points
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-19 15:43:45 +01:00
Jesper Dangaard Brouer
987dd6a15d AF_XDP-interaction: Crude stats on time-delay
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-19 15:10:43 +01:00
Jesper Dangaard Brouer
5e31a04734 AF_XDP-interaction: Update results table
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-19 14:49:21 +01:00
Jesper Dangaard Brouer
d22c08c231 AF_XDP-interaction: Add some time-delay XDP to AF_XDP results
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-19 14:41:58 +01:00
Jesper Dangaard Brouer
1bb141e9e3 Extend xdp_hints_rx_time with xdp_rx_cpu
The latency or time-delay between XDP and AF_XDP depend highly
on whether the XDP and AF_XDP runs on same CPU or remote CPU.

Extend xdp_hints_rx_time, without worrying about the layout
as BTF will adjust, so we can determine case of same CPU or
remote CPU.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-19 14:33:58 +01:00
Jesper Dangaard Brouer
1ba7209fd4 AF_XDP-interaction: README why RX-ktime matters
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-19 13:41:27 +01:00
Jesper Dangaard Brouer
ac95a4b498 Merge pull request #29 from xdp-project/vestas01_AF_XDP_example
Adding AF_XDP example that implement local XDP-hints via BTF
2021-11-17 09:07:33 +01:00
Jesper Dangaard Brouer
01aa47c814 AF_XDP-interaction: Disable stats poll as it is broken
The stats poll doesn't take into account multiple XSK sockets.
Simply disable until there is time to fix it.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 20:46:46 +01:00
Jesper Dangaard Brouer
446653f4b4 AF_XDP-interaction: Add option for real-time priority
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 20:12:04 +01:00
Jesper Dangaard Brouer
e9ec65d667 AF_XDP-interaction: README: Explaning XDP-hints via local BTF info
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 19:45:43 +01:00
Jesper Dangaard Brouer
ae4f6a5846 AF_XDP-interaction: Print XSK queue_id packet was RXed on
Now that program process all queues it is relevant to know
what queue_id received the packet.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 18:49:06 +01:00
Jesper Dangaard Brouer
732bd6ec41 AF_XDP-interaction: This example bind to all queues
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 18:07:09 +01:00
Jesper Dangaard Brouer
0f08e825bd AF_XDP-interaction: README update AF_XDP documentation section
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 17:44:27 +01:00
Jesper Dangaard Brouer
f5833725cc AF_XDP-interaction: Fix xsk_bind_flags options
This allows enabling another AF_XDP mode e.g. --zero-copy.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 17:12:29 +01:00
Jesper Dangaard Brouer
37f00015b6 AF_XDP-interaction: Cleanups
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 17:10:34 +01:00
Jesper Dangaard Brouer
a80aab5ae7 AF_XDP-interaction: Allocate more frame when we have more queues
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 16:29:38 +01:00
Jesper Dangaard Brouer
e558ab94e2 Make simple mem_frame_allocator more dynamic
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 16:07:35 +01:00
Jesper Dangaard Brouer
34dd6fc6c4 AF_XDP-interaction: Refactor a bit
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 15:53:56 +01:00
Jesper Dangaard Brouer
ca9ef962de AF_XDP-interaction: Update ethtool_utils
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 15:24:31 +01:00
Jesper Dangaard Brouer
9bca7ea4ff AF_XDP-interaction: Implement ethtool_get_max_queues
Need to get configured queues on the NIC device

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 13:03:38 +01:00
Jesper Dangaard Brouer
9c3a6a7a9d AF_XDP-interaction: Default to AF_XDP copy mode
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-16 12:10:04 +01:00
Jesper Dangaard Brouer
8806cf2264 AF_XDP-interaction: refactor FQ+CQ per xsk_socket_info
Cannot share/associate the FQ (Fill Queue) and CQ (Completion Q) with
umem container (xsk_umem_info).  This is the reason current program
cannot handle packets for each queue ID.

As described in [1] we need more FQ and CQ ring pairs, a pair per for each
unique netdev and queue IP tuple.

Thus, add FQ and CQ for each queue id in struct xsk_socket_info.

[1] https://www.kernel.org/doc/html/latest/networking/af_xdp.html

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-15 12:54:22 +01:00
Jesper Dangaard Brouer
529256b00c Mannally insert XSK FDs into xsks_map
Do like enter_xsks_into_map() in kernels xdpsock_user.c

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 22:19:45 +01:00
Jesper Dangaard Brouer
062b5d96fb AF_XDP-interaction: call handle_receive_packets on all XSKs
Strangely multiple RX-queues still doesn't work

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 22:03:13 +01:00
Jesper Dangaard Brouer
e0b044085c AF_XDP-interaction: Processing multiple XSKs doesn't work
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 20:52:23 +01:00
Jesper Dangaard Brouer
cf47f471aa AF_XDP-interaction: Handle queue id per xsk socket
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 19:15:25 +01:00
Jesper Dangaard Brouer
acf251c8bc AF_XDP-interaction: Introduce xsk_container for multiple XSK sockets
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 18:53:41 +01:00
Jesper Dangaard Brouer
7150416ccf AF_XDP-interaction: Split out memory allocator for umem frames
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 15:44:12 +01:00
Jesper Dangaard Brouer
d1d57c1dfc AF_XDP-interaction: Prepare for multiple XSK sockets
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 13:23:29 +01:00
Jesper Dangaard Brouer
de646516c3 AF_XDP-interaction: Shared header for defining MAX_AF_SOCKS
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 12:46:11 +01:00
Jesper Dangaard Brouer
396854e2e1 AF_XDP-interaction: Add --spin-mode that disables --wakeup-mode
And default that AF_XDP userspace prog to use wakeup-mode

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 11:47:48 +01:00
Jesper Dangaard Brouer
b950ab63f0 AF_XDP-interaction: rename --poll-mode to --wakeup-mode
It is confusing to name the option what will wait for packets
on the file descriptor, for --poll, just because the function
call have this name.  It confusing as AF_XDP users often want
to busy-poll for packets (for max performance reasons).

Name the new option --wakeup instead of --wait as the effect
of waiting for the FD is that the kernel needs to wakeup
the userspace process.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 10:59:37 +01:00
Jesper Dangaard Brouer
8db4d3b33c lib_xsk_extend: Avoid crashing in XSK_BTF_READ_xxx macros
The macros XSK_BTF_READ_xxx doesn't handle or report on errors
if the input or field were wrong, which is not uncommon for macros.

The bad behavior is that the macro continue to dereference the
pointer even-when xsk_btf__read_xxx() functions returns an error.
This often leads to crashing the application.

Change macro to only dereference when no errors were reported.

Side-note: The compiler warnings will detect if API user didn't
init the 'dest' value with a default value.  As the effect of
the change is that the 'dest' value will not be touch, and thus
contain the value before the macro was used.

Example:
  warning: ‘mark’ may be used uninitialized in this function

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 10:01:58 +01:00
Jesper Dangaard Brouer
1337b2dbaa AF_XDP-interaction: Reorg BTF access code
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-12 09:18:04 +01:00