文章

Windows 传电影到树莓派只有 2MB/s:从硬件到芯片的完整排查实录

一、问题背景

用户反映:Windows 电脑向树莓派传输电影时,无论使用 SMB 还是 SFTP,速度都只有约 2 MB/s。要求排查根本原因。

  1. 一、问题背景
  2. 二、排查思路总览
  3. 三、Step 1:树莓派硬件信息采集
  4. 四、Step 2:网络链路排查
  5. 五、Step 3:存储性能排查
  6. 六、Step 4:实际传输速度测试(上传 vs 下载)
    1. 4.1 下载测试(树莓派 → Windows)
    2. 4.2 上传测试(Windows → 树莓派)
    3. 4.3 关键发现
  7. 七、Step 5:网络接口深度分析
    1. 5.1 网卡统计
    2. 5.2 分析
  8. 八、Step 6:Windows 端信息采集
    1. 6.1 网卡信息
    2. 6.2 WiFi 详情
    3. 6.3 关键发现
  9. 九、Step 7:纯 TCP 隔离测试
    1. 9.1 测试设计
    2. 9.2 代码
    3. 9.3 测试结果
    4. 9.4 结论
  10. 十、Step 8:公网测速交叉验证
    1. 交叉对比
    2. 关键推理
  11. 十一、Step 9:树莓派端优化尝试
    1. 9.1 优化前状态
    2. 9.2 执行的优化
    3. 9.3 优化后状态
    4. 9.4 优化后复测
    5. 9.5 结论
  12. 十二、Step 10:芯片溯源与社区验证
    1. 10.1 硬件对应关系
    2. 10.2 社区反馈
  13. 十三、最终结论
    1. 根因锁定
    2. 定量分析
    3. 问题定性
  14. 十四、解决方案
    1. 方案一:PCIe AX210(最佳)
    2. 方案二:USB MT7921AU(次选)
    3. 方案三:USB 转千兆网线(最便宜)
  15. 十五、总结

二、排查思路总览

排查遵循”从硬件到软件、从底层到上层”的原则:

  1. 采集树莓派硬件信息(CPU、内存、存储、网卡)
  2. 排除存储瓶颈
  3. 测试实际传输速度(上传 vs 下载)
  4. 分析网络接口状态
  5. 采集 Windows 端信息
  6. 纯 TCP 隔离测试(排除协议层干扰)
  7. 公网测速交叉验证
  8. 优化尝试与效果验证
  9. 锁定根因并给出方案

三、Step 1:树莓派硬件信息采集

输入:SSH 登录树莓派,执行诊断脚本

1
2
3
4
5
uname -a
cat /proc/cpuinfo | grep -i 'model name\|hardware\|revision' | head -5
free -h
df -h
ip -s link

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Linux raspberrypi 6.12.20+rpt-rpi-2712 #1 SMP PREEMPT Debian 1:6.12.20-1+rpt1~bpo12+1 (2025-03-19) aarch64 GNU/Linux

CPU revision    : 1
CPU revision    : 1
CPU revision    : 1
CPU revision    : 1
Revision        : d04170

Mem: 7.9Gi total, 1.1Gi used, load average: 0.13

/dev/nvme0n1p2  235G  195G   28G  88% /

3: end0: mtu 1500
    RX: bytes 121034015924 packets 120640845 errors 0 dropped 3376275 missed 0 mcast 7400714
    TX: bytes 97941240864 packets 23906901 errors 0 dropped 230 carrier 0 collsns 0

关键发现

  • 树莓派 5(8GB 版),性能强劲
  • 网卡 end0 是千兆有线
  • ⚠️ RX dropped: 3,376,275(接收端大量丢包)
  • 存储为 NVMe SSD(长城 GW3300 256GB)

四、Step 2:网络链路排查

输入

1
2
ethtool end0
ping -n 3 192.168.1.7

输出

1
2
3
4
5
6
7
Speed: 1000Mb/s
Duplex: Full
Link detected: yes

Reply from 192.168.1.7: bytes=32 time=2ms TTL=64
Reply from 192.168.1.7: bytes=32 time=2ms TTL=64
Reply from 192.168.1.7: bytes=32 time=2ms TTL=64

结论:树莓派端网络协商正常,延迟仅 2ms,物理链路无问题。


五、Step 3:存储性能排查

输入:测试目标目录 /share 的写入速度

1
dd if=/dev/zero of=/share/dd_test bs=1M count=256 oflag=direct

输出

1
268435456 bytes (268 MB, 256 MiB) copied, 0.724443 s, 371 MB/s

结论:NVMe SSD 写入 371 MB/s,存储完全不是瓶颈。


六、Step 4:实际传输速度测试(上传 vs 下载)

4.1 下载测试(树莓派 → Windows)

输入

1
2
3
4
5
# 在树莓派上生成 1GB 测试文件
dd if=/dev/urandom of=/home/pi/test_1gb.bin bs=1M count=1024

