kwi*_*and 5 networking centos libvirt kvm-virtualization virtio
我之前已经设置了几个基于 KVM 的网络,但从未遇到过这个问题,我一生都无法想象我以前会设置什么不同的网络。
设置
基本上,我已经完全拥有戴尔堆栈:
所有机器都运行 CentOS6.5,hypervisor,基本上是标准安装,有一些 sysctl 调整。
目前,我有一些测试 VM 的设置,它们的设置与它们的主机相似(CentOS 6.X,基本安装带有基本的 puppet 驱动配置)。所有虚拟机都是:
所有 VM 都使用 virtio 来处理网络、块设备(基本上是运行 virt-install 命令的标准结果)——例如(例如 libvirt 配置)
Run Code Online (Sandbox Code Playgroud)<interface type='bridge'> <mac address='52:54:00:11:a7:f0'/> <source bridge='dmzbr0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface>
并且所有 VM 都可以访问 2 到 8 个 VCPU 以及 8 到 64GB 的 RAM,并且它们的驱动器是主机上的 LVM 卷
VM 中的一些简单文件副本和 dd 测试产生了完全可以接受的结果(在这些小规模综合测试中为 300MB/s - 800MB/s)
物理机之间的网络性能
我现在已经离开了 Jumbo Frame/MTU 配置,服务器到服务器的传输将非常高兴地将千兆连接(或大约)最大化(100MB/s -> 118MB/s 平坦,经过几个大文件测试到/从每台机器)
物理机和 VM(以及 VM 到 VM)之间的网络性能
Rsync/SSH 传输持续变化(不稳定)但始终在24MB/s 和最大约 38MB/s 之间
我已经执行了其他几个测试: - 在一个桥上的物理机 IP 到 VM 之间(在另一个桥上) - 在一个桥上的物理机 IP 到 VM(在同一个桥上)之间 - 尝试使用e1000启动 VM设备驱动程序而不是virtio
似乎没有任何效果,以前有没有人遇到过如此严重的性能下降?我刚刚检查了我的旧网络(托管在另一个 DC),除了它使用不同的交换机(非常便宜的旧 PowerConnect 2824)之外,VM 网络性能似乎接近原始网络的 80-90%性能(不少于一半)
如果我能提供任何设置/配置或额外信息,我非常乐意!
更新 (14/08/2014)
尝试了几件事:
主机似乎处于 125% 的 CPU(对于主机进程),这是否与将太多 VCPU 分配给来宾或 CPU/Numa 亲和性有关?
然而,毕竟,我似乎将平均持续速率从 25-30MB/s 提高到了 40-45MB/s。这是一个不错的改进,但我相信我可以更接近裸机性能(目前它仍然低于一半)。
还有其他想法吗?
您的 KVM 实例应该能够毫无问题地使您的主机网络连接饱和。
我的第一个建议是升级主机和来宾的内核。现有的 CentOS 6.5 内核对于 KVM 来说性能不佳。我建议使用 ELRepo 的 kernel-lt (如果你足够勇敢的话,也可以使用 kernel-ml )。这应该会立即给你带来相当大的性能提升。
接下来,尝试使用 iperf3(甚至较旧的 iperf)进行测试。这将为您提供尽可能接近纯粹的网络连接。您的 rsync/ssh 测试并不是真正有效,因为它们肯定会访问磁盘。RSync 尤其可能不会像 dd 测试那样执行顺序 IO(尝试使用 fio 代替)。
有趣的是,虚拟机到虚拟机的流量实际上不会到达网络控制器。这将纯粹在主机上完成,因此网络的其余部分(以及各种卸载设置)在这里实际上没有任何意义。
另一件需要检查的事情是:您的服务器是否降低了 CPU 速度?我们有许多戴尔机器认为它们处于空闲状态,并且开始运行 CPU 的速度明显慢于应有的速度。节能的东西并不总是能很好地识别服务器工作负载。
您肯定需要 virtio,甚至不要浪费时间测试任何模拟选项。
您没有提到它,但如果您的服务器具有基于 i350 的 NIC,您可以查看 SR-IOV(假设您只需要每台计算机 <= 7 个虚拟机)。这使 VM 可以直接访问物理 NIC(以功能损失为代价,例如不支持 nwfilter),并且效率更高。不过,您不需要它来获得全千兆速度。