资源限制¶
Nova 支持配置单个资源的限制,包括 CPU、内存、磁盘和网络。这些限制可用于对这些资源强制执行基本的服务质量 (QoS) 策略。
注意
超visor 强制的资源限制与 API 强制的用户和项目配额不同。有关后者,请参阅 管理配额。
配置资源限制¶
资源配额强制支持特定于计算主机上使用的 virt 驱动程序。
libvirt¶
libvirt 驱动程序支持 CPU、磁盘和 VIF 限制。不幸的是,所有这些都以不同的方式工作,如下文所述。
CPU 限制¶
Libvirt 通过 quota:cpu_shares 和 quota: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_sec、quota:disk_write_bytes_sec 和 quota:disk_total_bytes_sec 附加规格,分别。它还可以通过每秒最大磁盘读取、写入和总 I/O 操作数来强制执行磁盘限制,使用 quota:disk_read_iops_sec、quota:disk_write_iops_sec 和 quota: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_average 和 quota:vif_outbound_average 附加规格,分别。此外,可以为入站和出站流量指定可选的峰值值,该值指定桥接器可以发送数据的最大速率(kB/s),以及突发值,该值指定可以在峰值速度下突发的字节数(千字节),使用 quota:vif_inbound_peak / quota:vif_outbound_peak 和 quota: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_share、quota:cpu_limit 和 quota:cpu_reservation 附加规格配置的最小预留。
可以使用以下之一指定分配级别:high、normal、low 或 custom。当指定 custom 时,必须使用例如 quota:cpu_shares_share 指定份额数。没有单位,值相对于主机上的其他实例。相比之下,上限和预留以资源特定单位衡量,例如 CPU 的 MHz,将确保实例永远不会使用超过或获得低于指定数量的资源。
CPU 限制¶
CPU 限制通过 quota:cpu_shares_level / quota:cpu_shares_share、quota:cpu_limit 和 quota: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_share、quota:memory_limit 和 quota: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_share、quota:disk_io_limit 和 quota: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_share、quota:vif_limit 和 quota: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