增加 VMBus 缓冲区大小来提升虚拟机网络吞吐量
今天在 Windows Server Performance Team Blog 看到一篇非常有价值的文章《Increase VMBus buffer sizes to increase network throughput to guest VMs》,主要介绍了如何通过增加 VMBus 的缓冲区来提升虚拟机网络的吞吐量。由于原文的介绍已经相当详细,小弟我也就不班门弄斧!简单来讲,Hyper-V 提供的 VMBus 架构是非常优越的,由于虚拟网络的数据交换是通过 VMBus 到物理网卡的,所以 Virtual Switch 能够提供充足的缓冲,我们可以利用该特性有效的改善传统网络中出现的因吞吐量导致的数据包丢失问题。在 Windows Server 2008 R2 上默认的缓冲区大小为 1mb,它能提供 655 个数据包缓冲(每个缓冲区 1600 个字节)。根据原文的建议可以将其缓冲增加到 2mb(最大有效值是 4mb),能够满足大多数的情况。除非你有足够大的内存,否则不建议设置到 4mb。
要增加 VMBus 缓冲区的大小只需要修改虚拟机的网卡(Microsoft 虚拟机总线网络适配器)注册表相关项增加两个 DWORD 值即可。执行此操作前我们需要先确认虚拟机网卡的“驱动程序关键字”便于在注册表中定位,为此在虚拟机中打开硬件管理找到网卡适配器进入其属性下的详细信息选项卡页面,在属性列表中选取“驱动程序关键字”,将该值记录下来。
接下来打开注册表编辑器,根据之前记录下来的值定位到类似下面的注册表位置上,并添加名为:ReceiveBufferSize 和 SendBufferSize 的 DWORD 键,设置其值为:800
最后重新启动虚拟机即可。由于本人英语水平有限,无法完全正确地翻译原文介绍,以及表达我个人的理解意思,文中有错误的解释欢迎大家指正。