Re: [PATCH net-next v2 08/22] ovpn: implement basic TX path (UDP)
From: Toke Høiland-Jørgensen <hidden>
Date: 2024-03-08 15:31:59
Antonio Quartulli [off-list ref] writes:
+/* send skb to connected peer, if any */
+static void ovpn_queue_skb(struct ovpn_struct *ovpn, struct sk_buff *skb, struct ovpn_peer *peer)
+{
+ int ret;
+
+ if (likely(!peer))
+ /* retrieve peer serving the destination IP of this packet */
+ peer = ovpn_peer_lookup_by_dst(ovpn, skb);
+ if (unlikely(!peer)) {
+ net_dbg_ratelimited("%s: no peer to send data to\n", ovpn->dev->name);
+ goto drop;
+ }
+
+ ret = ptr_ring_produce_bh(&peer->tx_ring, skb);
+ if (unlikely(ret < 0)) {
+ net_err_ratelimited("%s: cannot queue packet to TX ring\n", peer->ovpn->dev->name);
+ goto drop;
+ }
+
+ if (!queue_work(ovpn->crypto_wq, &peer->encrypt_work))
+ ovpn_peer_put(peer);
+
+ return;
+drop:
+ if (peer)
+ ovpn_peer_put(peer);
+ kfree_skb_list(skb);
+}So this puts packets on a per-peer 1024-packet FIFO queue with no backpressure? That sounds like a pretty terrible bufferbloat situation. Did you do any kind of latency-under-load testing of this, such as running the RRUL test[0] through it? -Toke [0] https://flent.org/tests.html#the-realtime-response-under-load-rrul-test