Files
rockchip-kernel/include/uapi/linux
Arjun Roy 94ab9eb9b2 net-zerocopy: Defer vm zap unless actually needed.
Zapping pages is required only if we are calling vm_insert_page into a
region where pages had previously been mapped. Receive zerocopy allows
reusing such regions, and hitherto called zap_page_range() before
calling vm_insert_page() in that range.

zap_page_range() can also be triggered from userspace with
madvise(MADV_DONTNEED). If userspace is configured to call this before
reusing a segment, or if there was nothing mapped at this virtual
address to begin with, we can avoid calling zap_page_range() under the
socket lock. That said, if userspace does not do that, then we are
still responsible for calling zap_page_range().

This patch adds a flag that the user can use to hint to the kernel
that a zap is not required. If the flag is not set, or if an older
user application does not have a flags field at all, then the kernel
calls zap_page_range as before. Also, if the flag is set but a zap is
still required, the kernel performs that zap as necessary. Thus
incorrectly indicating that a zap can be avoided does not change the
correctness of operation. It also increases the batchsize for
vm_insert_pages and prefetches the page struct for the batch since
we're about to bump the refcount.

An alternative mechanism could be to not have a flag, assume by
default a zap is not needed, and fall back to zapping if needed.
However, this would harm performance for older applications for which
a zap is necessary, and thus we implement it with an explicit flag
so newer applications can opt in.

When using RPC-style traffic with medium sized (tens of KB) RPCs, this
change yields an efficency improvement of about 30% for QPS/CPU usage.

Signed-off-by: Arjun Roy <arjunroy@google.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2020-12-04 13:40:53 -08:00
..
2020-08-22 10:53:12 +01:00
2020-05-28 11:22:14 +02:00
2019-12-18 18:07:31 +01:00
2020-08-12 10:58:00 -07:00
2019-03-07 18:32:01 -08:00
2020-10-09 12:47:02 -06:00
2019-10-09 22:31:14 -04:00
2019-09-25 17:51:39 -07:00
2019-08-02 14:44:02 +10:00
2020-11-24 13:04:04 -08:00
2020-10-01 15:03:40 -04:00
2020-04-27 16:29:41 +05:30
2020-07-19 19:20:22 -07:00
2020-06-24 21:34:11 +02:00
2020-05-14 16:44:25 +02:00
2019-03-27 13:30:07 -07:00
2020-05-28 22:09:47 -04:00
2019-08-12 19:33:50 -07:00
2020-08-27 08:01:47 -07:00
2019-12-11 15:31:52 +01:00
2020-07-19 19:20:22 -07:00
2020-08-05 19:02:07 +05:30
2020-07-13 15:32:56 -07:00
2020-04-20 12:43:24 -07:00
2020-07-24 17:12:41 -07:00
2020-08-27 07:55:59 -07:00
2019-09-08 15:37:04 +02:00
2020-05-21 08:20:35 -06:00
2020-03-29 22:30:57 -07:00
2020-08-18 15:44:44 +02:00
2020-08-27 16:06:47 -04:00
2020-07-09 12:38:41 -07:00
2020-11-11 08:39:13 +01:00
2020-01-18 09:19:18 -05:00
2020-10-19 19:39:22 +02:00
2019-10-02 20:32:27 -06:00
2019-07-30 20:34:34 +02:00
2020-05-21 17:04:07 -07:00
2020-03-29 22:30:57 -07:00
2019-12-18 18:07:31 +01:00
2019-12-09 09:59:07 +01:00
2020-03-29 23:29:08 +02:00
2020-10-23 11:55:28 -04:00
2020-10-23 11:55:28 -04:00
2020-08-18 14:14:25 +02:00
2019-08-01 21:49:46 +02:00
2020-07-13 15:32:56 -07:00
2020-06-24 07:51:01 +02:00