VPN 上文件访问变慢时,人们容易把多通道设置当成解决办法,而这项设置往往没有可发挥的条件。单个不支持 RSS 的虚拟适配器无法把流量分散到多条通道,无论复选框怎么写。真正重要的是 SMB 在两端看到的能力,而不是笔记本物理网卡的规格。下面的梳理从活动会话出发,再回溯到适配器布局。

从会话查起,而不是从网卡规格查起

先确认该会话究竟能不能使用多通道。该功能属于 SMB3,因此与设备或旧服务器协商出的更早方言会直接排除它,适配器问题也就无从谈起。然后确认客户端实际连到了哪台服务器,因为名字解析到的节点若不是你正在检查的那台,就会给出有说服力却无关的结果。

Get-SmbConnection
Get-SmbClientConfiguration | Select-Object EnableMultichannel
Get-SmbClientNetworkInterface

第一条命令在一行里给出方言、服务器和共享。第二条显示客户端是否启用了该功能,第三条列出 SMB 已知的接口及其报告的能力。一个既不报 RSS 也不报 RDMA 的虚拟适配器,说明了这个布局最多能变成什么。

如果方言不是 SMB3,先停下来把这个问题解决。否则后续每条命令描述的都将是无法生效的功能。

如实读取客户端接口

SMB 并不关心默认路由由哪块适配器承载;它会枚举可用的接口并逐个评估。一台同时有 Wi-Fi、以太网和 VPN 适配器的笔记本可能呈现三个接口,而其中只有一个能到达你正在对话的服务器。其余只是候选,不是通道。

要看 RSS 和 RDMA 两列,而不是链路速度列。虚拟适配器常常报告很高的标称速度却不具备 RSS,而标称速度描述的是虚拟链路,不是经过互联网的路径。这两个数字都不能说明会话用了几条通道。

如果适配器不显示 RSS 能力,受支持的修复属于 VPN 厂商的驱动,而不是物理网卡的高级属性。在硬件适配器上勾选 RSS 不会改变虚拟适配器向 SMB 呈现的任何内容。

把已选通道与探测到的候选分开

连接列表是最容易被误读的部分。包含未选候选时,输出会显示 SMB 考虑过的一切,那并不是正在承载数据的通道集合。要针对你关心的特定客户端与服务器接口对,读取选中标志和通道数。

Get-SmbMultichannelConnection -ServerName files.lab.example -IncludeNotSelected
Get-SmbMultichannelConnection -ServerName files.lab.example | Format-List *

换成你自己的服务器名。第二种形式会打印已选连接的属性,包括接口索引和当前通道数,这个数字才是关键。同一块适配器上探测到的多个地址仍然只是一块适配器。

探测到的地址也可能因 VPN 策略而不可用:它可能是隧道不承载的本地子网地址,也可能是服务器只在另一网络提供的地址。SMB 把它列为候选,是因为接口存在,而不是因为路径可用。

VPN 适配器对布局做了什么

有三种布局值得区分,因为只有两种能产生不止一条通道。单块不支持 RSS 的适配器给出一条通道。单块支持 RSS 的适配器可以把连接分散到多个核心。多块可用适配器即使没有 RSS 也能产生多条通道,而人们认定 RSS 是必需条件时,忘掉的正是这种配置。

Layout SMB seesChannels possible
One adapter, no RSSOne
One adapter with RSSSeveral, spread across cores
Two or more usable adaptersSeveral, one path per adapter
Several adapters behind one tunnelSeveral, one shared bottleneck

最后一行才是 VPN 场景下要紧的。全部进入同一条加密隧道的通道共享隧道吞吐、网关 CPU 和 WAN 链路。在那里加通道只是重新分配工作,并不增加容量,测量会显示这一点。

对比期间请保持签名和加密开启,因为关掉它们会改变你正在测量的对象。依赖关闭某项安全设置才成立的性能结果,不是可以落地的结果。

测量真正慢的那个工作负载

动手之前先给工作负载命名:一次大的顺序复制、同一目录下的大量小文件,或者频繁开闭句柄的应用。存在真正独立路径时,多通道对第一种情况有帮助;对第三种几乎无用,因为那里的代价是相互依赖的往返,而不是带宽。

用当前布局取一次基线,只改一处,再在相同文件集合同一时间复测。把已选路径数记在数值旁边,好让后来的读者判断这次改动改变的是布局还是只有负载。

如果通道没变,性能问题就在别处:隧道的加密开销、路径时延,或者服务器自身的磁盘和 CPU。给一台已经不缺适配器的笔记本再加一块之前,这些都值得先测。

相关文章