我试图了解 vCPU 的过度分配与 vCPU 的过度订阅之间的区别。
为了回答这个问题,我们假设我将使用的主机有一个 16 核 Xeon(2.1Ghz)。
根据我的研究,超额订阅是指虚拟机订阅的资源多于 ESXi 主机上可用的资源。因此,通常资源与订阅的比例最好为 1:1,但建议为 1:3。因此,如果我启用了超线程,我将总共拥有 32 个 vCPU,而建议的超额订阅将是主机上所有虚拟机总共 32*3 = 96 个 vCPU。我的看法正确吗?还是超额订阅不应考虑超线程?
当我查看 vCPU 资源分配时,我发现您可以保留、限制或优先处理 vCPU 资源。假设我的主机以 339 Mhz 保留最低 vCPU 资源,以下假设是否正确:
1) 无超线程的 vCPU(16)-> 总计 336000 Mhz -> 99 个单 vCPU VM
2) 具有超线程的 vCPU (32) -> 总计 672000 Mhz -> 198 个单 vCPU VM
如果上述场景中有几个虚拟机具有不同的最大限制,并且它们同时需要 vCPU 资源,会发生什么情况?过度分配是否表示使用的资源多于一个 vCPU 可以提供的资源?例如,一个 vCPU 有 2.1Ghz,但对于单个虚拟机,我保留了 2.5Ghz,因此它必须从另一个 vCPU“借用”资源。
答案1
您正在尝试从最困难的一端(CPU 资源)来理解问题。从内存角度来理解会更容易一些。
主机有 x 量的内存,主机为自己的邪恶目的保留 y 量的内存(顺便说一下,这遵循公式,最初为 a MB,每个启动的虚拟机为 b MB)。如果您不允许超额订阅/分配,则您为虚拟机分配总计 x - y 的内存,并且每个虚拟机始终可以获得分配给它的内存。但是,这非常低效,因此您通常会为机器分配过多的内存。如果您的策略规定 3:1 是可以的,那么您可以为虚拟机分配 3*(xy)(或实际上是 3x,因为 VMware ESXi 所需的量与总内存相比微不足道)。
如果主机内存不足,它会首先尝试内存膨胀(从 95% 的利用率开始),通过 VMtools 开始向客户操作系统请求内存,然后删除它获得的所有页面(因为操作系统提供给内存膨胀驱动程序的任何内容当前都没有被操作系统使用,因此可以安全删除)。如果这没有帮助,ESXi 会像其他操作系统一样在内存不足时执行操作,开始将内存交换到磁盘。不过 ESXi 会按每个虚拟机执行此操作(因为它必须考虑份额、预留和限制)。
vCPU 的工作方式略有不同,因为它在技术上不像内存和磁盘那样是一种资源(我的意思是,20 核 2 GHz CPU 现在与 1 核 40 GHz CPU 不一样,不是吗?)。首先,超线程不会为您提供两倍的核心数量,官方 VMware 数据是 HT 可为您提供约 10-30% 的性能提升。其次,vCPU 是多路复用的,因此调度程序会在 pCPU 上为不同的 vCPU 提供时间段。因此,如果您的主机上有 8 核 CPU,它可以在同一时钟周期运行 8 个 1-vCPU VM,或 1 个 8-vCPU。这会给您带来一个问题,即在负载较高的主机上,您可能会通过为 VM 分配更多核心而看到性能下降,因为调度程序很难找到足够大的时间段来运行更大的 VM。
共享、保留和限制是解决部分此类问题的方法。
预订是一种保证,也就是说,如果您为虚拟机预留 500 MHz,则无论主机上发生什么情况,虚拟机管理程序都会为其提供 500 MHz。但是,如果预留目前未被使用,它会暂时将资源提供给另一台虚拟机(因此您永远不会通过设置预留而浪费资源)。
限制另一方面,为资源设置一个硬性“上限”或上限。如果您希望虚拟机相信它拥有的资源比它实际能够获得的资源多,那么这种方法就很有用。除了欺骗软件供应商之外,这种方法目前实际上没有任何实际用途(在早期的 ESXi 版本中,它被用作通过删除限制来获得热添加内存的一种方式),而且在这方面也没有什么用处。限制是严格执行的,因此,如果您为配置了 4 GB 的计算机分配 1 GB 内存的限制,那么该计算机将永远不会获得超过 1 GB 的物理内存。
分享略有不同,它们允许您在涉及不同资源时“衡量”特定 VM 的“重要性”。在 ESXi 中,每个 VM 都是平等的,当争夺资源时,2 个 VM(每个 VM 有 1000 个份额)将获得 50% 的资源。通过将份额更改为 3000 对 1000,您可以将划分更改为 75%/25%。只有在 VM 争夺资源时才使用份额。
因此,要真正回答您的问题,过度分配意味着您在具有 16 核 CPU(无 HT)的主机上为您的虚拟机分配例如 32 个 vCPU(每个 2 GHZ)。您的 CPU 有 32 GHZ“可用”,但您已为虚拟机分配了 64 GHz。这是 2 比 1 的过度分配/订阅。但是,如果您对服务器有所了解,就会知道它们大多数时间都处于空闲状态,因此您的主机可能不会看到超过 16 GHz 的负载。但是,从理论上讲,这种设置可能会产生对 64GHz 的需求,这会使您的主机陷入困境。HT 对这些计算没有多大用处,但您可以在“非 HT”GHz 值的基础上增加 25% 以了解它的好处。