# Windows 端下载
scp pi@192.168.1.7:/home/pi/test_1gb.bin .

输出

1
real    0m20.457s

速度:1024 MB / 20.457s = 50 MB/s

4.2 上传测试(Windows → 树莓派)

输入

1
2
3
# Windows 端生成 100MB 文件并上传
dd if=/dev/urandom of=test_upload_local.bin bs=1M count=100
scp test_upload_local.bin pi@192.168.1.7:/home/pi/

输出

1
real    0m21.252s

速度:100 MB / 21.252s = 4.7 MB/s

4.3 关键发现

方向速度结论
下载50 MB/s正常
上传4.7 MB/s慢 10 倍

问题锁定在”上传方向”


七、Step 5:网络接口深度分析

5.1 网卡统计

输入

1
ip -s link show end0

输出

1
2
RX: bytes 121034015924 packets 120640845 errors 0 dropped 3376275 missed 0 mcast 7400714
TX: bytes 97941240864 packets 23906901 errors 0 dropped 230 carrier 0 collsns 0

5.2 分析

RX dropped 高达 3,376,275 个包,丢包率约 2.8%。初步怀疑树莓派接收缓冲区不足。


八、Step 6:Windows 端信息采集

6.1 网卡信息

输入

1
Get-NetAdapter | Where-Object { $_.Status -eq 'Up' } | Select Name, InterfaceDescription, LinkSpeed

输出

1
2
3
Name  InterfaceDescription                        LinkSpeed
----  --------------------                        ---------
WLAN  Realtek 8832AU Wireless LAN WiFi 6 USB NIC 1.2 Gbps

6.2 WiFi 详情

输入

1
netsh wlan show interfaces

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
名称                   : WLAN
物理地址               : d4:84:09:3b:fc:62
状态                   : 已连接
SSID                   : CMCC-bonjour
BSSID                  : 12:9f:47:c2:3a:ab
网络类型               : 结构
无线标准               : 802.11ax
身份验证               : WPA2 - 个人
密码                   : CCMP
信道                   : 44
接收速率(Mbps)         : 1201
传输速率 (Mbps)        : 1201
信号                   : 76%
配置文件               : CMCC-bonjour

6.3 关键发现

  • Windows 没有有线网卡,只有 WiFi
  • WiFi 芯片:Realtek 8832AU
  • 协商速率:1201 Mbps(5GHz,WiFi 6)
  • 信号强度:76%

九、Step 7:纯 TCP 隔离测试

为了排除 SMB/SCP/SFTP 等协议层的干扰,编写纯 TCP 程序进行裸测。

9.1 测试设计

  • Server(树莓派):接收数据并丢弃,不做任何处理
  • Client(Windows):发送 300MB 数据,计算实际吞吐

9.2 代码

tcp_server.py(树莓派端):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import socket, time

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('0.0.0.0', 5202))
s.listen(1)
conn, addr = s.accept()
start = time.time()
total = 0
while True:
    data = conn.recv(1048576)
    if not data:
        break
    total += len(data)
elapsed = time.time() - start
print(f"Received {total/(1024*1024):.1f} MB in {elapsed:.1f}s")
conn.close()

tcp_client.py(Windows 端):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import socket, time

HOST = '192.168.1.7'
PORT = 5202
DATA = b'0' * 1048576

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
start = time.time()
total_sent = 0
target = 300 * 1048576

while total_sent < target:
    sent = s.send(DATA)
    total_sent += sent

elapsed = time.time() - start
speed = total_sent / (1024*1024) / elapsed
print(f"Sent {total_sent/(1024*1024):.1f} MB in {elapsed:.1f}s = {speed:.1f} MB/s")
s.close()

9.3 测试结果

输出

1
Sent 300.0 MB in 64.3s = 4.7 MB/s

9.4 结论

  • 纯 TCP(零协议开销、零加密、零磁盘 I/O)上传也只有 4.7 MB/s
  • 与 scp 的 4.7 MB/s、SMB 感知的 2 MB/s 处于同一水平
  • 100% 证明:瓶颈不在应用层,而在网络/链路层

十、Step 8:公网测速交叉验证

用户提供了腾讯电脑管家的公网测速截图:

指标数值
下载速度59.8 MB/s
上传速度4.9 MB/s
运营商中国移动
宽带等级300~500M

交叉对比

场景上传速度
局域网 → 树莓派(scp)4.7 MB/s
局域网 → 树莓派(纯 TCP)4.7 MB/s
公网测速(电脑管家)4.9 MB/s

三者几乎完全一致。

关键推理

  • 如果是运营商限制上行带宽,只应影响公网,不影响局域网
  • 局域网内也跑不出更高的速度
  • 唯一的解释:Windows WiFi 网卡的发送端天花板就是约 40 Mbps(5 MB/s)
  • 无论往哪传(公网还是局域网),都被这个硬件天花板锁死

