fix(rockchip): default to CUBIC congestion control, not Reno - #10315
Conversation
The four rockchip64 and rockchip-rk3588 kernel configs pin CONFIG_DEFAULT_RENO=y, so kernels built from them default to TCP Reno rather than CUBIC, which has been the kernel default since 2.6.19 and is what every mainstream distribution ships. This looks like config-regeneration drift rather than a decision. linux-rockchip64-current.config was created with CONFIG_DEFAULT_CUBIC=y in 150ac0c (2019-11-19); fea2ecb (2020-04-27, "WIP: Merge kernel features from upstream") flipped it to Reno in 2 of that commit's 13 config files without touching CONFIG_TCP_CONG_CUBIC or mentioning networking in its subject. linux-rockchip-rk3588-*.config was branched from that lineage in 48e45d0 (2023-01-01) and has never had CONFIG_DEFAULT_CUBIC=y. Nothing in the tracker or forum argues for Reno; issue armbian#609 only asked for BBR, which is why CONFIG_TCP_CONG_BBR=m. The mechanism is Kconfig's fallback. In net/ipv4/Kconfig the choice reads: choice prompt "Default TCP congestion control" default DEFAULT_CUBIC config DEFAULT_CUBIC bool "Cubic" if TCP_CONG_CUBIC=y config DEFAULT_RENO bool "Reno" endchoice DEFAULT_RENO is the only unconditional entry, so any regeneration where CUBIC is not =y when the choice resolves collapses to Reno, and olddefconfig then preserves that answer indefinitely. Reno is not broken, but it recovers linearly after loss and cannot tell congestion from reordering, so it underperforms on high bandwidth-delay paths and on wireless links. CUBIC subsumes it: its Reno-friendly region (RFC 9438) tracks Reno's window and uses max(W_cubic, W_est), so where Reno would be faster CUBIC matches it. Resolving every config in config/kernel/ through the kernel's own Kconfig parser puts 97 of them on cubic already and 12 on reno, plus two sm8550 configs that deliberately select bbr. This change covers the four rockchip configs among those 12. The other reno configs are left alone: four meson64 and linux-virtual-current carry the same CONFIG_DEFAULT_RENO=y line and want their maintainers' call, while the three mvebu64 configs reach reno by a different route -- they set CONFIG_TCP_CONG_CUBIC=m, which makes DEFAULT_CUBIC unselectable -- and fixing those means building cubic in, a larger change. Note that deleting the CONFIG_DEFAULT_RENO=y line alone is not sufficient: linux-rockchip-rk3588-edge.config also carries "# CONFIG_DEFAULT_CUBIC is not set", which leaves Reno as the only selectable entry and survives olddefconfig. Verified with scripts/kconfig/conf --olddefconfig against a 6.18 arm64 Kconfig tree: all four resolve to CONFIG_DEFAULT_CUBIC=y and CONFIG_DEFAULT_TCP_CONG="cubic" with no CONFIG_DEFAULT_RENO, where the unpatched configs reproduce CONFIG_DEFAULT_RENO=y. Not boot-tested. linux-rockchip-rk3588-current.config is a symlink to the -edge config and is covered by that file's change. Signed-off-by: Yi Ding <yi.s.ding@gmail.com> Assisted-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
📝 WalkthroughWalkthroughThe Rockchip RK3588 Edge and Rockchip64 kernel configurations now select CUBIC instead of Reno as the default TCP congestion-control algorithm. ChangesRockchip TCP congestion-control defaults
Estimated code review effort: 1 (Trivial) | ~5 minutes Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@config/kernel/linux-rockchip-rk3588-edge.config`:
- Around line 1205-1206: Replace the full generated kernel configuration in
linux-rockchip-rk3588-edge.config with a minimal overlay containing
CONFIG_DEFAULT_CUBIC=y and CONFIG_DEFAULT_TCP_CONG="cubic"; retain only
necessary # CONFIG_*=m exclusions for TCP congestion modules that must not
become built-in defaults.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 86b9bf5a-963e-44fe-97dd-34ba028a1eb2
📒 Files selected for processing (4)
config/kernel/linux-rockchip-rk3588-edge.configconfig/kernel/linux-rockchip64-bleedingedge.configconfig/kernel/linux-rockchip64-current.configconfig/kernel/linux-rockchip64-edge.config
|
have you checked kernel configs of other families by chance? |
Yes, 97 on Cubic right now vs. 12 including the rockchip ones on Reno and 2 on BBR: https://github.com/yisding/rock-5b-ysp/blob/81e832e6d01f1a3567116a4bca93a0e77a99507f/findings/2026-08-01-armbian-rockchip64-defaults-tcp-reno.md |
|
✅ This PR has been reviewed and approved — all set for merge! |
Description
Switch Rockchip kernels to CUBIC TCP congestion kernel code which is the default for mainline and pretty much all distros.
How Has This Been Tested?
Checklist:
Summary by CodeRabbit