freebsd-nq/sys/net
Vincenzo Maffione 17cec474c0 iflib: add per-tx-queue netmap timer
The way netmap TX is handled in iflib when TX interrupts are not
used (IFC_NETMAP_TX_IRQ not set) has some issues:
  - The netmap_tx_irq() function gets called by iflib_timer(), which
    gets scheduled with tick granularity (hz). This is not frequent
    enough for 10Gbps NICs and beyond (e.g., ixgbe or ixl). The end
    result is that the transmitting netmap application is not woken
    up fast enough to saturate the link with small packets.
  - The iflib_timer() functions also calls isc_txd_credits_update()
    to ask for more TX completion updates. However, this violates
    the netmap requirement that only txsync can access the TX queue
    for datapath operations. Only netmap_tx_irq() may be called out
    of the txsync context.

This change introduces per-tx-queue netmap timers, using microsecond
granularity to ensure that netmap_tx_irq() can be called often enough
to allow for maximum packet rate. The timer routine simply calls
netmap_tx_irq() to wake up the netmap application. The latter will
wake up and call txsync to collect TX completion updates.

This change brings back line rate speed with small packets for ixgbe.
For the time being, timer expiration is hardcoded to 90 microseconds,
in order to avoid introducing a new sysctl.
We may eventually implement an adaptive expiration period or use another
deferred work mechanism in place of timers.

Also, fix the timers usage to make sure that each queue is serviced
by a different CPU.

