我的博客

分享技术与思想的点滴

RK3568 软路由 + NAS 环境优化完整文档

RK3568 软路由 + NAS 环境优化完整文档

一、系统基础优化

1.1 网络缓冲区优化(/etc/sysctl.conf)

# 编辑 sysctl 配置
vi /etc/sysctl.conf

添加/修改以下参数:

# 大幅增加 TCP 缓冲区
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.core.rmem_default = 131072
net.core.wmem_default = 131072

# TCP 读写缓冲区
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864

# 增大网卡队列
net.core.netdev_max_backlog = 10000

# 开启 TCP 窗口缩放
net.ipv4.tcp_window_scaling = 1

# 拥塞控制算法(已启用 BBR)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# 增大连接跟踪表
net.netfilter.nf_conntrack_max = 262144
net.netfilter.nf_conntrack_tcp_timeout_established = 3600

# 端口范围
net.ipv4.ip_local_port_range = 1024 65535

# 立即生效
sysctl -p

二、网卡硬件优化

2.1 网卡环缓冲区优化

# 查看当前设置
ethtool -g eth0

# 增大 RX/TX 环到最大值
ethtool -G eth0 rx 1024 tx 1024

# 验证
ethtool -g eth0

2.2 硬件 offload 开启

# 查看当前 offload 状态
ethtool -k eth0 | grep -E "tcp-segmentation|generic|gro"

# 开启 offload
ethtool -K eth0 tx on rx on tso on gso on gro on
ethtool -K eth0 tx-udp-segmentation on

# 验证
ethtool -k eth0 | grep -E "tcp-segmentation|generic|gro"

三、中断优化(最关键!)

3.1 查看当前中断分配

# 查看 eth0 中断号
cat /proc/interrupts | grep eth0

# 假设中断号是 28,查看当前亲和性
cat /proc/irq/28/smp_affinity
cat /proc/irq/28/smp_affinity_list

3.2 创建中断平衡服务

# 创建 systemd 服务
cat > /etc/systemd/system/irq-balance.service <<'EOF'
[Unit]
Description=Balance IRQ for eth0
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo f > /proc/irq/28/smp_affinity'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

# 启用服务
systemctl daemon-reload
systemctl enable irq-balance.service
systemctl start irq-balance.service

3.3 安装系统级中断平衡

# 安装 irqbalance(自动平衡中断)
apt install irqbalance -y
systemctl enable irqbalance
systemctl start irqbalance

四、开机自启配置

4.1 编辑 /etc/rc.local

vi /etc/rc.local

确保包含以下内容:

#!/bin/sh -e

# 启动自定义服务(如果有)
bash /etc/custom_service/start_service.sh &

# 开启网卡环缓冲区
/usr/sbin/ethtool -G eth0 rx 1024 tx 1024

# 开启硬件 offload
/usr/sbin/ethtool -K eth0 tx on rx on tso on gso on gro on
/usr/sbin/ethtool -K eth0 tx-udp-segmentation on

exit 0

4.2 确保 rc.local 可执行

chmod +x /etc/rc.local

五、监控脚本

5.1 网络速度监控

cat > /root/watch_speed.sh <<'EOF'
#!/bin/bash
INTERVAL=1
RX_PREV=$(cat /sys/class/net/eth0/statistics/rx_bytes)
TX_PREV=$(cat /sys/class/net/eth0/statistics/tx_bytes)

while true; do
    sleep $INTERVAL
    RX_CURR=$(cat /sys/class/net/eth0/statistics/rx_bytes)
    TX_CURR=$(cat /sys/class/net/eth0/statistics/tx_bytes)

    RX_SPEED=$((($RX_CURR - $RX_PREV) / $INTERVAL / 1024))
    TX_SPEED=$((($TX_CURR - $TX_PREV) / $INTERVAL / 1024))

    echo "$(date +%H:%M:%S) - RX: ${RX_SPEED} KB/s, TX: ${TX_SPEED} KB/s"

    RX_PREV=$RX_CURR
    TX_PREV=$TX_CURR
done
EOF

chmod +x /root/watch_speed.sh

5.2 系统状态检查

cat > /root/check_system.sh <<'EOF'
#!/bin/bash
echo "=== 系统状态检查 ==="
echo

echo "1. CPU 负载"
top -bn1 | head -5
echo

echo "2. 内存使用"
free -h
echo

echo "3. 网络中断分配"
cat /proc/interrupts | grep eth0
echo

echo "4. 网卡 offload 状态"
ethtool -k eth0 | grep -E "tcp-segmentation|generic|gro"
echo

echo "5. 网卡环缓冲区"
ethtool -g eth0 | grep -E "RX:|TX:"
echo

echo "6. 网络缓冲区设置"
sysctl net.core.rmem_max
sysctl net.core.wmem_max
sysctl net.ipv4.tcp_rmem
echo

echo "7. 连接跟踪统计"
conntrack -L 2>/dev/null | wc -l || echo "conntrack not installed"
EOF

chmod +x /root/check_system.sh

六、Windows 客户端优化

6.1 SMB 客户端优化(PowerShell 管理员)

# 禁用带宽节流
Set-SmbClientConfiguration -EnableBandwidthThrottling 0

# 增大缓存
Set-SmbClientConfiguration -FileInfoCacheEntriesMax 128
Set-SmbClientConfiguration -DirectoryCacheEntriesMax 32
Set-SmbClientConfiguration -FileNotFoundCacheEntriesMax 256

# 验证
Get-SmbClientConfiguration | Select EnableBandwidthThrottling, FileInfoCacheEntriesMax

6.2 TCP 自动调优

# 查看当前设置
netsh interface tcp show global

# 设置为正常
netsh interface tcp set global autotuninglevel=normal

6.3 网卡驱动设置

  1. 打开 设备管理器
  2. 找到网卡 → 属性高级
  3. 设置:
    • 接收缓冲区512(或最大值)
    • 发送缓冲区512(或最大值)
    • 巨型帧禁用(如果网络设备不支持)
    • 环保节能禁用

七、重要说明

7.1 关于机械硬盘速度

  • 单盘机械硬盘:80-150MB/s
  • 你看到的 100MB/s 波动是正常的
  • 速度波动是磁头寻道和外圈/内圈速度差异导致的

7.2 关于 CPU 占用

  • 千兆网络下,30-40% CPU 是正常水平
  • 单队列网卡的限制,无法避免
  • 中断平衡后,负载会分散到多核

7.3 需要安装的工具

# 安装必要的监控工具
apt update
apt install -y ethtool net-tools sysstat conntrack irqbalance

八、验证清单

# 重启后验证所有优化是否生效
./root/check_system.sh

# 检查项:
# 1. eth0 中断亲和性应为 f
cat /proc/irq/28/smp_affinity

# 2. offload 应开启
ethtool -k eth0 | grep tcp-segmentation-offload

# 3. 环缓冲区应为 1024
ethtool -g eth0 | grep -E "RX:|TX:"

# 4. sysctl 参数
sysctl net.core.rmem_max

九、最终结论

  • 路由器已优化到极致
  • 网络配置完美
  • Windows 客户端已优化
  • ⚠️ 100MB/s 速度是机械硬盘的正常表现
  • 系统已经达到最佳状态

这份文档包含了所有优化配置,可以直接用于你的 RK3568 软路由!