virtio-win项目中Windows虚拟机网络性能问题的分析与解决

virtio-win项目中Windows虚拟机网络性能问题的分析与解决

【免费下载链接】kvm-guest-drivers-windows Windows paravirtualized drivers for QEMU\KVM 【免费下载链接】kvm-guest-drivers-windows 项目地址: https://gitcode.com/gh_mirrors/kv/kvm-guest-drivers-windows

问题背景

virtio-win项目为KVM虚拟化环境中的Windows客户机提供半虚拟化设备驱动程序。近期用户报告在使用virtio-net网络驱动时,Windows虚拟机的网络传输性能出现严重问题,特别是在启用LSO(Large Send Offload)和TSO(TCP Segment Offload)功能时。

问题现象

用户观察到以下典型性能问题:

  1. 发送方向(TX)性能问题:当Windows虚拟机作为发送方时,启用LSO会导致传输速度从约2Gbps骤降至1Mbps左右。禁用LSO后性能可恢复正常。

  2. 接收方向(RX)性能问题:当Windows虚拟机作为接收方时,如果发送方(如Linux或FreeBSD虚拟机)启用了TSO,接收速度会降至15Mbps(来自Linux)或100Kbps(来自FreeBSD)。禁用发送方的TSO后,Windows接收性能可提升至3Gbps。

技术分析

性能对比数据

通过iperf3测试工具,用户收集了详细的性能对比数据:

发送方/接收方Fedora(主机)WindowsTrueNAS(FreeBSD)Ubuntu
Fedora23G/20G13G/2G*23G/17G22G/20G
Windows2G*/14G11G/12G3.5G/~04G*/20M
TrueNAS18G/26G~0/3.5G33G/31G16G/12G
Ubuntu21G/21G15M/4G*12G/15G20G/17G

注:带号表示已应用LSO=off的临时解决方案

根本原因

经过社区调查,发现问题源于Linux内核6.10.3版本引入的一个网络协议栈bug。该bug影响了TCP分段卸载功能的正确处理,导致在特定网络配置下(特别是涉及虚拟网桥和virtio-net设备时)出现严重的性能下降。

解决方案

临时解决方案

在发现问题根源前,用户发现以下临时解决方案有效:

  1. Windows端解决方案

    • 在Windows设备管理器中禁用"Large Send Offload"功能
    • 这可以解决Windows作为发送方时的性能问题
  2. Linux/FreeBSD端解决方案

    • 在发送方虚拟机或主机上执行ethtool -K <interface> tso off
    • 这可以解决Windows作为接收方时的性能问题

永久解决方案

Linux内核6.10.5版本已修复此问题。用户升级到6.10.6内核后报告:

  1. Linux/FreeBSD到Windows的传输速度提升至7-11Gbps(相比TSO关闭时的3Gbps)
  2. Windows到Linux的传输速度提升至11-15Gbps(相比LSO关闭时的1-3Gbps)

技术细节

关于LSO和TSO

LSO(Large Send Offload)和TSO(TCP Segment Offload)是网络加速技术:

  • LSO:允许网络协议栈将大数据包交给网卡处理分段
  • TSO:允许网卡硬件执行TCP分段,减轻CPU负担

在虚拟化环境中,这些功能通过virtio-net驱动和主机网络栈协同工作,任何一方的实现问题都可能导致性能异常。

虚拟网络配置建议

对于高性能虚拟网络环境,建议:

  1. 保持内核版本最新,特别是涉及网络子系统时
  2. 监控virtio-net驱动的更新,及时升级客户机驱动
  3. 在性能测试时,同时检查有/无各种卸载功能的性能表现
  4. 考虑使用多队列virtio-net配置提高并行处理能力

结论

本次性能问题展示了虚拟化环境中网络协议栈的复杂性,特别是在涉及多层级卸载功能时。通过社区协作,问题被快速定位并解决。对于使用virtio-win项目的用户,建议:

  1. 升级到Linux内核6.10.5或更高版本
  2. 保持virtio-win驱动为最新版本
  3. 在性能关键场景下进行充分的网络性能测试

虚拟化网络性能优化是一个持续的过程,需要关注各组件(主机内核、虚拟化平台、客户机驱动)的协同工作状态。

【免费下载链接】kvm-guest-drivers-windows Windows paravirtualized drivers for QEMU\KVM 【免费下载链接】kvm-guest-drivers-windows 项目地址: https://gitcode.com/gh_mirrors/kv/kvm-guest-drivers-windows

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值