Linux 虚拟机注意事项

与 Hyper-V 中的 Windows 虚拟机相比,Linux 和 BSD 虚拟机具有更多注意事项。

第一个注意事项是集成服务是否存在,或者 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 版本是开源的,可从 获取。 可在下载中心找到 Windows 版本。 在优化工作负载时,最好使用尽可能多的流以获得最佳吞吐量。 使用 ntttcp 来模拟流量,-P 参数设置使用的并行连接数。

Linux 存储性能

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

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

其他参考