资源限制

Nova 支持配置单个资源的限制,包括 CPU、内存、磁盘和网络。这些限制可用于对这些资源强制执行基本的服务质量 (QoS) 策略。

注意

超visor 强制的资源限制与 API 强制的用户和项目配额不同。有关后者,请参阅 管理配额

警告

此功能测试不足且维护不足。它可能不再按预期工作。在可能的情况下,请考虑使用其他服务提供的 QoS 策略,例如 CinderNeutron

配置资源限制

资源配额强制支持特定于计算主机上使用的 virt 驱动程序。

libvirt

libvirt 驱动程序支持 CPU、磁盘和 VIF 限制。不幸的是,所有这些都以不同的方式工作,如下文所述。

CPU 限制

Libvirt 通过 quota:cpu_sharesquota:cpu_period / quota:cpu_quota 配置的份额配额来强制执行 CPU 限制,分别。两者都使用 cgroups cpu controller 实现。请注意,份额的允许值取决于平台。

CPU 份额是相对于其他实例的总 CPU 资源的按比例加权份额。如果 CPU 不繁忙,它不会限制 CPU 使用量。没有单位,该值纯粹相对于其他实例,因此配置值为 2048 的实例将获得配置值为 1024 的 VM 两倍的 CPU 时间。例如,要为 flavor 配置 CPU 份额 1024

$ openstack flavor set $FLAVOR --property quota:cpu_shares=1024

CPU 配额需要周期和配额。CPU 周期指定以微秒为单位的强制执行间隔,而 CPU 配额指定每个实例的每个 vCPU 可以消耗的最大允许带宽(微秒)。CPU 周期必须在 1000 (1mS) 到 1,000,000 (1s) 或 0 (禁用) 的范围内。CPU 配额必须在 1000 (1mS) 到 2^64 或 0 (禁用) 的范围内。如果 CPU 配额超过 CPU 周期,这意味着 guest vCPU 进程能够消耗多个 pCPU 带宽。例如,要限制每个 guest vCPU 在每个周期内的运行时

$ openstack flavor set $FLAVOR \
    --property quota:cpu_period=1000 \
    --property quota:cpu_quota=1000

要限制每个 guest vCPU 在每个周期内的运行时为 2 个 pCPU

$ openstack flavor set $FLAVOR \
    --property quota:cpu_period=1000 \
    --property quota:cpu_quota=2000

最后,要限制每个 guest vCPU 在每个周期内的运行时为 0.5 个 pCPU

$ openstack flavor set $FLAVOR \
    --property quota:cpu_period=1000 \
    --property quota:cpu_quota=500

注意

较短的周期将以牺牲突发容量为代价,确保一致的延迟响应。

CPU 份额和 CPU 配额可以协同工作。例如,如果两个实例配置了 quota:cpu_shares=1024 和 quota:cpu_period=100000 (100mS) ,然后将两者都配置为 quota:cpu_quota=75000 (75mS) 将导致它们平等地共享主机 CPU,两者都将获得恰好 50mS 的 CPU 时间。如果只有一台实例获得 quota:cpu_quota=75000 (75mS) 而另一台实例获得 quota:cpu_quota=25000 (25mS) ,那么第一台将获得每个周期 3/4 的时间。

内存限制

libvirt 驱动程序不支持内存限制。

磁盘 I/O 限制

Libvirt 通过每秒最大磁盘读取、写入和总字节数来强制执行磁盘限制,使用 quota:disk_read_bytes_secquota:disk_write_bytes_secquota:disk_total_bytes_sec 附加规格,分别。它还可以通过每秒最大磁盘读取、写入和总 I/O 操作数来强制执行磁盘限制,使用 quota:disk_read_iops_secquota:disk_write_iops_secquota:disk_total_iops_sec 附加规格,分别。例如,要为 flavor 设置最大磁盘写入速度 10 MB/sec

$ openstack flavor set $FLAVOR \
    --property quota:disk_write_bytes_sec=10485760

网络带宽限制

警告

