1674 字
4 分钟

调参喽~

2026-09-07
2026-09-11

一台机器三种活#

这台台式机常年同时干三件事

MC/TShock 群服挂着,给朋友玩,走的是共享校园网出口,高峰期排队丢包是常态 llama-server 给 QQ bot 跑视觉模型,一个 Qwen 9B 的权重文件就好几个 G,常驻内存,一崩就是几个 G 的快照 桌面是我自己天天用的,打游戏写作业,最怕的就是在交互的瞬间被内核某些后台动作卡一下

三种负载对系统参数的需求不一样,有的要吞吐,有的要延迟稳,有的怕垃圾堆积 这次把网络栈、内存策略、日志管控按场景过了一遍,记一下

服务器类:网络栈给长连接让路#

群服的问题很典型:长连接多、上传持续、出口是共享链路 默认的 cubic 是丢包驱动的算法,缓冲区一满就开始排队,延迟涨上去还降不下来,就是常说的 bufferbloat BBR 走的是另一条路,不靠丢包猜,直接建模链路的带宽和延迟,IETF 的草案里写得很清楚,对浅缓冲、随机丢包的瓶颈吞吐高不少,对深缓冲也不会把队列塞满

内核 7.x 已经带了 tcp_bbr3 模块,不用自己编译,Google 的 v3 release 说明就是给主线内核用的

sudo modprobe tcp_bbr3
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr3

为什么选 v3 不是 v1#

v1 太激进,持续探测带宽,无视丢包信号,跟 cubic 混在一条链路上的时候不太讲公平 v3 改了,会响应丢包和 ECN,探测节奏也拉长,共存友好很多 宿舍这种跟一堆人共享的出口,选温和的那个

BBR 要配 fq 队列#

BBR 是按 pacing 发包的算法,精确限速要靠队列把包匀速放出去 光换算法不换队列,pacing 会退回软件定时器,精度差一截

sudo sysctl -w net.core.default_qdisc=fq

fq 还有附带好处,按流排队,一条下载流不会堵住后面所有流

顺手的事#

sudo sysctl -w net.ipv4.tcp_slow_start_after_idle=0
sudo sysctl -w net.ipv4.tcp_fastopen=3

tcp_slow_start_after_idle=0 是给群服这种有空闲期的连接准备的,默认空闲一阵子再发数据会重置慢启动,又得从低速率慢慢爬,关了之后恢复发送直接接着上次的速率走 tcp_fastopen=3 开 TCP 快开,客户端和服务器都启用,重复访问握手省一趟 RTT

坑>无线网卡换不了 fq#

执行的时候 tc qdisc replace dev wlp6s0 root fq 报 Operation not supported (-95) 查了才知道无线接口的 root qdisc 归 mac80211 驱动管,显示 noqueue 是正常态,用户态换不了 正确姿势是只设全局 net.core.default_qdisc=fq,接口重建的时候自动挂上,实测之后 wlp6s0 自己就显示 fq 了

同理热点那张 MT7921U 在 AP 模式下连关省电都报 -95,AP 固件要持续发 beacon 本来也睡不了,显示 on 是摆设,不管

持久化#

重启不丢要写三个文件,模块加载一个、sysctl 参数一个、网卡省电一个

/etc/modules-load.d/bbr.conf
tcp_bbr3
/etc/sysctl.d/99-bbr.conf
net.ipv4.tcp_congestion_control=bbr3
net.core.default_qdisc=fq
net.ipv4.tcp_slow_start_after_idle=0
net.ipv4.tcp_fastopen=3
/etc/NetworkManager/conf.d/wifi-powersave.conf
[connection]
wifi.powersave=2

写完 systemctl restart systemd-sysctl 模拟一遍开机应用,status 0,四参数原样,链路是通的

桌面#

翻内核参数的时候发现透明大页一直开在 always

[always] madvise never

always 的意思是内核每次要新内存页都尝试直接分配 2MB 大页 听着是好事,大页能省 TLB 开销,但代价是分配大页经常要先压缩整理物理内存,这个动作是同步的 桌面程序访问大多碎片化,大页根本用不上,白挨整理开销

