为什么 WSL2 的网络性能在处理大文件时会下降?

为什么 WSL2 的网络性能在处理大文件时会下降?

传输大文件时,WSL 网络传输速率会降低。

为了重现此问题,您可以尝试上传一个 100MB 或更大的文件。

例子

从 Windows Host(Windows 11 系统)传输此文件

04/10/2023  20:54       939,587,072 en-ai-ubi8-apache2-py311.tgz

使用 SCP 到远程系统的测量值为1714.0 kB/秒

在此处输入图片描述

从 WSL 版本 2 开始,在同一主机中,

D:\>wsl -l -v
  NAME                   STATE           VERSION
* CentOS                 Running         2
  docker-desktop-data    Stopped         2
  docker-desktop         Stopped         2

同一次转帐来自 WSL一开始测量的速度几乎相同,但随后传输速率很快降至37KB/秒!

在此处输入图片描述

该问题现已广为人知,并在 github 上报告

https://github.com/microsoft/WSL/issues/8171

不用说,这个问题会影响任何处理大文件的软件,典型的例子包括:软件包管理器、docker push/pull 无法使用、ftp 服务器等。

答案1

问题与数据分割成网络数据包的方式有关。不同的网络有不同的 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 — 如何修复下载速度 | 作者:Chris Townsend

ETC。

请注意,Windows 11 不显示虚拟适配器,因此我必须使用 Powershell 以管理员身份应用解决方法:

 PS C:\WINDOWS\system32> Enable-NetAdapterLso -Name vEthernet* -IncludeHidden -IPv4
 PS C:\WINDOWS\system32> Enable-NetAdapterLso -Name vEthernet* -IncludeHidden -IPv6                                           PS 

[据我所知,我的设置不使用交换机嵌入式组合 LBFO/SET 技术]

相关内容