我们有一个定制的、非常定制的应用程序,运行在 Windows 2008R2 服务器上。它的主要功能是尽可能快地连接到数万个 IP 地址并查询特定的 TCP 端口 - 本质上是一个网络扫描器,但根据我们的要求进行了高度定制。服务器和目标地址之间没有 NAT,并且该应用程序不会消耗大量内存或 CPU。
该应用程序(基于 .NET)经过了优化,我们相信代码已经尽可能紧凑。但是,应用程序通过 IP 地址的速率似乎受限于 Windows TCP 堆栈和其所运行的硬件的组合 - 目前它运行在低端、勉强达到服务器级别的机器上。
由于此应用程序的性能至关重要,我们计划将其迁移到新的更高规格的服务器,可能是HP DL360 G8。但是,我们可能同时在不同的机器上运行该应用程序的多个实例,因此我想探索使用新服务器作为虚拟主机的选项。
我们可能会使用 VMWare ESXi,Hyper-V 是备选方案。但是,我不确定在服务器上的虚拟机中运行的数据包密集型应用程序是否会将瓶颈转移到虚拟机管理程序上?
DL360 有 4 个 NIC:我们可以将 4 个虚拟机“连接”到 4 个 NIC 中的每一个,并并行运行它们。VMWare/Hyper-V 是否有效地将流量直接传递到 NIC,从而提供“原生”网络性能,或者客户操作系统和硬件之间是否存在转换元素,这可能会导致虚拟机管理程序出现数据包瓶颈?
答案1
对于 hyper-v:视情况而定。您希望在硬件卡、虚拟网络和 NIC 上启用 SR-VIO。否则,所有数据包都会通过虚拟交换机,这意味着开销。如果有一个不错的网卡,这将导致分配给虚拟机的硬件队列,其速度与虚拟化层中的速度一样快。
答案2
答案3
我们已经在 RHEV(或简称 KVM)上使用 SRIOV 做过类似的事情,或者如果您使用 Cisco UCS - 带有 VMFEX - 您需要在刀片中使用 Palo 卡。
两种情况下的大规模部署(5 位数的服务器数量)在过去几年中都运行良好。