-----Original Message----- From: Victor Nogueira victor@mojatatu.com Sent: Wednesday, April 16, 2025 2:22 PM To: Chia-Yu Chang (Nokia) chia-yu.chang@nokia-bell-labs.com; netdev@vger.kernel.org; dave.taht@gmail.com; pabeni@redhat.com; jhs@mojatatu.com; kuba@kernel.org; stephen@networkplumber.org; xiyou.wangcong@gmail.com; jiri@resnulli.us; davem@davemloft.net; edumazet@google.com; horms@kernel.org; andrew+netdev@lunn.ch; donald.hunter@gmail.com; ast@fiberby.net; liuhangbin@gmail.com; shuah@kernel.org; linux-kselftest@vger.kernel.org; ij@kernel.org; ncardwell@google.com; Koen De Schepper (Nokia) koen.de_schepper@nokia-bell-labs.com; g.white g.white@cablelabs.com; ingemar.s.johansson@ericsson.com; mirja.kuehlewind@ericsson.com; cheshire@apple.com; rs.ietf@gmx.at; Jason_Livingood@comcast.com; vidhi_goel vidhi_goel@apple.com Cc: Olga Albisser olga@albisser.org; Olivier Tilmans (Nokia) olivier.tilmans@nokia.com; Bob Briscoe research@bobbriscoe.net; Henrik Steen henrist@henrist.net Subject: Re: [PATCH v5 RESEND iproute2-next 1/1] tc: add dualpi2 scheduler module
[You don't often get email from victor@mojatatu.com. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]
CAUTION: This is an external email. Please be very careful when clicking links or opening attachments. See the URL nok.it/ext for additional information.
On 4/14/25 10:18, chia-yu.chang@nokia-bell-labs.com wrote:
From: Chia-Yu Chang chia-yu.chang@nokia-bell-labs.com
DUALPI2 AQM is a combination of the DUALQ Coupled-AQM with a PI2 base-AQM. The PI2 AQM is in turn both an extension and a simplification of the PIE AQM. PI2 makes quite some PIE heuristics unnecessary, while being able to control scalable congestion controls like TCP-Prague. With PI2, both Reno/Cubic can be used in parallel with Prague, maintaining window fairness. DUALQ provides latency separation between low latency Prague flows and Reno/Cubic flows that need a bigger queue.
This patch adds support to tc to configure it through its netlink interface.
Signed-off-by: Chia-Yu Chang chia-yu.chang@nokia-bell-labs.com Co-developed-by: Olga Albisser olga@albisser.org Signed-off-by: Olga Albisser olga@albisser.org Co-developed-by: Koen De Schepper koen.de_schepper@nokia-bell-labs.com Signed-off-by: Koen De Schepper koen.de_schepper@nokia-bell-labs.com Co-developed-by: Oliver Tilmans olivier.tilmans@nokia.com Signed-off-by: Oliver Tilmans olivier.tilmans@nokia.com Signed-off-by: Bob Briscoe research@bobbriscoe.net Co-developed-by: Henrik Steen henrist@henrist.net Signed-off-by: Henrik Steen henrist@henrist.net
bash-completion/tc | 11 +- include/uapi/linux/pkt_sched.h | 39 +++ include/utils.h | 2 + ip/iplink_can.c | 14 - lib/utils.c | 30 ++ man/man8/tc-dualpi2.8 | 249 ++++++++++++++++ tc/Makefile | 1 + tc/q_dualpi2.c | 519 +++++++++++++++++++++++++++++++++ 8 files changed, 850 insertions(+), 15 deletions(-) create mode 100644 man/man8/tc-dualpi2.8 create mode 100644 tc/q_dualpi2.c
Hi!
I compiled your patch and am seeing the following warnings:
q_dualpi2.c: In function 'dualpi2_parse_opt': q_dualpi2.c:218:37: warning: pointer targets in passing argument 1 of 'get_u32' differ in signedness [-Wpointer-sign] 218 | if (get_u32(&min_qlen_step, *argv, 10)) { | ^~~~~~~~~~~~~~ | | | int32_t * {aka int *} In file included from q_dualpi2.c:39: ../include/utils.h:157:20: note: expected '__u32 *' {aka 'unsigned int *'} but argument is of type 'int32_t *' {aka 'int *'} 157 | int get_u32(__u32 *val, const char *arg, int base); | ~~~~~~~^~~ q_dualpi2.c: At top level: q_dualpi2.c:516:27: warning: initialization of 'int (*)(const struct qdisc_util *, int, char **, struct nlmsghdr *, const char *)' from incompatible pointer type 'int (*)(struct qdisc_util *, int, char **, struct nlmsghdr *, const char *)' [-Wincompatible-pointer-types] 516 | .parse_qopt = dualpi2_parse_opt, | ^~~~~~~~~~~~~~~~~ q_dualpi2.c:516:27: note: (near initialization for 'dualpi2_qdisc_util.parse_qopt') q_dualpi2.c:517:27: warning: initialization of 'int (*)(const struct qdisc_util *, FILE *, struct rtattr *)' from incompatible pointer type 'int (*)(struct qdisc_util *, FILE *, struct rtattr *)' [-Wincompatible-pointer-types] 517 | .print_qopt = dualpi2_print_opt, | ^~~~~~~~~~~~~~~~~ q_dualpi2.c:517:27: note: (near initialization for 'dualpi2_qdisc_util.print_qopt') q_dualpi2.c:518:27: warning: initialization of 'int (*)(const struct qdisc_util *, FILE *, struct rtattr *)' from incompatible pointer type 'int (*)(struct qdisc_util *, FILE *, struct rtattr *)' [-Wincompatible-pointer-types] 518 | .print_xstats = dualpi2_print_xstats, | ^~~~~~~~~~~~~~~~~~~~ q_dualpi2.c:518:27: note: (near initialization for 'dualpi2_qdisc_util.print_xstats')
cheers, Victor
Hi Victor,
Thanks for prompt feedback, I will fix these warning in the next version.
BRs, Chia-Yu