Jakub Kicinski
d27483b844
net: ip: avoid OOM kills with large UDP sends over loopback
...
[ Upstream commit 6d123b81ac615072a8525c13c6c41b695270a15d ]
Dave observed number of machines hitting OOM on the UDP send
path. The workload seems to be sending large UDP packets over
loopback. Since loopback has MTU of 64k kernel will try to
allocate an skb with up to 64k of head space. This has a good
chance of failing under memory pressure. What's worse if
the message length is <32k the allocation may trigger an
OOM killer.
This is entirely avoidable, we can use an skb with page frags.
af_unix solves a similar problem by limiting the head
length to SKB_MAX_ALLOC. This seems like a good and simple
approach. It means that UDP messages > 16kB will now
use fragments if underlying device supports SG, if extra
allocator pressure causes regressions in real workloads
we can switch to trying the large allocation first and
falling back.
v4: pre-calculate all the additions to alloclen so
we can be sure it won't go over order-2
Reported-by: Dave Jones <dsj@fb.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2021-07-19 08:53:13 +02:00
..
bpfilter
netfilter
netfilter: arp_tables: add pre_exit hook for table unregister
2021-04-21 12:56:16 +02:00
af_inet.c
ah4.c
arp.c
Exempt multicast addresses from five-second neighbor lifetime
2020-11-24 13:28:56 +01:00
cipso_ipv4.c
net: ipv4: fix memory leak in netlbl_cipsov4_add_std
2021-06-23 14:41:24 +02:00
datagram.c
devinet.c
net: ipv4: Remove unneed BUG() function
2021-06-30 08:47:46 -04:00
esp4.c
xfrm: xfrm_state_mtu should return at least 1280 for ipv6
2021-07-14 16:53:26 +02:00
esp4_offload.c
esp: delete NETIF_F_SCTP_CRC bit from features for esp offload
2021-04-14 08:24:13 +02:00
fib_frontend.c
net/ipv4: swap flow ports when validating source
2021-07-14 16:53:31 +02:00
fib_lookup.h
fib_notifier.c
fib_rules.c
fib_semantics.c
net: Fix the arp error in some cases
2020-06-30 15:36:44 -04:00
fib_trie.c
ipv4: Silence suspicious RCU usage warning
2020-09-12 14:18:54 +02:00
fou.c
fou: Fix IPv6 netlink policy
2020-01-29 16:45:22 +01:00
gre_demux.c
erspan: fix version 1 check in gre_parse_header()
2021-01-12 20:16:15 +01:00
gre_offload.c
net: gre: recompute gre csum for sctp over gre tunnels
2020-08-11 15:33:40 +02:00
icmp.c
icmp: don't send out ICMP messages with a source address of 0.0.0.0
2021-06-23 14:41:27 +02:00
igmp.c
net: ipv4: fix memory leak in ip_mc_add1_src
2021-06-23 14:41:26 +02:00
inet_connection_sock.c
tcp: relookup sock for RST+ACK packets handled by obsolete req sock
2021-03-30 14:35:26 +02:00
inet_diag.c
inet_diag: Fix error path to cancel the meseage in inet_req_diag_fill()
2020-11-24 13:28:56 +01:00
inet_fragment.c
inet_hashtables.c
net: initialize fastreuse on inet_inherit_port
2020-08-19 08:16:23 +02:00
inet_timewait_sock.c
inetpeer.c
ip_forward.c
ip_fragment.c
ip_gre.c
ip_gre: set dev->hard_header_len and dev->needed_headroom properly
2020-10-29 09:58:04 +01:00
ip_input.c
ip_options.c
ip_output.c
net: ip: avoid OOM kills with large UDP sends over loopback
2021-07-19 08:53:13 +02:00
ip_sockglue.c
ip_tunnel.c
net: ip_tunnel: fix mtu calculation
2021-02-10 09:25:32 +01:00
ip_tunnel_core.c
ip_vti.c
ip_vti: receive ipip packet by calling ip_tunnel_rcv
2020-06-03 08:21:34 +02:00
ipcomp.c
ipconfig.c
net: ipconfig: Don't override command-line hostnames or domains
2021-06-18 09:58:59 +02:00
ipip.c
net: ipip: fix wrong address family in init error path
2020-06-03 08:20:52 +02:00
ipmr.c
net: don't return invalid table id error when we fall back to PF_UNSPEC
2020-06-03 08:20:41 +02:00
ipmr_base.c
Kconfig
vti[6]: fix packet tx through bpf_redirect() in XinY cases
2020-04-01 11:02:05 +02:00
Makefile
metrics.c
netfilter.c
netfilter: use actual socket sk rather than skb sk when routing harder
2020-11-18 19:20:17 +01:00
netlink.c
nexthop.c
nexthop: Do not flush blackhole nexthops when loopback goes down
2021-03-17 17:03:35 +01:00
ping.c
ping: Check return value of function 'ping_queue_rcv_skb'
2021-06-30 08:47:47 -04:00
proc.c
protocol.c
raw.c
raw_diag.c
inet_diag: return classid for all socket types
2020-03-18 07:17:38 +01:00
route.c
net: lwtunnel: handle MTU calculation in forwading
2021-07-14 16:53:35 +02:00
syncookies.c
net: Update window_clamp if SOCK_RCVBUF is set
2020-11-18 19:20:32 +01:00
sysctl_net_ipv4.c
tcp: correct read of TFO keys on big endian systems
2020-08-19 08:16:23 +02:00
tcp.c
tcp: add sanity tests to TCP_QUEUE_SEQ
2021-03-17 17:03:32 +01:00
tcp_bbr.c
tcp: only postpone PROBE_RTT if RTT is < current min_rtt estimate
2020-11-24 13:28:59 +01:00
tcp_bic.c
tcp_bpf.c
bpf, sockmap: Ensure SO_RCVBUF memory is observed on ingress redirect
2020-11-24 13:29:08 +01:00
tcp_cdg.c
tcp_cong.c
net: Only allow init netns to set default tcp cong to a restricted algo
2021-05-14 09:44:33 +02:00
tcp_cubic.c
tcp_cubic: fix spurious HYSTART_DELAY exit upon drop in min RTT
2020-06-30 15:36:47 -04:00
tcp_dctcp.c
tcp_dctcp.h
tcp_diag.c
tcp_fastopen.c
tcp: correct read of TFO keys on big endian systems
2020-08-19 08:16:23 +02:00
tcp_highspeed.c
tcp_htcp.c
tcp_hybla.c
tcp_illinois.c
tcp_input.c
tcp: make TCP_USER_TIMEOUT accurate for zero window probes
2021-02-07 15:35:47 +01:00
tcp_ipv4.c
tcp: do not mess with cloned skbs in tcp_add_backlog()
2021-01-27 11:47:55 +01:00
tcp_lp.c
tcp_metrics.c
tcp_minisocks.c
tcp: relookup sock for RST+ACK packets handled by obsolete req sock
2021-03-30 14:35:26 +02:00
tcp_nv.c
tcp_offload.c
tcp_output.c
tcp: make TCP_USER_TIMEOUT accurate for zero window probes
2021-02-07 15:35:47 +01:00
tcp_rate.c
tcp_recovery.c
tcp: fix TLP timer not set when CA_STATE changes from DISORDER to OPEN
2021-02-03 23:26:02 +01:00
tcp_scalable.c
tcp_timer.c
tcp: make TCP_USER_TIMEOUT accurate for zero window probes
2021-02-07 15:35:47 +01:00
tcp_ulp.c
bpf: Sockmap/tls, push write_space updates through ulp updates
2020-01-23 08:22:45 +01:00
tcp_vegas.c
tcp_vegas.h
tcp_veno.c
tcp_westwood.c
tcp_yeah.c
tunnel4.c
udp.c
udp: fix race between close() and udp_abort()
2021-06-23 14:41:24 +02:00
udp_diag.c
inet_diag: return classid for all socket types
2020-03-18 07:17:38 +01:00
udp_impl.h
udp_offload.c
net: Fix gro aggregation for udp encaps with zero csum
2021-03-17 17:03:30 +01:00
udp_tunnel.c
udplite.c
xfrm4_input.c
xfrm4_output.c
xfrm: Always set XFRM_TRANSFORMED in xfrm{4,6}_output_finish
2020-04-29 16:33:11 +02:00
xfrm4_policy.c
net: add bool confirm_neigh parameter for dst_ops.update_pmtu
2020-01-04 19:18:58 +01:00
xfrm4_protocol.c
xfrm4_state.c
xfrm4_tunnel.c