PR:	248652
Reported by:	sg@efficientip.com
MFC after:	2 weeks
2020-10-27 21:53:33 +00:00
..
altq net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
route Implement flowid calculation for outbound connections to balance 2020-10-18 17:15:47 +00:00
bpf_buffer.c
bpf_buffer.h
bpf_filter.c
bpf_jitter.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
bpf_jitter.h
bpf_zerocopy.c
bpf_zerocopy.h
bpf.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
bpf.h
bpfdesc.h
bridgestp.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
bridgestp.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
debugnet_inet.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
debugnet_int.h
debugnet.c Convert debugnet to the new routing KPI. 2020-04-26 18:42:38 +00:00
debugnet.h
dlt.h MFV r353141 (by phillip): 2019-12-21 21:01:03 +00:00
ethernet.h Add support for stacked VLANs (IEEE 802.1ad, AKA Q-in-Q). 2020-10-21 21:28:20 +00:00
firewire.h
ieee8023ad_lacp.c Add support for IP over infiniband, IPoIB, to lagg(4). Currently only 2020-10-22 09:47:12 +00:00
ieee8023ad_lacp.h make lacp's use_numa hashing aware of send tags 2020-03-09 13:44:51 +00:00
ieee_oui.h
if_arp.h
if_bridge.c bridge: call member interface ioctl() without NET_EPOCH 2020-10-06 19:19:56 +00:00
if_bridgevar.h libifconfig: Add function to get bridge status 2020-07-01 02:32:41 +00:00
if_clone.c Add support for stacked VLANs (IEEE 802.1ad, AKA Q-in-Q). 2020-10-21 21:28:20 +00:00
if_clone.h epair: Do not abuse params to register the second interface 2020-01-28 22:44:24 +00:00
if_dead.c
if_debug.c
if_disc.c
if_dl.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
if_edsc.c if_edsc: generate an arbitrary MAC address 2020-03-02 02:45:57 +00:00
if_enc.c Consistently include opt_ipsec.h for consumers of <netipsec/ipsec.h>. 2020-05-29 19:22:40 +00:00
if_enc.h
if_epair.c net: mitigate vnet / epair cleanup races 2020-09-08 14:54:10 +00:00
if_ethersubr.c Add support for IP over infiniband, IPoIB, to lagg(4). Currently only 2020-10-22 09:47:12 +00:00
if_fwsubr.c
if_gif.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
if_gif.h gif_transmit() must always be called in the network epoch. 2020-01-15 06:18:32 +00:00
if_gre.c Add if_reassing method to all tunneling interfaces. 2020-06-03 13:02:31 +00:00
if_gre.h
if_infiniband.c More style fixes (partial revert of r366994). 2020-10-24 13:07:50 +00:00
if_ipsec.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
if_ipsec.h
if_lagg.c Add support for IP over infiniband, IPoIB, to lagg(4). Currently only 2020-10-22 09:47:12 +00:00
if_lagg.h Add support for IP over infiniband, IPoIB, to lagg(4). Currently only 2020-10-22 09:47:12 +00:00
if_llatbl.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
if_llatbl.h Implement optional table entry limits for if_llatbl. 2020-03-04 17:17:02 +00:00
if_llc.h
if_loop.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
if_me.c Add if_reassing method to all tunneling interfaces. 2020-06-03 13:02:31 +00:00
if_media.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
if_media.h if_media: definitions for 40GE LM4 ethernet media type 2020-09-16 14:45:16 +00:00
if_mib.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
if_mib.h
if_pflog.h
if_pfsync.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
if_sppp.h
if_spppfr.c
if_spppsubr.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
if_stf.c Complete conversions from fib<4|6>_lookup_nh_<basic|ext> to fib<4|6>_lookup(). 2020-07-02 21:04:08 +00:00
if_tap.h
if_tun.h
if_tuntap.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
if_types.h Add support for IP over infiniband, IPoIB, to lagg(4). Currently only 2020-10-22 09:47:12 +00:00
if_var.h Switch inet6 default route subscription to the new rib subscription api. 2020-07-12 11:24:23 +00:00
if_vlan_var.h Add support for stacked VLANs (IEEE 802.1ad, AKA Q-in-Q). 2020-10-21 21:28:20 +00:00
if_vlan.c Add support for stacked VLANs (IEEE 802.1ad, AKA Q-in-Q). 2020-10-21 21:28:20 +00:00
if_vxlan.c if_vxlan(4): csum_flags_to_inner_flags takes the tunnel protocol as a parameter. 2020-10-22 17:05:55 +00:00
if_vxlan.h if_vxlan(4): add support for hardware assisted checksumming, TSO, and RSS. 2020-09-18 02:37:57 +00:00
if.c add SIOCGIFDATA ioctl 2020-09-28 16:54:39 +00:00
if.h Fix typo. 2020-10-07 10:58:56 +00:00
ifdi_if.m iflib: Stop interface before (un)registering VLAN 2020-04-27 22:02:44 +00:00
iflib_clone.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
iflib_private.h
iflib.c iflib: add per-tx-queue netmap timer 2020-10-27 21:53:33 +00:00
iflib.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ifq.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
infiniband.h Factor out generic IP over infiniband, IPoIB, definitions and code 2020-10-22 09:09:53 +00:00
mp_ring.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
mp_ring.h
mppc.h
mppcc.c kernel: provide panicky version of __unreachable 2020-05-13 18:07:37 +00:00
mppcd.c
netisr_internal.h
netisr.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
netisr.h
netmap_legacy.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
netmap_user.h netmap: fix constness warnings generated by "-Wcast-qual" 2020-10-03 09:33:29 +00:00
netmap_virt.h netmap: disable passthrough with no hypervisor support 2020-01-13 21:47:23 +00:00
netmap.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
paravirt.h
pfil.c Since now drivers that support pfil run their interrupts in the network 2020-01-23 01:49:22 +00:00
pfil.h
pfkeyv2.h Add SADB_SAFLAGS_ESN flag 2020-10-16 11:22:29 +00:00
pfvar.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
ppp_defs.h
radix_mpath.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
radix_mpath.h Convert rtalloc_mpath_fib() users to the new KPI. 2020-04-28 08:06:56 +00:00
radix.c Implement flowid calculation for outbound connections to balance 2020-10-18 17:15:47 +00:00
radix.h
raw_cb.c Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many) 2020-02-26 14:26:36 +00:00
raw_cb.h
raw_usrreq.c
rndis.h
route.c Introduce scalable route multipath. 2020-10-03 10:47:17 +00:00
route.h Implement flowid calculation for outbound connections to balance 2020-10-18 17:15:47 +00:00
rss_config.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
rss_config.h
rtsock.c Fix route flags update during RTM_CHANGE. 2020-10-04 13:24:58 +00:00
sff8436.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
sff8472.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
slcompress.c net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
slcompress.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00
toeplitz.c
toeplitz.h
vnet.c Partially revert VNET change and expand VNET structure. 2020-02-17 11:08:50 +00:00
vnet.h net: clean up empty lines in .c and .h files 2020-09-01 21:19:14 +00:00