kernel 文档自己都写,能从大页获益的应用应该对关键 mmap 区域主动 madvise(MADV_HUGEPAGE)

madvise 模式就是这个意思,只有程序自己喊要才给

echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo madvise | sudo tee /sys/kernel/mm/transparent_hugepage/defrag

重启会丢,走内核参数持久化,改 grub:

sudo cp /etc/default/grub /etc/default/grub.bak

动 grub 之前先 cp 了一份备份(其实是挂了还能回来,虽然挂了不备份也可以救回来就是了)

打开 vim 自己在 GRUB_CMDLINE_LINUX_DEFAULT 末尾敲上去(transparent_hugepage=madvise 和 transparent_hugepage_defrag=madvise)

保存就行

sudo vim /etc/default/grub
sudo grub-mkconfig -o /boot/grub/grub.cfg

坑:defrag 那个参数内核根本不认

重启翻 dmesg 才发现的

Unknown kernel command line parameters "transparent_hugepage_defrag=madvise", will be passed to user space

kernel 文档里列的启动参数只有 transparent_hugepage=(还有个按尺寸写的 thp_anon=),defrag 只给 sysfs 接口,没有对应的启动参数

于是 enabled 持久化成功了,defrag 每次开机都回到默认

always defer [defer+madvise] madvise never

真想让 defrag 也持久,得开机后往 sysfs 里写(systemd 的 oneshot,或者 tmpfiles 规则),参数这条路走不通

差别也没想象中大,两个档都只作用于声明了 MADV_HUGEPAGE 的区域,区别是 defer+madvise 连同步压缩也一起做,madvise 只做直接回收

桌面另一个漏网点是 WiFi 省电,插着电的台式机根本不需要网卡周期性打盹,省电模式会在交互流量上偶尔加延迟

sudo iw dev wlp6s0 set power_save off

AI 服务类#

llama-server 这种推理服务有两个属性很烦人

一是权重文件好几个 G,常驻内存,THP 改 madvise 对它是好事,想要大页自己 madvise,不想要也没人天天惦记着合并它的内存

二是它一崩,内存快照大得吓人 某天翻 /var/lib/systemd/coredump 看到个 1.1G 的块头,就是 llama-server 前一天晚上崩的 进程多大 core 就多大,系统默认还不限大小,等于每次大程序崩溃都是 SSD 抗的

给 coredump 上个尺寸锁,coredump.conf(5) 里的 ExternalSizeMax:

/etc/systemd/coredump.conf
[Coredump]
ExternalSizeMax=256M

超过 256M 的 core 不落盘,只把崩溃摘要记进 journal,程序名、信号、调用栈都在,真想深挖再临时放开重崩一次

journald 同样没上限,默认按磁盘 10% 封顶,我这盘能涨到 95G,现在 3.3G 是自然轮转的结果 journald.conf(5) 里设个硬顶:

/etc/systemd/journald.conf
[Journal]
SystemMaxUse=2G

量不小,七天 95 万行,按来源排一下

journalctl --since "7 days ago" --no-pager -o short | grep -oP 'archlinux \K[^\[:]+' | sort | uniq -c | sort -rn | head
677733 sudo
169098 org_kde_powerdevil
36072 plasmashell
14382 dotnet

sudo 占七成,是后来才加的那个热点监控脚本,两秒一次轮询,一天十来万行都出在它身上感觉有点石就是了,虽然后来优化了

其余是桌面常驻组件和后台服务自己在写

重启 journald 自动收缩,3.3G 掉到 1.9G,以后超了自动丢最老的

最终改动#

net.ipv4.tcp_congestion_control = bbr3
net.core.default_qdisc = fq
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_fastopen = 3
iw dev wlp6s0 get power_save = off
transparent_hugepage = [madvise]
coredump 目录 = 0 文件
journal 占用 = 1.9G

调度器、swap、挂载参数那些也查过,都是对的,不用动,能动的就上面这些 服务器要吞吐,桌面要稳,AI,各取所需

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

调参喽~
https://text.lilystar.cn/posts/sys-goooooooooood/
作者
Lily
发布于
2026-09-07
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录

0:00 0:00