这些限制通过 libvirt 强制执行,并且仅当网络通过 tap 接口连接到实例时才有效。它不适用于 SR-IOV VFs 等。应尽可能使用 Neutron 的 QoS 策略

Libvirt 通过入站和出站平均值来强制执行网络带宽限制,使用 quota:vif_inbound_averagequota:vif_outbound_average 附加规格,分别。此外,可以为入站和出站流量指定可选的峰值值,该值指定桥接器可以发送数据的最大速率(kB/s),以及突发值,该值指定可以在峰值速度下突发的字节数(千字节),使用 quota:vif_inbound_peak / quota:vif_outbound_peakquota:vif_inbound_burst / quota:vif_outbound_burst 附加规格,分别。

例如,要配置出站流量的平均值为 262 Mbit/s(32768 kB/s),峰值为 524 Mbit/s 和突发值为 65536 千字节

$ openstack flavor set $FLAVOR \
    --property quota:vif_outbound_average=32768 \
    --property quota:vif_outbound_peak=65536 \
    --property quota:vif_outbound_burst=65536

注意

上述示例中的速度限制值以千字节/秒为单位指定,而突发值以千字节为单位。

VMWare

与 libvirt 相比,VMWare virt 驱动程序使用一致的术语强制执行资源限制,具体而言,通过相对分配级别、硬上限和通过例如 quota:cpu_shares_level / quota:cpu_shares_sharequota:cpu_limitquota:cpu_reservation 附加规格配置的最小预留。

可以使用以下之一指定分配级别:highnormallowcustom。当指定 custom 时,必须使用例如 quota:cpu_shares_share 指定份额数。没有单位,值相对于主机上的其他实例。相比之下,上限和预留以资源特定单位衡量,例如 CPU 的 MHz,将确保实例永远不会使用超过或获得低于指定数量的资源。

CPU 限制

CPU 限制通过 quota:cpu_shares_level / quota:cpu_shares_sharequota:cpu_limitquota:cpu_reservation 附加规格配置。

例如,要配置分配级别为 custom 且份额为 1024

$ openstack flavor set $FLAVOR \
    --quota:cpu_shares_level=custom \
    --quota:cpu_shares_share=1024

要配置最小 CPU 分配为 1024 MHz,最大值为 2048 MHz

$ openstack flavor set $FLAVOR \
    --quota:cpu_reservation=1024 \
    --quota:cpu_limit=2048

内存限制

内存限制通过 quota:memory_shares_level / quota:memory_shares_sharequota:memory_limitquota:memory_reservation 附加规格配置。

例如,要配置内存分配级别为 custom 且份额为 1024

$ openstack flavor set $FLAVOR \
    --quota:memory_shares_level=custom \
    --quota:memory_shares_share=1024

要配置最小内存分配为 1024 MB,最大值为 2048 MB

$ openstack flavor set $FLAVOR \
    --quota:memory_reservation=1024 \
    --quota:memory_limit=2048

磁盘 I/O 限制

磁盘 I/O 限制通过 quota:disk_io_shares_level / quota:disk_io_shares_sharequota:disk_io_limitquota:disk_io_reservation 附加规格配置。

例如,要配置磁盘 I/O 分配级别为 custom 且份额为 1024

$ openstack flavor set $FLAVOR \
    --quota:disk_io_shares_level=custom \
    --quota:disk_io_shares_share=1024

要配置最小磁盘 I/O 分配为 1024 MB,最大值为 2048 MB

$ openstack flavor set $FLAVOR \
    --quota:disk_io_reservation=1024 \
    --quota:disk_io_limit=2048

网络带宽限制

网络带宽限制通过 quota:vif_shares_level / quota:vif_shares_sharequota:vif_limitquota:vif_reservation 附加规格配置。

例如,要配置网络带宽分配级别为 custom 且份额为 1024

$ openstack flavor set $FLAVOR \
    --quota:vif_shares_level=custom \
    --quota:vif_shares_share=1024

要配置最小带宽分配为 1024 Mbits/sec,最大值为 2048 Mbits/sec

$ openstack flavor set $FLAVOR \
    --quota:vif_reservation=1024 \
    --quota:vif_limit=2048