Software segmentation exposes the complete skb list before encryption
begins. While encrypting each segment, request write ownership of the
next linear segment cache line by cache line. A single skb naturally
skips the prefetch path.

Signed-off-by: Ralf Lici <[email protected]>
---
No changes since v3 
https://lore.kernel.org/openvpn-devel/cc6cda4eb421a6c1ba12da441256b4dfb8438c12.1789546917.git.r...@mandelbit.com/

No changes since v2 
https://lore.kernel.org/openvpn-devel/3f903692549ee58887b1bb421f8b283059f66a1d.1789540779.git.r...@mandelbit.com/

No changes since v1 
https://lore.kernel.org/openvpn-devel/382879c187b1acca65198c467d1263266243ea50.1789485693.git.r...@mandelbit.com/

 drivers/net/ovpn/io.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/net/ovpn/io.c b/drivers/net/ovpn/io.c
index 11f7f16d7b79..cb7503a3e79c 100644
--- a/drivers/net/ovpn/io.c
+++ b/drivers/net/ovpn/io.c
@@ -472,6 +472,12 @@ static void ovpn_send(struct ovpn_priv *ovpn, struct 
sk_buff *skb,
         * independently
         */
        skb_list_walk_safe(skb, curr, next) {
+               /* encrypting this segment can hide the cost of fetching the
+                * next segment's data into the cache
+                */
+               if (next)
+                       ovpn_skb_prefetchw(next);
+
                if (unlikely(!ovpn_encrypt_one(peer, curr))) {
                        ovpn_dev_dstats_tx_dropped(ovpn->dev, 1);
                        kfree_skb(curr);
-- 
2.55.0



_______________________________________________
Openvpn-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to