Commit Graph

364 Commits

Author SHA1 Message Date
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
Jesper Dangaard Brouer
e3c2ded159 AF_XDP-interaction: Move BTF code to separate setup vs. using
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-11 15:56:22 +01:00
Jesper Dangaard Brouer
8703e1a320 AF_XDP-interaction: Explain xsk_btf__read_field in user code
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-11 14:34:43 +01:00
Jesper Dangaard Brouer
a333281166 lib_xsk_extend: Explain xsk_btf__read_field hashmap caching
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-09 22:10:43 +01:00
Jesper Dangaard Brouer
f61c9be97f lib_xsk_extend: Rename xsk_btf__read_member to xsk_btf__read
Making it the main API.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-09 21:59:14 +01:00
Jesper Dangaard Brouer
9b36c233fe lib_xsk_extend: Let XSK_BTF_READ_INTO call xsk_btf__read_member
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-09 21:52:56 +01:00
Jesper Dangaard Brouer
465f069fab lib_xsk_extend: API change introduce xsk_btf__read_field
Rename xsk_btf__read to xsk_btf__read_field.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-09 20:56:32 +01:00
Jesper Dangaard Brouer
be949736ef AF_XDP-interaction: Also introduce BTF mirror for struct xdp_hints_mark
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-09 19:39:50 +01:00
Jesper Dangaard Brouer
219ea356a4 AF_XDP-interaction: btf_id zero indicate no BTF info
Zero init xdp_hints_rx_time, which means xdp_hints_rx_time.btf_type_id
is zero if setup_btf_info() didn't find the struct name.

In print_meta_info_via_btf() we also exit if btf_id is zero, as
this isn't a valid BTF type id.

Thus, we don't need to explicitly handle "error" case of a btf_type_id
being zero, it will just naturally not match when userspace could not
find the struct name.

Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
2021-11-09 17:47:11 +01:00