William Tu
d265929930
netfilter: nf_conncount: reduce unnecessary GC
...
Currently nf_conncount can trigger garbage collection (GC)
at multiple places. Each GC process takes a spin_lock_bh
to traverse the nf_conncount_list. We found that when testing
port scanning use two parallel nmap, because the number of
connection increase fast, the nf_conncount_count and its
subsequent call to __nf_conncount_add take too much time,
causing several CPU lockup. This happens when user set the
conntrack limit to +20,000, because the larger the limit,
the longer the list that GC has to traverse.
The patch mitigate the performance issue by avoiding unnecessary
GC with a timestamp. Whenever nf_conncount has done a GC,
a timestamp is updated, and beforce the next time GC is
triggered, we make sure it's more than a jiffies.
By doin this we can greatly reduce the CPU cycles and
avoid the softirq lockup.
To reproduce it in OVS,
$ ovs-appctl dpctl/ct-set-limits zone=1,limit=20000
$ ovs-appctl dpctl/ct-get-limits
At another machine, runs two nmap
$ nmap -p1- <IP>
$ nmap -p1- <IP>
Signed-off-by: William Tu <u9012063@gmail.com >
Co-authored-by: Yifeng Sun <pkusunyifeng@gmail.com >
Reported-by: Greg Rose <gvrose8192@gmail.com >
Suggested-by: Florian Westphal <fw@strlen.de >
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org >
2022-05-16 13:05:40 +02:00
..
2021-09-14 00:50:01 +02:00
2022-05-03 10:15:06 +02:00
2022-03-28 08:57:10 -07:00
2021-12-23 01:07:35 +01:00
2022-01-18 14:26:42 -08:00
2022-05-16 13:05:40 +02:00
2022-02-04 06:30:28 +01:00
2019-07-16 13:16:59 +02:00
2022-04-06 09:58:30 -07:00
2019-07-16 13:16:59 +02:00
2022-05-13 18:56:28 +02:00
2022-05-13 18:56:28 +02:00
2022-01-09 23:30:13 +01:00
2022-05-13 18:52:16 +02:00
2021-05-05 23:45:48 +02:00
2020-07-22 01:18:05 +02:00
2021-06-01 23:53:51 +02:00
2022-05-13 18:52:17 +02:00
2021-05-05 23:45:48 +02:00
2022-02-04 06:30:28 +01:00
2022-01-11 10:41:44 +01:00
2022-05-13 18:56:27 +02:00
2022-02-04 06:30:28 +01:00
2021-06-18 14:47:43 +02:00
2021-07-02 02:07:01 +02:00
2021-06-18 14:47:43 +02:00
2021-06-18 14:47:43 +02:00
2022-02-04 05:38:15 +01:00
2022-04-27 15:48:45 +02:00
2022-03-03 13:35:22 +01:00
2022-05-13 18:56:27 +02:00
2021-05-05 23:45:48 +02:00
2022-02-04 06:30:28 +01:00
2019-07-16 13:16:59 +02:00
2022-05-16 10:10:37 +01:00
2019-07-16 13:16:59 +02:00
2022-05-13 18:56:27 +02:00
2022-02-04 06:30:28 +01:00
2022-03-03 14:38:48 +00:00
2022-03-20 00:29:48 +01:00
2022-03-16 11:25:04 +01:00
2022-03-23 10:53:49 -07:00
2022-03-20 00:29:47 +01:00
2021-08-30 01:51:36 +02:00
2020-05-27 22:20:34 +02:00
2022-04-08 14:36:06 +02:00
2021-03-31 22:34:11 +02:00
2019-07-16 13:16:59 +02:00
2022-03-17 13:56:58 -07:00
2019-07-16 13:16:59 +02:00
2019-06-22 08:59:24 -04:00
2019-07-16 13:16:59 +02:00
2022-05-13 18:56:27 +02:00
2021-04-26 03:20:07 +02:00
2019-06-22 08:59:24 -04:00
2019-07-16 13:16:59 +02:00
2019-07-16 13:16:59 +02:00
2022-03-01 11:51:15 +01:00
2020-07-24 15:41:54 -07:00
2022-02-04 06:30:28 +01:00
2022-04-15 09:26:00 +02:00
2022-03-23 10:53:49 -07:00
2022-02-20 01:22:20 +01:00
2022-01-09 23:35:17 +01:00
2021-05-29 01:04:53 +02:00
2021-06-07 13:01:52 -07:00
2022-05-13 18:52:17 +02:00
2021-12-29 08:48:14 -08:00
2022-03-03 14:38:48 +00:00
2021-05-05 22:26:09 +02:00
2022-03-03 11:55:12 -08:00
2022-05-13 18:56:28 +02:00
2022-04-11 11:47:58 +01:00
2022-03-20 00:29:46 +01:00
2021-10-22 11:41:16 +01:00
2021-05-29 01:04:54 +02:00
2021-05-29 01:04:54 +02:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2022-04-05 11:55:46 +02:00
2022-04-05 11:55:46 +02:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:47 +01:00
2022-03-20 00:29:47 +01:00
2022-03-20 00:29:47 +01:00
2022-04-11 12:10:09 +02:00
2022-05-13 18:56:28 +02:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:47 +01:00
2022-03-20 00:29:47 +01:00
2022-04-05 11:55:46 +02:00
2022-04-05 11:55:46 +02:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:47 +01:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:47 +01:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2022-04-05 11:55:46 +02:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2020-10-31 10:40:42 +01:00
2022-03-20 00:29:46 +01:00
2021-05-29 01:04:27 +02:00
2021-05-29 01:04:27 +02:00
2021-12-24 16:58:17 +01:00
2021-05-29 01:04:27 +02:00
2022-01-06 10:43:24 +01:00
2021-05-29 01:04:27 +02:00
2022-04-22 15:49:15 +02:00
2022-04-28 16:15:23 +02:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:46 +01:00
2022-03-20 00:29:47 +01:00
2022-03-20 00:29:47 +01:00
2020-10-30 12:57:39 +01:00
2022-01-22 08:33:37 +02:00
2021-06-01 23:53:51 +02:00
2021-08-17 00:45:07 +02:00
2019-09-13 12:33:06 +02:00
2020-07-29 20:09:18 +02:00
2020-07-29 20:09:18 +02:00
2022-01-09 23:30:13 +01:00
2019-06-22 08:59:24 -04:00
2022-01-22 08:33:37 +02:00
2019-06-22 08:59:24 -04:00
2020-08-28 19:55:51 +02:00
2021-11-08 12:14:05 +01:00
2019-06-25 01:32:59 +02:00
2021-05-29 01:04:52 +02:00
2021-09-21 03:46:56 +02:00
2020-06-25 00:50:31 +02:00
2020-12-01 09:45:29 +01:00
2021-09-21 03:46:56 +02:00
2019-06-25 01:32:59 +02:00
2019-09-13 12:32:48 +02:00
2021-10-18 12:54:41 +01:00
2022-01-22 08:33:37 +02:00
2021-05-03 23:02:44 +02:00
2019-08-13 12:14:26 +02:00
2022-02-13 23:55:48 +01:00
2019-06-22 08:59:24 -04:00
2019-06-22 08:59:24 -04:00
2020-07-29 20:09:18 +02:00
2021-04-26 03:20:07 +02:00
2021-03-31 22:34:10 +02:00