传输大文件时,WSL 网络传输速率会降低。
要重现,您可以尝试上传 100MB 或更大的文件。
例子
从 Windows 主机(Windows 11 系统)传输此文件
04/10/2023 20:54 939,587,072 en-ai-ubi8-apache2-py311.tgz
使用 SCP 到远程系统的测量速度为1714.0 kB/s:
从 WSL 版本 2 开始,在同一主机中,
D:\>wsl -l -v
NAME STATE VERSION
* CentOS Running 2
docker-desktop-data Stopped 2
docker-desktop Stopped 2
来自 WSL 的相同传输一开始以几乎相同的速度测量,但随后传输速率很快下降到37 KB/s!
该问题现已广为人知并在 github 中报告
https://github.com/microsoft/WSL/issues/8171
不用说,这个问题会影响任何处理大文件的软件,典型的例子包括:软件包管理器、docker推/拉无法使用、ftp服务器等。
该问题与数据拆分为网络数据包的方式有关。不同的网络有不同的MTU(最大传输单元)。
对于不同的网络,有不同的MTU大小: 以太网:1500字节;PPPoE:1492字节;ATM(AAL5):9180字节;FDDI:4470字节;PPP:576字节等
Linux系统中的以太网适配器看到一个虚拟以太网适配器,由Windows管理。
虽然我忽略了细节,但我怀疑不同网络堆栈(Linux 中的 TCP/IP 堆栈、Windows 中的 TCP/IP 堆栈和卡适配器)的数据碎片存在一些相关问题。
解决方法包括在虚拟适配器中启用 LSO,这基本上允许将更大的数据帧发送到下层(网卡设备驱动程序,如果是“真实”适配器,但如果是虚拟适配器,数据首先发送到Hyper-V 虚拟交换机然后到物理适配器...)。
报告了一些错误。以下是一些链接:
WSL2 上的网络速度非常慢 · 问题 #4901
网络速度非常慢 #8171 - microsoft/WSL
WSL 2 中的网速较低
WSL 2 — 如何修复下载速度 | 克里斯·汤森德
ETC。
请注意,Windows 11 不显示虚拟适配器,因此我必须使用 Powershell 作为管理员应用解决方法:
[据我所知,我的设置不使用交换机嵌入式组合 LBFO/SET 技术]