Linux 虚拟机注意事项

与 Hyper-V 中的 Windows 虚拟机相比,Linux 和 BSD 虚拟机还有其他注意事项。

第一个考虑因素是 Integration Services 是否存在,还是 VM 仅在模拟硬件上运行,且没有启发性。 Windows 上 Hyper-V 支持的 Linux 和 FreeBSD 虚拟机中提供了具有内置或可下载集成服务的 Linux 和 BSD 版本的表。 这些页面包含适用于 Linux 分发版的可用 Hyper-V 功能的网格,以及有关这些功能(如果适用)的说明。

即使来宾正在运行集成服务,也可以为其配置旧版硬件,但这不能发挥最佳性能。 例如,为来宾配置和使用虚拟以太网适配器,而不是使用旧网络适配器。 使用 Windows Server 2016 时,SR-IOV 等高级网络也可用。

Linux 网络性能

默认情况下,Linux 启用硬件加速和卸载。 如果在主机上的 NIC 属性中启用了 vRSS,并且 Linux 来宾能够使用 vRSS,则会启用该功能。 在 Powershell 中,可以使用命令更改 EnableNetAdapterRSS 同一参数。

同样,可以在来宾使用的物理 NIC 上启用 VMMQ(虚拟交换机 RSS)功能,方法是在属性>配置...>高级选项卡>中将虚拟交换机 RSS设置为启用,或者使用以下方法在 Powershell 中启用 VMMQ:

 Set-VMNetworkAdapter -VMName **$VMName** -VmmqEnabled $True

在来宾中,可以通过增大限制来执行额外的 TCP 优化。 为了获得最佳性能,应将工作负载分散到多个CPU,并增加工作负载的深度,以产生最佳的吞吐量。这是因为虚拟化的工作负载比“裸机”的延迟更高。

在网络基准中有用的一些示例优化参数包括:

net.core.netdev_max_backlog = 30000
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_wmem = 4096 12582912 33554432
net.ipv4.tcp_rmem = 4096 12582912 33554432
net.ipv4.tcp_max_syn_backlog = 80960
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240 65535
net.ipv4.tcp_abort_on_overflow = 1

一种用于网络微基准测试的有用工具是 ntttcp,它可以在 Linux 和 Windows 上使用。 Linux 版本是开放源代码,可从 github.com 上的 ntttcp-for-linux 获取。 可以在 下载中心找到 Windows 版本。 优化工作负荷时,最好根据需要使用任意数量的流来获得最佳吞吐量。 使用 ntttcp 为流量建模,参数 -P 设置使用的并行连接数。

Linux 存储性能

Hyper-V 上运行 Linux 的最佳做法中列出了一些最佳做法,如下所示。 Linux 内核具有不同的 I/O 计划程序,可使用不同的算法对请求重新排序。 NOOP 是一个先入先出队列,用于传递虚拟机监控程序要做出的计划决策。 建议在 Hyper-V 上运行 Linux 虚拟机时使用 NOOP 作为计划程序。 若要更改特定设备的计划程序,请在启动加载程序的配置(例如 etc/grub.conf)中添加 elevator=noop 内核参数,然后重启。

与网络类似,具有存储器的 Linux 的性能受益最大,因为它有深度足够的多个队列可以让主机保持忙碌状态。 使用 fio 基准工具与 libaio 引擎进行微基准测试存储性能可能是最佳选择。

其他引用