On Sat, 2025-06-21 at 21:33 +0200, chia-yu.chang@nokia-bell-labs.com wrote:
From: Chia-Yu Chang chia-yu.chang@nokia-bell-labs.com
Hello,
Please find the DualPI2 patch v20.
This patch serise adds DualPI Improved with a Square (DualPI2) with following features:
- Supports congestion controls that comply with the Prague requirements in
RFC9331 (e.g. TCP-Prague)
- Coupled dual-queue that separates the L4S traffic in a low latency queue (L-
queue), without harming remaining traffic that is scheduled in classic queue (C-queue) due to congestion-coupling using PI2 as defined in RFC9332
- Configurable overload strategies
- Use of sojourn time to reliably estimate queue delay
- Supports ECN L4S-identifier (IP.ECN==0b*1) to classify traffic into
respective queues
Looking at this, I wonder if DualPI2 would be implemented in BPF. For example, you could have two FIFOs with a BPF Qdisc, such as:
struct bpf_list_head l_queue __contains(skb_node, node); struct bpf_list_head c_queue __contains(skb_node, node);
The bpf_list_push_back and bpf_list_pop_front functions are also available for handling these.
There are also spinlock helpers, and the pi2_timer can be replaced with updates based on the struct bpf_timer. Of course, there are tricks to consider regarding GSO, which might require additional BPF helpers. However, looking through the code, I see a chance to implement this as a pure BPF qdisc. What do you think?
Having this as a regular qdisc with the iproute2 tc interface is great, considering the effort already spent on it. However, since all the operational bits are already sorted out, it might be worth looking into the feasibility of a BPF version.
Best, Ferenc