1.6. OpenStack Workflow Compute CPU 和内存计算器

OpenStack 工作流计算 CPU 和内存的最佳设置,并使用结果填充 NovaReservedHostMemoryNovaCPUAllocationRatio 参数。

NovaReservedHostMemory

NovaReservedHostMemory 参数设置为主机节点保留的内存量(以 MB 为单位)。要确定超线程节点的适当值,假设每个 OSD 消耗 3 GB 内存。根据具有 256 GB 内存和 10 个 OSD 的节点,您可以为 Ceph 分配 30 GB 内存,为 Compute 保留 226 GB。例如,节点可以托管内存,例如 113 个实例使用 2 GB 内存。

但是,您仍然需要考虑 虚拟机监控程序 的每个实例的额外开销。假设这个开销为 0.5 GB,则同一节点只能托管 90 实例,这些实例将 226 GB 划分为 2.5 GB。为主机节点保留的内存量(即计算服务不应该使用的内存)是:

(在站 Ov 中)+(Os114 RA)

其中:

  • 中:实例数量
  • OV :每个实例所需的开销内存量
  • OS :节点上的 OSD 数量
  • RA :每个 OSD 应该具有的 RAM 量

使用 90 个实例时,这为我们(9039) 0.5)+(1039) 3)= 75 GB。Compute 服务需要这个值(以 MB 为单位),即 75000。

以下 Python 代码提供了这个计算:

left_over_mem = mem - (GB_per_OSD * osds)
number_of_guests = int(left_over_mem /
    (average_guest_size + GB_overhead_per_guest))
nova_reserved_mem_MB = MB_per_GB * (
    (GB_per_OSD * osds) +
    (number_of_guests * GB_overhead_per_guest))

NovaCPUAllocationRatio

在选择要在其上部署实例的 Compute 节点时,计算调度程序使用 NovaCPUAllocationRatio。默认情况下,这是 16.0 (如 16:1)。这意味着,如果节点上有 56 个内核,计算调度程序会在考虑节点无法托管之前,调度足够实例,使其在节点上消耗 896 个 vCPU。

为超线程节点确定合适的 NovaCPUAllocationRatio,假设每个 Ceph OSD 至少使用一个内核(除非工作负载是 I/O 密集型,并在没有 SSD 的节点上)。在具有 56 个内核和 10 个 OSD 的节点上,这会为 Compute 保留 46 个内核。如果每个实例使用 100 个接收的 CPU,则比率将只是以内核数划分的实例 vCPU 数量;即 46 / 56 = 0.8。但是,由于实例通常不会消耗其分配的 CPU 消耗的 100 个,因此您可以在确定所需客户机 vCPU 数量时考虑预期百分比来提高 NovaCPUAllocationRatio

因此,如果我们可以预测实例只针对其 vCPU 使用 10 个 vCPU,那么实例的 vCPU 数量可以被表示为 46 / 0.1 = 460。当这个值除以内核数(56)时,比率会增加到大约 8。

以下 Python 代码提供了这个计算:

cores_per_OSD = 1.0
average_guest_util = 0.1 # 10%
nonceph_cores = cores - (cores_per_OSD * osds)
guest_vCPUs = nonceph_cores / average_guest_util
cpu_allocation_ratio = guest_vCPUs / cores