优化网络传输性能
2019-04-03河南郭建伟
■ 河南 郭建伟
编者按:随着Windows Server版本的演进,其功能也变得越来越强大。但是,对于任何版本的Windows Server来说,如何优化和提高网络管理的能力,始终使其重点发展的方向。在最新的Windows Server 2016中,其网络管理与维护的功能得到了进一步的强化。灵活的使用其内置的各种网络优化技术,对于提高网络运维的效率是极为重要的。这里就从DVMQ,RDMA,SMB Direct,SR-IOV,数据中心桥接,QoS,RSS等方面,来讲述了优化网络性能的方法。
管理虚拟机队列
在Hyper-V虚拟化环境中,当物理网卡进行数据传输时,如果没有启用VMQ(即Virtual Machine Queue,虚拟机队列),在处理网络流量时,中断处理只有一个CPU核心管控,即使存在空闲的CPU核心,也无法参与进来。当启用了VMQ功能后,数据流量就可以在不同的CPU核心上进行处理,从而大大提高网络传输的能力。
在Windows Server 2016中,还提供了DVMQ(即Dynaic Virtual Machine Queue,动态虚拟机队列)技术,主要用来强化VMQ(虚拟机队列)的功能。对于DVMQ来说,相对于VMQ来说增加了监控功能,即可以监控正在使用的CPU核心的工作状态。
如果其检测到某个CPU核心处于满负荷运行状态,就会自动将其处理过程切换到比较闲置的其他CPU核心上。VMQ技术会在物理网卡层面为每台虚拟机生成一个队列,利用对应的虚拟机使用的虚拟网卡的MAC地址作为与之关联的队列的标识,之后VMQ会将不同的队列分配到对应的CPU核心上进行处理,当其处理完毕后不会经由标准的TCP/IP路由,而通过虚拟交换机的扩展模块,直接将流量投递到目标虚拟机上。
DVMQ通过对Hyper-V主机的逻辑CPU核心进行监控,将不同的队列从满负载的CPU逻辑核心切换到较为空闲的CPU核心上进行处理。
在配置VMQ时,必须保证物理网卡支持该功能,在虚拟机上也必须启用该功能。
在Hypr-V管理器右侧点击“虚拟交换机管理器”项,可以创建一个虚拟交换机,使其和某块物理网卡进行绑定。
在该Hyper-V主机上打开设备管理中,打开该物理网卡的属性窗口,在“高级”面板中的“设置”列表周末选择“虚拟化”项,点击“属性”按钮,在打开窗口中选择“启用虚拟机队列”项,启用VMQ功能。
在PowerShell窗口中执行“Get-NetAdapterVMQ”命令,查看VMQ的状态信息。当不同的虚拟机和外界进行流量传输时,就会看到对应的虚拟机队列信息。在Hyper-V管理器中选择某个虚拟机,在右侧点击“设置”项,在打开窗口左侧选择虚拟网卡,在右侧选择对应的虚拟交换机。在左侧选择“硬件加速”项,在右侧选择“启用虚拟机队列”项。让虚拟机支持VMQ功能。
RDMA和SMB Direct的功能和特点
对 于RDMA(即Remote Direct Memery Access,远程直接内存访问)技术来说,主要用来减少在网络传输中CPU处理的过程,提高CPU的效能。例如,在Windows Server 2016中存在一台文件服务器,当启用了RDMA功能后,并且物理网卡/交换机等设备也要支持该功能,其通讯过程就会跳过操作系统和网卡驱动等环节,应用程序提交的数据会发送到网卡当中,网卡就会完成处理和通讯的过程。
在Windows Server 2016的虚拟化环境中,如果虚拟化的客户机和文件服务器位于同一台Hyper-V主机中,那么当启用了RDMA功能后,连底层的网卡通讯过程都可以忽略掉,即虚拟机的应用之间可以进行直接的内存通讯。当然,操作系统必须为Windows Server 2016,并且需要安装对应的集成的驱动程序。从实质上说,RDMA的功能就是将应用程序中的通讯数据直接和网卡进行交互。
在Hyper-V主机中的虚拟机可以直接进行内存通讯,因为虚拟机要和物理主机进行通讯,会使用VMBUS的功能,因此主机可以了解所有虚拟机的基本定位信息,所有的虚拟机也都使用了VMBUS功能,所以虚拟机之间的通讯可以直接跳过虚拟系统和虚拟网卡层面的。
对 于SMB Direct功能来说,是基于RDMA之上来实现的,并且其是专门针对文件服务器来实现共享。启用SMB Direct功能,可以进一步的提升网络通讯的效率降低网络延迟,而且可以有效降低CPU的负载。在Hyper-V主机上打开PowerShell窗口,执行“Get-Command *rdma*”命令,查看和RDMA相关的命令信息。执行“Get-NetAdapterRdma”命令,查看网卡信息,在其中的“Enabled”列中如果显示“False”,表示该网卡没有启用RDMA功能。执行“Get-NetAdapterRdma | Enable-NetAdapterRdma”命令,启用RDMA功能。
实现虚拟网卡映射
SR-IOV(即Single Root I/O Virtualization,单根虚拟化)适用于Windows Server 2016的Hyper-V运行环境,在Hyper-V中管理员可以创建多台虚拟机,并为其配置虚拟网卡,使用SR-IOV技术,可以有效提高虚拟网卡的效能。对RSS和VMQ技术来说,在处理网络流量时,必须依靠CPU的支持方可。对于SR-IOV来说,可以直接跳过CPU利用网卡进行处理,这样就减轻了CPU的负载。SR-IOV可以将虚拟网卡直接映射到物理网卡中,使其可以直接调用物理网卡中的资源,来完成对于通讯队列的处理。
因为物理网卡提供了相应的API接口,这些接口被称为虚拟函数,其可以直接调用物理网卡中的芯片来处理数据流量。SR-IOV的主要作用就是将虚拟的网络通讯队列,直接映射到虚拟机中进行处理,避开了物理CPU的处理环节。实现SR-IOV技术,是存在一些先决条件的。例如服务器的网卡,主板都必须支持SR-IOV功能,在网卡和主板上都配置了特殊的芯片,来实现SR-IOV功能。在服务器的BIOS中必须启用该功能,服务器必须支持SLAT(即Second Level Address Translation)功能,可以对虚拟内存地址进行转换。
图1 启用单根虚拟化功能
对于SLAT来时,其实质上是将虚拟机中的内存地址和物理服务器的内存地址进行更好的匹配,让虚拟机在使用硬件资源是减少地址转换的过程,直接访问到物理的内存地址。当启用了SRIOV功能后,RSS就会被自动停用。对于Hyper-V虚拟机来说,需要安装对应的网卡驱动,启用网卡的SR-IOV功能。
对应地,在Hyper-V的虚拟交换机上也必须启用用SR-IOV功能。在某台Hyper-V主机上打开设备管理器,双击某块物理网卡,在其属性窗口中的“高级”面板中选择“虚拟化”项,点击属性按钮,在打开窗口(如图1)中选择“启用SR-IOV”项,启用该功能。将虚拟机中的网卡和物理网卡进行直接连接,虚拟网卡将需要处理的资源投送给物理网卡,物理网卡可以直接处理通讯的队列。
在Hyper-V管理器中打开虚拟交换机管理界面,删除存在的虚拟焦化经济。以内对于已经存在的虚拟交换机来说,是无法启用SR-IOV功能的。创建新的虚拟交换机,输入其名称,选择“外部网络”项,在列表中选择启用了SR-IOV功能的网卡,选择“启用单根I/O虚拟化”项,点击确定按钮,让该虚拟交换机支持SR-IOV功能。选择某台虚拟机,在其设置窗口中为其指定上述虚拟交换机。在左侧选择“硬件加速”向,在右侧选择“启用SR-IOV”项,就为该机的虚拟网卡启用了SR-IOV功能。这样,虚拟网卡就具备了虚拟函数接口功能,通过该接口就可以将信息投递到物理网卡中。
使用数据中心桥接,加速网络访问
数据中心桥接(即Datacenter Bridging)是基于国际化标准组织所制定的标准协议,其主要作用是帮助应用程序在进行网络通信时,能够获取足够的优先级和网络直连的保障。因为数据中心桥接功能是基于标准协议创建的,所以不仅适用于Windows Server的系统,对于数据中心的服务器、网卡和交换机等设备也可以提供支持。对于物理网络通讯的过程来说,从Windows Server发起数据流量,从物理网卡到交换机,整个数据通讯从每个层面都可以得到优化和保障。
使用SR-IOV,RDMA等技术来说,虽然提高网络通信的效能,但是对于网络质量控制来说,却存在一定的问题。因为Hyper-V的虚拟机在传输数据时,会直接调用硬件的网卡,就会绕过Hyper-V主机中的网络协议栈,让关于QoS的策略变得没有毫无用处。数据中心桥接功能可以很好的解决上述问题,即使虚拟机跳过了Hyper-V主机的网络协议栈,因为物理网卡、交换机均支持该功能,所以针对网络程序设置的优先级和网络质量保证来说,在网卡、交换机中是可以识别并得到执行的。
在配置数据中心桥接时,首先需要识别不同的网络应用程序,这依靠的是协议和端口号来进行的,例如iSCSI使用了TCP/UCP 3260端口,NFS使用了TCP/UCP 2049端口,SMB使用了TCP/UCP 445端口,Live Migration使用了TCP 6600端口等。
接下来数据中心桥接功能会针对不同的应用程序,通过添加标签的方式为其设置优先级,这不仅仅需要在数据中心桥接的策略中进行指定,还需要对网络程序发送的数据包进行修改,即将优先级的信息写入到相应的数据包中,网卡和交换机会识别这些数据包,并遵循数据包中的优先级信息,来执行预设的策略。
例如 在Hyper-V管理器中打开某台虚拟机,在PowerShell窗口中执行“Get-WindosFeature*brid*”命令,查看数据中心桥接功能的名称信息。
执行“Install-WindowsFeature Data-Center-Bridging”命令,来安装该组件。
执行“Get-Command-Module DcbQos”命令,查看和数据中心桥接功能相关的命令。
例如,执行“New-NetQos Policy-Name "SMBLink" -N etDirectPortMatchConditi on 445 -PriorityValueActi on 1”命令,创 建 名 为“SMBLink”的策略,设置了其使用的端口和优先级。
执行“Enable-NetQosFl owControl -Priority 1”命令,来启用该策略。
执行“Enable-NetAdapt erQos -Name "xxx"”命令,将该策略和具体的网卡绑定起来,这里的“xxx”为网卡的名称。
执行“New-NetQosTraff icClass -Name "SMBLink"-Priority 1 -BandwidthP ercentage 50 -Algorithm ETS”命令,可以设置该策略可以占用的网卡的带宽的比例。这样,对于使用SMB协议的网络传输来说,其优先级为1,可以使用50%带宽的网卡带宽。
RSS技术的原理和配置
RSS(即Receiver Side Scaling,接收端缩放),对于服务器来说,在默认情况下,在进行网络传输时,需要CPU进行中断处理,但是只能有一个CPU内核进行处理,及时有更多的内核处于空闲状态,也无法对上述情况进行处理。RSS技术很好地解决了上述问题,
当进行网络数据传输时,RSS可以让多个CPU核心同时进行处理。RSS可以产生多个不同的传输队列,每个队列的中的数据会有一个CPU核心进行处理。这样,所有的CPU资源都会被充分利用起来,可以更加高效快速的处理网络数据。
图2 设置RSS属性信息
RSS实际上是网卡中内置的功能,当其启用后,就会利用多个CPU核心处理网络数据。当然,RSS技术并非只为Hyper-V产生的,也可以使用到其他的服务器上。例如在某台物理服务器上打开设备管理器,在“网络适配器”节点下显示所有的网卡设备,双击其中某块网卡,在属性窗口中的“高级”面板(如图2)左侧的“属性”列表中选择“RSS负载平衡配置文件”项,在右侧选择合适的配置文件。
对于单个物理CPU来说,可以选择“ClosestProcessor”项,让所有的逻辑CPU核心都可以参与处理网络流量,并形成一种负载均衡机制。
在左侧选择“RSS基础处理器数量”项,可以设置基础的CPU核心,在右侧显示默认值为0,表示使用第一个物理CPU的第一个逻辑核心。在左侧选择“最大RSS处理器数”项,可以设置最大的CPU核心数量,在右侧设置合适的CPU核心数量,选择“最大RSS队列数”项,在右侧设置合适的队列数量。
当配置完成后,在PowerShell窗口中执行“Get-NetAdapterRss”命令,来查看RSS的配置信息。在返回信息中会针对不同的网卡,列出与之对应的RSS信息,包括网卡名称,描述信息,是否激活RSS功能,接收的队列数量,配置文件类型,基础CPU对象,最大的CPU核心数量,RSS处理阵列等信息。
当在Hyper-V虚拟机中启用了RSS之后,其效果和物理机是极为类似的,即多个虚拟CPU会同时处理相应的数据流量。
例如在Hyper-V虚拟机中打开任务管理器中,在“性能”面板中显示物理CPU和逻辑核心的数量信息。例如在该机中配置了两个物理CPU,在CPU动态图表的右键菜单中点击“将图形更改为”→“NUMA节点”项,显示其包括的NUMA节点信息。打开虚拟网卡的属相窗口,在“高级”面板左侧选择“Receive Side Scaling”项,在右侧选择“Enabled”项,激活RSS功能。
在“RSS base Processor Number”项,在右侧选择基础CPU的值,默认值为0。在“Maxinum number of RSS queues”项中可以设置最大的RSS队列数量。
注意:队列和CPU核心的数量未必一致。
选择“RSS Profile”项,在右侧选择配置文件类型,对 于“Closest Processor”选项来说,表示RSS使用最近的处理器,即在一个NUMA内所有的CPU核心都可以处理网络队列。对于“Closest Process Static”来说,当RSS选择了某个CPU核心后,对应队列中的数据就会一直由其处理。对于“Conservation Scaling”来说,会使用尽可能少的CPU核心来满足队列处理的需要,如果队列处理忙碌的话,其就会使用新的CPU核心。
对于“NUMA Scaling”来说,可以使用一个MUMA节点中的所有CPU核心来完成数据吞吐的处理。对于“NUMA Scaling Static”来 说,并不提供负载均衡机制,如果其使用所分配的CPU核心满载后,才会使用一个Numa节点中的其他的空闲的CPU核心。后两者针对的是存在多颗物理CPU的情况。例如选择“NUMA Scaling”。在 左侧选择“Max Number of RSS Processors”项,可以设置RRSS可以使用的CPU的数量。选择“Maximum Number of RS Queues”项,可以设置RSS队列的数量。
注意:如果启用了网卡组合功能的话,必须保证其中的所有网卡均启用了RSS技术。
利用QoS技术,保证网络服务质量
在Windows Server 2016虚拟化环境中,一台Hyper-V主机会运行很多虚拟机,多个虚拟机的流量都绑定到了一块物理网卡上。此外,虚拟机的管理(例如虚拟机的迁移,备份等操作)也会占用一定的网络带宽。在带宽有限的情况下,就必须保证特定的应用资源可以获取特定的网络带宽,这就是网络质量服务所要解决的问题。
对于Hyper-V虚拟机来说,可以针对其使用的虚拟网卡来设置所需的最大/最小带宽,如果虚拟机使用了多块网卡,还可以不同的虚拟网卡进行单独的调整。对于应用程序,计算机或者用户来说,可以利用组策略来设置相应的网络质量服务参数。
例如,在Hyper-V管理器中选择某台虚拟机,在其设置窗口左侧选择“网络适配器”项,在右侧选择“启用带宽管理”项,来设置最小和最大的网络带宽(如图3)。
当需要对虚拟机中的某个应用程序设置网络质量服务时,可以在该机中打开组策略管理器,在其中创建相应的组策略对象(例如“QoS Policy”),在“安全筛选”栏中点击“添加”按钮,将目标计算机,用户和组添加进来。
图3 为虚拟机设置网络带宽
图4 设置QoS管理策略
之后将该组策略对象链接到对应的OU中,使其应用到该OU中的所有计算机中。打开该GPO的编辑界面,在左侧选择“计算机配置”→“策略”→“Windows设置”→“基于策略的QoS”项,在其右键菜单中点击“新建策略”项,在打开窗口(如图4)中输入其名称,选择“指定DSCP值”,来设置合适的DSCP值,DSCP即应用查分服务代码点。其范围从0到63,该值越大说明其优先级越高。
点击下一步按钮,可以看到默认该QoS策略响应所有应用程序。
也可以选择“仅限具有此可执行名称的应用程序”项,输入程序的路径或名称。
选择“仅HTTP服务器应用程序响应此URL的请求”项,输入合适的URL地址(例如“http://*/center”等),在下一步窗口中可以设置该QoS策略应用的源IP和目标IP,这样可以让特定的访问者获取更大的网络带宽。
点击下一步按钮,可以设置该QOS策略应用的协议类型,源和目标端口号,点击完成按钮创建该QoS策略。还可以选择“用户配置”→“策略”→“Windows设置”→“基于策略的QoS”项,针对用户配置QoS策略。