Virt 驱动程序固定客户机 vCPU 线程策略¶
https://blueprints.launchpad.net/nova/+spec/virt-driver-cpu-thread-pinning
此功能旨在实现 virt-driver-cpu-pinning 规范中剩余的功能。 这包括实现对线程策略的支持。
问题描述¶
某些应用程序必须表现出实时或接近实时的行为。 这通常可以通过利用处理器亲和性和将 vCPU 绑定到 pCPU 来实现。 此功能当前存在于 Nova 中。 然而,在启用同时多线程 (SMT) 的系统中,也需要考虑线程亲和性。 在这些系统中,对共享资源的竞争可能导致不可预测的行为。
用例¶
根据正在执行的工作负载,最终用户或云管理员可能希望控制客户机如何使用超线程。 为了最大化缓存效率,客户机可能希望被固定到线程兄弟。 相反,客户机可能希望避免线程兄弟(即仅固定到一个兄弟)甚至避免完全带有线程的主机。 这种级别的控制对于网络功能虚拟化 (NFV) 部署尤其重要,这些部署关心最大化 vCPU 的缓存效率。
项目优先级¶
无
提议的变更¶
Flavor 附加规格将被增强,以支持一个新参数
hw:cpu_threads_policy=avoid|separate|isolate|prefer
此策略是已实现的 CPU 策略参数的扩展
hw:cpu_policy=shared|dedicated
线程策略将控制调度程序/virt 驱动程序如何将客户机放置在 CPU 线程方面。 它仅在调度程序策略为“dedicated”时适用
avoid:调度程序不会将客户机放置在具有超线程的主机上。
separate:如果主机具有线程,则每个 vCPU 将被放置在不同的核心上。 也就是说,没有两个 vCPU 将被放置在线程兄弟上
isolate:如果主机具有线程,则每个 vCPU 将被放置在不同的核心上,并且来自其他客户机的任何 vCPU 都无法被放置在同一核心上。 也就是说,保证始终有一个线程兄弟未被使用。
prefer:如果主机具有线程,则 vCPU 将被放置在同一核心上,因此它们是线程兄弟。
镜像元数据属性也将允许指定线程策略
hw_cpu_threads_policy=avoid|separate|isolate|prefer
只有当 flavor 尚未设置线程策略时,才会遵守此设置。 这确保了云管理员可以完全控制线程策略(如果需要)。
备选方案¶
无。
数据模型影响¶
无。
必要的更改已在原始规范中完成。
REST API 影响¶
没有影响。
现有的 API 已经支持 flavor 附加规格中的任意数据。
安全影响¶
没有影响。
通知影响¶
没有影响。
通知系统未被此更改使用。
其他最终用户影响¶
没有影响。
Python 客户端中已经支持 flavor extra specs。
性能影响¶
无。
CPU 策略的支持已经存在,这仅仅是对该功能的扩展。
其他部署者影响¶
云管理员将能够定义具有显式线程策略的 flavor。 虽然此设计不需要,但预计管理员通常会使用相同的主机聚合来分组主机,用于 CPU 固定和大型页面使用,因为这些概念是互补的,并且预计会一起使用。 这将最大限度地减少配置主机聚合的管理负担。
开发人员影响¶
预计大多数 hypervisor 都有能力支持所需的线程策略。 flavor 参数足够简单,任何 Nova 驱动程序都能够支持它。
实现¶
负责人¶
- 主要负责人
sfinucan
工作项¶
增强调度程序,以便在选择将客户机放置在哪个宿主机上时,考虑线程策略。
增强调度程序,以便在将 vCPU 映射到 pCPU 时考虑线程策略
依赖项¶
无。
测试¶
目前,由于有效的测试需要为运行测试的客户机提供多个 NUMA 节点,而每个 NUMA 节点又包含多个 CPU,因此此时使用 gate 和 tempest 测试此功能是不切实际的。
这些功能将使用第三方 CI(Intel Compute CI)进行验证。
文档影响¶
无。
文档更改已在之前的更改中完成。
参考资料¶
当前关于 CPU 和内存资源利用率和放置主题的“大图景”研究和设计。 vCPU 拓扑是这项工作的一个子集
当前的 Intel Compute CI CPU 固定验证测试
现有的 CPU 固定规范
历史¶
发布名称 |
描述 |
|---|---|
Liberty |
引入 |