Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TCP Prague Implementation for Kernel v6 #22

Open
TillMueller opened this issue Jul 2, 2023 · 5 comments
Open

TCP Prague Implementation for Kernel v6 #22

TillMueller opened this issue Jul 2, 2023 · 5 comments

Comments

@TillMueller
Copy link

I'd like to include TCP Prague as a candidate in a list of TCP optimizations I am working on performance comparisons for. My current testing setup is based on the somewhat recent kernel version 6.3, but haven't found a good way to get TCP Prague enabled for that kernel version.
Due to the way this repo is set up applying the commits on top of the Linux kernel in this repo doesn't really work. Is there an existing effort to get TCP Prague into kernel version 6?

Thank you in advance!

Till

@fernandodiacenco
Copy link

I'm also interested in this.

I'm trying my best to compile tcp-prague and dualpi2 on a NanoPi R5S to test it in real world conditions but I'm getting nowhere, Tried Stock Arm Debian 11 and Debian 12.

The only time it worked was when installing the .deb files on a virtual machine amd64 Debian 12, not even stock Debian 11 accepts the .deb files (It complains about zstd compression used in the .debs).

@minuscat
Copy link
Collaborator

minuscat commented Jul 20, 2024

I would like to share with you that the first v6 kernel is available: https://github.com/minuscat/l4steam-6.6.y
The pre-built kernel can be found: https://github.com/minuscat/l4steam-6.6.y/releases/download/testing-build/l4s-testing.zip
The kernel is patched on top of v6.6.40 LTS kernel now, and we will further move to newer v6.6.y kernel
At the meantime, we are also preparing v6.1.y kernel.

That branch will soon move back to L4STeam.

@warlock20
Copy link

I would like to share with you that the first v6 kernel is available: https://github.com/minuscat/l4steam-6.6.y The pre-built kernel can be found: https://github.com/minuscat/l4steam-6.6.y/releases/download/testing-build/l4s-testing.zip The kernel is patched on top of v6.6.40 LTS kernel now, and we will further move to newer v6.6.y kernel At the meantime, we are also preparing v6.1.y kernel.

That branch will soon move back to L4STeam.

Thanks for the new version.

One request. While moving the branch to the L4STeam, it would be great if you can publish the pre-built kernel version with eBPF support (i.e. enable BTF info during kernel build). Thank you

@aidanharris
Copy link

With recent changes to dualpi2 I'm seeing a compiler warning when building with modern versions of Gcc (14) and Clang (18). This warning becomes fatal when compiling with CONFIG_WERROR=y. I was able to silence it but I'm not sure what the correct fix is:

diff --git a/net/sched/sch_dualpi2.c b/net/sched/sch_dualpi2.c
index 69a26e3d22c0..3f19f122ad68 100644
--- a/net/sched/sch_dualpi2.c
+++ b/net/sched/sch_dualpi2.c
@@ -673,6 +673,11 @@ static const struct netlink_range_validation dualpi2_wc_range = {
 	.max = MAX_WC,
 };
 
+#ifndef CONFIG_CC_IS_CLANG
+#pragma GCC diagnostic ignored "-Wdiscarded-qualifiers"
+#else
+#pragma GCC diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers"
+#endif
 static const struct nla_policy dualpi2_policy[TCA_DUALPI2_MAX + 1] = {
 	[TCA_DUALPI2_LIMIT]		=
 		NLA_POLICY_FULL_RANGE(NLA_U32, &dualpi2_nonzero_range),

@minuscat
Copy link
Collaborator

@aidanharris This was because the const keyword there, and they are removed since my last push.
I verified this on a fresh compilation in Ubuntu 24.04, in where gcc14 is the default compiler.

static struct netlink_range_validation dualpi2_nonzero_range = {
.min = 1,
};
static struct netlink_range_validation dualpi2_alpha_beta_range = {
.min = 1,
.max = ALPHA_BETA_MAX,
};
static struct netlink_range_validation dualpi2_wc_range = {
.min = 0,
.max = MAX_WC,
};

Note that this v6 branch will be constantly "rebased" to retain the same patches submitted for Linux upstreaming.
Therefore, please make sure to fetch/pull before local compilation, or you can get the pre-build in https://github.com/L4STeam/linux/releases/tag/l4steam-6.6.y-build

If the problem persists, please share the complete compilation message.

minuscat pushed a commit that referenced this issue Dec 26, 2024
[ Upstream commit 9bde7c3b3ad0e1f39d6df93dd1c9caf63e19e50f ]

This updates iso_sock_accept to use nested locking for the parent
socket, to avoid lockdep warnings caused because the parent and
child sockets are locked by the same thread:

[   41.585683] ============================================
[   41.585688] WARNING: possible recursive locking detected
[   41.585694] 6.12.0-rc6+ #22 Not tainted
[   41.585701] --------------------------------------------
[   41.585705] iso-tester/3139 is trying to acquire lock:
[   41.585711] ffff988b29530a58 (sk_lock-AF_BLUETOOTH)
               at: bt_accept_dequeue+0xe3/0x280 [bluetooth]
[   41.585905]
               but task is already holding lock:
[   41.585909] ffff988b29533a58 (sk_lock-AF_BLUETOOTH)
               at: iso_sock_accept+0x61/0x2d0 [bluetooth]
[   41.586064]
               other info that might help us debug this:
[   41.586069]  Possible unsafe locking scenario:

[   41.586072]        CPU0
[   41.586076]        ----
[   41.586079]   lock(sk_lock-AF_BLUETOOTH);
[   41.586086]   lock(sk_lock-AF_BLUETOOTH);
[   41.586093]
                *** DEADLOCK ***

[   41.586097]  May be due to missing lock nesting notation

[   41.586101] 1 lock held by iso-tester/3139:
[   41.586107]  #0: ffff988b29533a58 (sk_lock-AF_BLUETOOTH)
                at: iso_sock_accept+0x61/0x2d0 [bluetooth]

Fixes: ccf74f2 ("Bluetooth: Add BTPROTO_ISO socket type")
Signed-off-by: Iulia Tanasescu <[email protected]>
Signed-off-by: Luiz Augusto von Dentz <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants