【译文】如何调整vMotion以缩短迁移时间?

四月的奥德赛 VMware 114 次浏览 没有评论

在较早的博客文章”幕后的vMotion流程”中,我们介绍了vMotion流程的内部结构。 现在,我们了解了vMotion的工作原理,让我们回顾一下当今拥有的一些选项,以进一步缩短迁移时间。 启用后,默认情况下,vMotion可以正常运行。 但是,随着高带宽网络迅速成为主流,我们应该怎么做才能充分利用25、40甚至100GbE NIC的优势? 这篇博客文章详细介绍了vMotion可调参数以及它们如何帮助优化流程。

 

流和线程

要了解如何调整vMotion性能并从而减少实时迁移时间,我们首先需要了解vMotion流的概念。 vMotion中的流传输体系结构最早是在vSphere 4.1中引入的,此后一直在开发和改进。 执行实时迁移的先决条件之一是配置vMotion网络。 作为启用vMotion的一部分,您至少需要为适用的ESXi主机上的vMotion流量启用一个VMkernel接口。

 

 

当您具有为vMotion启用的VMkernel接口时,将实例化单个vMotion流。 一个vMotion流包含三个助手:

     完成助手; 支持vMotion进程。
     加密助手; 当使用Encrypted vMotion时,用于加密和解密流量。
     流助手; 负责将数据放在网络上。

 

 

” helper”一词在内部使用,但实际上是一个线程。 一个线程能够消耗一个CPU内核。 查看实时迁移时间,迁移的持续时间在很大程度上取决于迁移模块将内存从源传输到目标ESXi主机所消耗的带宽。 但是,我们仅受一个流助手的约束,因此一个线程等于一个CPU内核。 虽然在使用现代CPU软件包和10GbE网络时通常不会造成问题,但在使用25GbE或更高带宽的NIC和网络时确实会成为一个挑战。 一个vMotion流不会充分利用25GbE或更高的NIC。

 

 

Scale vMotion性能

我们确实有办法减轻被一个CPU内核约束的风险。 最直接的解决方案是实例化更多包含流助手的vMotion流。 为此,我们有两个选择。

选项1:多个VMkernel接口

可能最简单的方法是使用相同的NIC和网络配置多个VMkernel接口。 不要将此与Multi-NIC vMotion混淆。 这就是确保将vMotion流量分布在多个1或10GbE NIC上的全部方法,因为这些速度很容易达到饱和。 我们正在讨论如何提高单个NIC上vMotion的带宽利用率。 这样,我们减少了实时迁移时间。

 

 

使用为vMotion启用的每个创建的VMkernel接口,都会生成一个新的vMotion流。 每个流都包含讨论的助手。 多个流助手可帮助在vMotion网络上放置更多数据,并通过这样做来利用更多带宽在vMotion网络上复制内存页面,从而减少了在源ESXi主机与目标ESXi主机之间进行内存融合所需的时间。 这样可以更快地完成vMotion操作。

 

 

单个vMotion流具有15 GbE的平均带宽利用率。 当我们查看各种NIC速度时,将得出以下结果:

     25 GbE:1个流=〜15 GbE
     40 GbE:2个流=〜30 GbE
     50 GbE:3个流=〜45 GbE
     100 GbE:6个流=〜90 GbE

这意味着您将需要在单个ESXi主机上使用六个vMotion VMkernel接口,以便能够通过100GbE NIC有效地使用可用带宽。

创建其他VMkernel接口的缺点是操作开销。 所有VMkernel接口都需要在所有ESXi主机上创建,并且需要IP地址。 大规模执行此操作会对vSphere管理任务产生重大影响。 使用PowerCLI可以很容易地自动完成此任务,但是仍然需要其他IP地址。

选项2:调整单个vMotion VMkernel性能

我们还有另一种选择。 与第一个选项一样,使用此选项将避免VMkernel接口蔓延和所需的IP地址。 但是,这是一个非常高级的选项,需要在每个ESXi主机上进行手动配置。 我们能够对vMotion流助手和每个为vMotion流量启用的每个VMkernel接口的Rx队列的默认数量强制执行设置。

注意:在此博客文章的第一版中,我提到了需要vsi Shell更改我们将要讨论的设置的必要。 幸运的是,我们还有其他方法。

为了实现每个VMkernel接口和Rx队列更多的vMotion流,我们首先研究以下设置:

 

上面的屏幕截图显示了vsi Shell中两个可配置项的默认值。由于不建议对vsi Shell进行永久更改,因此,我们找到与vsi Shell等效项相关的ESXi主机高级设置。

/ net / tcpip / defaultNumRxQueue转换为高级设置Net.TcpipRxDispatchQueues
/ config / Migrate / intOpts / VMotionStreamHelpers转换为高级设置Migrate.VMotionStreamHelpers

请务必注意,默认情况下,设置VMotionStreamHelpers设置为” 0″,该设置是为每个IP动态分配一个流的设置。由于这可能会在将来的版本中更改,因此,当您将此设置调整为另一个值时请注意。当我们将VMotionStreamHelpers设置配置为另一个值时,TcpipRxDispatchQueues设置应相应更改。请注意,增加TcpipRxDispatchQueues要求它消耗更多的主机内存。

为了更改这些设置,我们可以简单地在UI中配置ESXi主机高级设置。在这些示例中,我们将它们配置为每个VMkernel接口具有两个Rx队列和两个流助手。

 

Next to the UI, you can also PowerCLI to perform the same task:

Get-AdvancedSetting -Entity <esxi host> -Name Net.TcpipRxDispatchQueues | Set-AdvancedSetting -Value ‘2’

Get-AdvancedSetting -Entity <esxi host> -Name Migrate.VMotionStreamHelpers | Set-AdvancedSetting -Value ‘2’

调整完两个设置后,请确保重新引导ESXi主机,以使它们生效。 使用此选项,我们有一个VMkernel界面,但在后台启动了多个助手。

 

 

虽然这是一个不错的解决方案,但要实现它,需要手动配置并重新引导ESXi主机。

结果

最后,我们希望实现一种方案,在该方案中,我们可以有效地将可用带宽用于vMotion。 这也意味着我们的CPU利用率更高,因为现在我们使用多个线程,因此使用多个CPU内核。 尤其是在工作负载较大的情况下,调整vMotion可以大大缩短迁移时间。

结论

很高兴知道,今天,vMotion为高带宽网络提供了多种选择。 但是,这两个选项都需要手动配置。 而且,尽管您可以使所涉及的操作自动化,但我们希望它对您来说更加简单。 这就是为什么我们正在考虑以更加动态的方式来做完全相同的事情。 如果将来的vSphere版本能够检测网络和NIC带宽以及用于相应调整vMotion可调参数的详细信息,那就太好了。 目前,您可以从手动选项中受益。

 

发表评论

Go