实时¶
13.0.0 版本新增: (Mitaka)
Nova 支持为实例配置实时策略。这建立在 CPU 固定 提供的改进性能之上,为 vCPU 提供更强的最坏情况调度器延迟保证。
启用实时¶
目前,只有在使用 libvirt 计算驱动程序,并且 libvirt.virt_type 为 kvm 或 qemu 时,才支持创建实时实例。它需要对主机进行广泛的配置,本文档仅提供所需更改的粗略概述。配置将根据您的硬件、BIOS 配置、主机和客户机操作系统以及应用程序而有所不同。
BIOS 配置¶
按照 rt-wiki 页面中的建议配置您的主机 BIOS。最重要的步骤是
禁用电源管理,包括 CPU 睡眠状态
禁用 SMT(超线程)或与逻辑处理器相关的任何选项
这些是基准测试中使用的标准步骤,因为这两组特性都可能导致非确定性行为。
操作系统配置¶
这本质上取决于使用的发行版,但是,有一些常见的步骤
安装实时(可抢占式)内核 (
PREEMPT_RT_FULL) 和实时 KVM 模块配置巨页
将用于实例的主机核心从内核中隔离出来
禁用 CPU 频率缩放等功能(例如,Intel 处理器上的 P 状态)
RHEL 及其衍生发行版(如 CentOS)在其仓库中提供软件包来完成此操作。 kernel-rt 和 kernel-rt-kvm 软件包将分别提供实时内核和实时 KVM 模块,而 tuned-profiles-realtime 软件包将提供 tuned 配置文件,以配置主机以用于实时工作负载。有关更多信息,请参阅您的发行版文档。
验证¶
配置完 BIOS 和主机操作系统后,您可以使用 hwlatdetect 和 rteval 工具验证“实时就绪”状态。在 RHEL 及其衍生主机上,您可以使用 rt-tests 软件包安装这些工具。有关 rteval 工具的更多信息,可以在 此处 找到。
配置 flavor 或镜像¶
22.0.0 版本更改: (Victoria)
以前,当通过 hw:cpu_realtime 启用实时模式时,必须指定 hw:cpu_realtime_mask。从 Victoria 开始,当使用 hw:emulator_threads_policy 额外规格配置模拟器线程策略时,可以省略此步骤,从而可以将所有客户机核心分配为实时核心。
22.0.0 版本更改: (Victoria)
以前,在指定 hw:cpu_realtime_mask 的值时,需要前导插入号,并且省略它等同于未设置掩码,导致实例无法启动。
与配置主机相比,配置客户机相对简单,只需要结合风味额外规格和镜像元数据属性,以及合适的实时客户机操作系统即可。
通过将 hw:cpu_realtime 风味额外规格设置为 yes 或一个真值来启用实时。配置此项后,需要指定应将客户机开销进程安排到哪里。这可以通过三种方式之一完成。首先,可以使用 hw:cpu_realtime_mask 额外规格或等效的镜像元数据属性来指示应将哪些客户机核心安排为实时核心,并将剩余的核心安排为非实时核心以处理开销进程。例如,要将 8 核实例的前两个核心分配为非实时核心
$ openstack flavor set $FLAVOR \
--property hw:cpu_realtime=yes \
--property hw:cpu_realtime_mask=2-7 # so 0,1 are non-real-time
在此配置中,任何配置的非实时核心都将应用隐式的 dedicated CPU 固定策略。可以通过通过 hw:cpu_policy 额外规格指定 mixed CPU 固定策略 来为这些非实时核心应用 shared 策略。这可以用于提高主机资源利用率。例如
$ openstack flavor set $FLAVOR \
--property hw:cpu_policy=mixed \
--property hw:cpu_realtime=yes \
--property hw:cpu_realtime_mask=2-7 # so 0,1 are non-real-time and unpinned
最后,您可以使用 hw:emulator_threads_policy 额外规格显式 将客户机开销进程卸载到另一个主机核心。例如
$ openstack flavor set $FLAVOR \
--property hw:cpu_realtime=yes \
--property hw:emulator_thread_policy=share
注意
模拟器线程固定需要额外的主机配置。有关更多信息,请参阅 文档。
除了配置实例 CPU 之外,您可能还需要配置客户机巨页。有关如何配置这些页面的信息,请参阅 文档