十一、Step 9:树莓派端优化尝试

虽然证据已指向 Windows 端,但仍对树莓派进行了全面优化,以彻底排除接收端瓶颈。

9.1 优化前状态

1
2
RX ring buffer: 512
TX ring buffer: 512

9.2 执行的优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 1. 扩大网卡 ring buffer
sudo ethtool -G end0 rx 4096 tx 4096

# 2. 优化内核网络参数
sudo bash -c 'cat >> /etc/sysctl.conf << "EOF"
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
net.core.netdev_max_backlog = 65536
EOF'
sudo sysctl -p

# 3. 优化 Samba 配置
# 在 /etc/samba/smb.conf [global] 段添加:
#   socket options = TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072
#   min protocol = SMB2
#   max protocol = SMB3
#   read raw = yes
#   write raw = yes
#   use sendfile = yes

sudo systemctl restart smbd

9.3 优化后状态

1
2
3
4
RX ring buffer: 4096
TX ring buffer: 4096
SMB protocol: SMB3
socket options: TCP_NODELAY IPTOS_LOWDELAY SO_RCVBUF=131072 SO_SNDBUF=131072

9.4 优化后复测

1
scp test_upload_local.bin pi@192.168.1.7:/home/pi/

输出

1
real    0m21.733s

速度:100 MB / 21.733s = 4.6 MB/s

9.5 结论

零改善。 树莓派端已被彻底排除。


十二、Step 10:芯片溯源与社区验证

10.1 硬件对应关系

用户看到的实际芯片
品牌:水星 MERCURY芯片:Realtek RTL8832AU
型号:UX18H AX1800芯片方案:AX1800(2.4G 574M + 5G 1201M)

10.2 社区反馈

NGA 论坛用户反馈同款芯片:

“5g 链接 1201Mbs,用电信宽带测速,还没原来 intel 自带 8265 无线网卡速度快,只能跑 30 不到的。装了三个版本驱动都一样。”

B站评测结论:

“MT7921AU 这张卡从硬件到发热再到性能都稳赢对位的瑞昱 RTL8832 系列。想要稳定的无线网络,首先远离瑞昱网卡。厂商喜欢用它是因为它便宜,而不是因为它好用。”


十三、最终结论

根因锁定

排查项状态说明
树莓派 CPU❌ 排除Pi 5,负载 0.13
树莓派存储❌ 排除NVMe SSD,371 MB/s
树莓派网卡❌ 排除千兆全双工,已优化到最大
树莓派系统配置❌ 排除优化前后速度不变
协议层❌ 排除裸 TCP 与 scp/SMB 速度一致
运营商限速❌ 排除局域网不应受公网带宽影响
Windows WiFi 网卡锁定上传天花板约 40 Mbps

定量分析

  • WiFi 协商速率:1201 Mbps
  • 实际上传吞吐:37.6 Mbps(4.7 MB/s)
  • 实际 / 协商 = 3.1%(严重不达标)

问题定性

Realtek RTL8832AU 芯片方案的 USB WiFi 6 网卡存在严重的发送端性能缺陷。 这不是水星一家的问题,而是该芯片方案的通病。


十四、解决方案

方案一:PCIe AX210(最佳)

产品价格特点
COMFAST CF-AX210~90-110 元带磁吸延长天线,可吸机箱顶
奋威 Fenvi AX210~110-150 元做工更好,散热佳
SSU AX210~80-120 元性价比最高
  • 上传速度:30-50 MB/s
  • 需要主板有空闲 PCIe 插槽

方案二:USB MT7921AU(次选)

产品价格特点
COMFAST CF-952AX~100 元AX1800,外置天线
EDUP EP-AX1672~80-100 元发热控制好
  • 上传速度:10-15 MB/s
  • 适合只有 USB 口可用的场景

方案三:USB 转千兆网线(最便宜)

产品价格特点
USB3.0 转千兆网卡~30-50 元插网线,速度拉满 110 MB/s

十五、总结

一个看似简单的”传电影慢”问题,经过从硬件到软件、从底层到上层的逐层排查,最终锁定为 Windows 端 Realtek RTL8832AU WiFi 网卡的发送端性能缺陷

核心排查逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
用户反馈慢
    ↓
测试发现:下载 50 MB/s,上传 4.7 MB/s(极度不对称)
    ↓
纯 TCP 裸测:上传仍 4.7 MB/s(排除协议层)
    ↓
树莓派全面优化:上传仍 4.6 MB/s(排除接收端)
    ↓
公网测速:上传 4.9 MB/s(与局域网一致,排除网络环境)
    ↓
锁定 Windows WiFi 网卡:协商 1201 Mbps,实际仅 37.6 Mbps
    ↓
芯片溯源:RTL8832AU,社区证实存在上传性能缺陷

建议:更换为 Intel AX210(PCIe)或 MediaTek MT7921AU(USB)方案的网卡。

本文由作者按照 CC BY 4.0 进行授权