我的公司遇到了一个网络性能问题,似乎所有与我们合作的"专家"(VMWare支持,RHEL支持,我们的托管服务托管提供商)都难倒了。
问题是我们的虚拟机(甚至是位于同一物理主机上的虚拟机)之间的网络延迟增加-高达100倍或更多!——网络吞吐量。例如,在没有任何网络负载的情况下,延迟(通过ping测量)可能是~0.1ms。开始传输几个100MB的文件,延迟增加到1ms。在两个虚拟机之间发起一堆(~20左右)并发数据传输,虚拟机之间的延迟可能会增加到10ms以上。
这对我们来说是一个巨大的问题,因为我们有应用服务器VM托管进程,可能每小时对数据库服务器(不同的VM)发出100万左右的查询。因此,为每个查询增加一毫秒或两毫秒,会大大增加我们的运行时间——有时是预期持续时间的两倍或三倍。
我们已经得到了一个我认为非常标准的环境:
- 6.0
- ESXi u2
- 4台戴尔M620刀片,配备2倍至强E5-2650v2处理器和128GB RAM
- SolidFire圣
我们的基本VM配置包括:
- RHEL7,最小安装
- 为/boot、/、/var/log、/var/log/audit、/home、/tmp和swap的挂载点配置多个lun
- 除/boot以外的所有分区都使用LUKS加密(通过LVM)
我们的数据库服务器vm运行的是Postgres 9.4.
我们已经试过了:
- 将虚拟网卡从VMNETx3更改为e1000并返回
- 调整RHEL以太网栈设置
- 为虚拟机使用ESXi的"低延迟"选项
- 主机和vCenter从ESX 5.5升级到6.0u2
- 创建用于测试的裸机(如上所述使用LUKS等设置,但没有任何我们的生产服务)
- 将数据存储从SSD SolidFire SAN移动到本地(刀片上)旋转存储
这些都没有改善网络延迟。唯一显示预期(未恶化)延迟的测试是当我们设置第二对没有 LUKS加密的裸机时。不幸的是,我们需要完全加密的分区(我们为其管理密钥),因为我们正在处理受监管的敏感数据。
我不明白运气——它本身——怎么能怪在这里。更确切地说,我怀疑LUKS与ESX、我们的主机硬件和/或我们的VM硬件配置的某种组合一起运行是罪魁祸首。
我在一个弱得多的环境中进行了测试(MacBook Pro, i5, 8GB内存,VMWare Fusion 6.0, Centos7虚拟机,配置相似的LVM上的LUKS和相同的测试脚本),无法重现延迟问题。无论我在虚拟机之间发送多少网络流量,延迟始终稳定在0.4ms左右。这是在一台笔记本电脑上进行的一大堆事情!
任何指示/提示/解决方案将不胜感激!
经过仔细检查并将不良vm与性能vm进行比较后,我们将问题确定为高级"延迟敏感性"设置的错误选择。
对于性能较差的vm,设置为"Low"。在将设置更改为"正常"并重新启动虚拟机后,延迟下降了约100倍,吞吐量(我们最初没有注意到这也是一个问题)增加了约250倍!