SMB 直通

Windows Server 包含一个称为 SMB 直通的功能,用来支持使用具有远程直接内存存取 (RDMA) 功能的网络适配器。 具有 RDMA 的网络适配器可以全速运行,且延迟较低,不会影响 CPU 利用率。 对于 Hyper-V 或 Microsoft SQL Server 等工作负载,这让远程文件服务器如同本地存储一样。 SMB 直通在 Windows Server 2012 和将来的迭代中默认自动配置和启用。

使用 SMB 直通时提供:

  • 更高的吞吐量:利用高速网络的完整吞吐量,其中网络适配器以线速度协调大量数据的传输。
  • 低延迟:提供对网络请求的快速响应,使远程文件存储感觉就像是直接连接的块存储。
  • 低 CPU 使用率:在网络上传输数据时,占用较少 CPU 周期,从而为服务器应用程序保留更多空闲能量。

可以在故障转移集群中使用 SMB 直通;然而,对于 SMB 直通而言,这需要确保用于客户端访问的集群网络的强大性。 故障转移集群支持使用多个网络进行客户端访问,同时使用支持 RSS(接收方扩展技术)和 RDMA 功能的网络适配器。

注意

在 Hyper-V 管理操作系统上,使用 SMB 直通来支持 Hyper-V 在 SMB 之上的使用,并在使用 Hyper-V 存储器堆栈的虚拟机上提供存储空间。 然而,支持 RDMA 的网络适配器却不能直接用于 Hyper-V 客户端。 如果将支持 RDMA 的网络适配器连接到虚拟交换机上,则交换机上的虚拟网络适配器将不再支持 RDMA。

要求

SMB 直通要求如下:

  • 一个或多个支持 RDMA 功能的网络适配器
  • 至少两台计算机运行以下一个或多个操作系统:
    • Windows Server 2012 和更高版本。
    • Windows 10 企业版及更高版本。
    • Windows 10 教育版及更高版本。
    • Windows 10 专业工作站版及更高版本
    • Windows 10 专业版 22H2(全新安装,不是从旧版本升级)及更高版本。

注意

Windows 10 和 Windows 11 系列仅限于客户端,不能充当 SMB 直通服务器。

SMB 多通道

SMB 多通道的功能是负责检测网络适配器 RDMA 功能以启用 SMB 直通。 如果未配置 SMB 多通道,则 SMB 使用常规 TCP/IP 与支持 RDMA 功能的网络适配器(所有网络适配器均提供 TCP/IP 堆栈和新的 RDMA 堆栈)。

SMB 使用 SMB 多通道来检测网络适配器是否具有 RDMA 功能,然后为该单一会话创建多重 RDMA 连接(每个接口有两个)。 这允许 SMB 使用支持 RDMA-功能的网络适配器,从而提供高吞吐量、低延迟时间和较少 CPU 使用率这些功能。 此外,在使用多重 RDMA 接口时,它还具有容错功能。

从 Windows Server 2016 开始,可以使用 Switch Embedded Teaming (SET) 对支持 RDMA 的网络适配器进行组合。 至少创建一个 RDMA 网络连接,不再使用 TCP/IP 连接(用于原始协议协商)。 然而,在 RDMA 网络连接崩溃时,系统保持 TCP/IP 连接。

禁用 SMB 多通道后也会禁用 SMB 直通。 由于 SMB 多通道用于检测网络适配器的功能,并确定网络适配器是否支持 RDMA,禁用 SMB 多通道之后,客户端将无法使用 SMB 直通。

SMB 加密

从 Windows Server 2022 和 Windows 11 开始,SMB Direct 现支持加密。 以前,启用 SMB 加密会禁用直接数据放置,从而使 RDMA 性能与 TCP 一样慢。 现在,数据在放置之前进行加密,使性能下降相对较小,同时增加了 AES-128 和 AES-256 保护的数据包的隐私。 有关配置 SMB 加密的详细信息,请查看 SMB 安全增强功能

此外,Windows Server 故障转移群集现支持对加密群集共享卷 (CSV) 和存储总线层 (SBL) 的节点内存储通信进行精细控制。 这意味着,在使用存储空间直通和 SMB 直通时,你可决定在群集本身内加密东-西通信,以获得更高的安全性。

禁用和启用 SMB 直通功能

SMB 客户端自动执行检测,并在确定相应配置后使用攀个网络连接。 默认情况下启用 SMB 直通,禁用后,需要在需要时手动重新启用。

通常无需禁用 SMB 直通,但是,可以通过运行以下 Windows PowerShell 命令来禁用它及其功能。

要禁用 SMB 直通,请键入:

Disable-WindowsOptionalFeature -Online -FeatureName SMBDirect

要在服务器端禁用 SMB 多通道,请键入:

Set-SmbServerConfiguration -EnableMultiChannel $false

要在客户端禁用 SMB 多通道,请键入:

Set-SmbClientConfiguration -EnableMultiChannel $false

要禁用特定接口的 RDMA,键入:

Disable-NetAdapterRdma <name>

要禁用所有接口的 RDMA,键入:

Set-NetOffloadGlobalSetting -NetworkDirect Disabled

在客户端或服务器上禁用 RDMA 时,系统将无法使用它。 Network Direct 是对 RDMA 接口的 Windows Server 基本网络支持的内部名称。

要验证 SMB 直通当前配置的操作性状态,请运行以下 cmdlet:

Get-WindowsOptionalFeature -Online -FeatureName SMBDirect

测试 SMB 直通

可以通过在运行大型文件副本时测量吞吐量来测试 SMB 直通的性能。 在测试之前,请验证网络适配器是否支持通过 PowerShell 使用 RDMA。

在服务器端,键入:

Get-SmbServerNetworkInterface

在客户端,键入:

Get-SmbClientNetworkInterface

验证网络适配器支持 RDMA 后,请执行以下测试:

  1. 在网络适配器上禁用 RDMA,请参阅禁用和启用 SMB 直通功能
  2. 测量不使用 SMB 直通进行较大文件复制所花的时间。
  3. 在网络适配器上重新启用 RDMA,执行相同的文件复制,然后比较这两个结果。
  4. 要避免缓存的影响,请执行以下操作:
    1. 复制大量数据(处理超出内存量的大量数据的功能)。
    2. 复制数据两次,第一次复制为操作,第二次复制为定时传输。
    3. 每次测试前都重启服务器和客户端,确保它们在相似条件下运行。

此外,还可以通过相同的方案,使用性能监视器工具在测试期间观察性能计数器,方法是执行以下操作:

  1. 选择“开始”,键入 perfmon,按 Enter
  2. 在左窗格中,在“监视工具”>下选择“性能监视器”。
  3. 在右窗格中,选择绿色的“+”图标以添加新计数器。
  4. 在“添加计数器”对话框中,展开 SMB 直通连接
  5. 选择“字节 RDMA 读取/秒”和“字节 RDMA 写入/秒”,选择“添加”,然后选择“确定”。

SMB 直通故障转移功能

下面介绍如何确认 SMB 直通的故障转移功能:

  1. 确保 SMB 直通在多个网络适配器配置环境下正确工作。
  2. 运行较大文件复制。 复制过程中,通过断开一条电缆或禁用一个网络适配器来模拟网络路径发生的故障。
  3. 确定使用其余一个网络适配器继续传输文件复制,而未发生任何文件复制错误。

提示

在不使用 SMB 直通的情况下,为避免工作负载失败,确保在网络路径中断后不再执行其他工作负载。

其他参考