显示服务器 NUMA 拓扑¶
将 NUMA 添加到新的子资源 GET /servers/{server_id}/topology API。
https://blueprints.launchpad.net/nova/+spec/show-server-numa-topology
问题描述¶
存在与服务器相关的 NUMA 信息,对最终用户和管理员都有用,但目前没有可用的 API 来检索这些信息。
API GET /servers 和 GET /servers/{id} 可以列出额外的规格,这些规格可能包含一些关于 guest numa 拓扑的提示,但很难解释。
用例¶
管理员希望在不登录到 guest VM 的情况下查看拓扑(RAM、CPU)。
管理员希望有一种统一的方式来获取拓扑信息,而与各种 guest OS 如何暴露它无关。
管理员希望了解一个或多个实例的虚拟到物理映射,以便进行调试,并且管理员需要确保 NUMA 拓扑是预期的,并且已正确映射到 Host。
如果管理员允许,最终用户可以拥有上述所有功能,方法是更改策略规则。
提议的变更¶
在 nova 中,NUMA 拓扑包含一组相关的属性,例如 NUMA 单元管理的内存量、NUMA 单元上支持的内存页大小、vCPU 线程到逻辑主机处理器的映射以及 cpu 线程策略。 本规范提出一个 API 来呈现所有这些 NUMA 信息,包括虚拟到物理的映射。
本规范建议在 servers API 中添加一个新的子资源 ‘topology’
GET /servers/{server_id}/topology
默认情况下,此 API 仅供管理员使用,可以通过更改默认策略规则将其暴露给用户/角色。
API 返回属于一个服务器的每个 cell 的信息,包括 socket、cpu、thread、mem、page size、cpuset、CPU pinned 信息、siblings、thread policy、CPU pinning、host NUMA node number。
如果没有可用的 NUMA 信息,则相应 key 的值将简单地设置为 None。
备选方案¶
与其将这些信息放入 GET /servers/{server_id}/topology 中,还有另外 2 个选项
将 NUMA 信息添加到现有的子资源
diagnostics中:GET /servers/{server_id}/diagnostics返回一个服务器的 NUMA 信息。 由于 NUMA 拓扑对于给定的服务器不会改变,因此最好将其放在新的topology子资源下。将 NUMA 信息放在
GET /servers/{id}和GET /servers/detail下。 这将对性能产生负面影响,因为它需要额外的数据库查询(通过InstanceNUMATopology对象的方法get_by_instance_uuid)。
数据模型影响¶
无
REST API 影响¶
API GET /servers/{server_id}/topology 将使用新的 microversion 显示 NUMA 信息。
NUMA 拓扑返回的信息
{
# overall policy: TOPOLOGY % 'index
"nodes":[
{
# Host Numa Node
# control by policy TOPOLOGY % 'index:host_info'
"host_numa_node": 3,
# 0:5 means vcpu 0 pinning to pcpu 5
# control by policy TOPOLOGY % 'index:host_info'
"cpu_pinning": {0:5, 1:6},
"vcpu_set": [0,1,2,3],
"siblings": [[0,1],[2,3]],
"memory_mb": 1024,
"pagesize_kb": 4096,
"sockets": 1,
"cores": 2,
# one core has at least one thread
"threads": 2
}
...
], # nodes
"cpu_thread_policy": "prefer"
}
安全影响¶
此 API 暴露的信息默认情况下仅供管理员使用,并且精细控制策略
TOPOLOGY % 'index:host_info'用于将仅限 host 的信息保留给管理员,而此 API 暴露给最终用户。添加新的
topology策略,默认情况下仅供管理员使用TOPOLOGY = 'os_compute_api:servers:topology:%s' server_topology_policies = [ policy.DocumentedRuleDefault( BASE_POLICY_NAME, base.RULE_ADMIN_API, "Show the topology data for a server", [ { 'method': 'GET', 'path': '/servers/{server_id}/topology' } ]), policy.DocumentedRuleDefault( # control host numa node and cpu pin information TOPOLOGY % 'index:host_info', base.RULE_ADMIN_API, "List all servers with detailed information", [ { 'method': 'GET', 'path': '/servers/{server_id}/topology' } ]), ]
通知影响¶
N/A
其他最终用户影响¶
python novaclient 和 python-openstackclient 将显示 numa_topology 信息。
性能影响¶
无
其他部署者影响¶
N/A
开发人员影响¶
N/A
升级影响¶
N/A
实现¶
负责人¶
- 主要负责人
Yongli He
工作项¶
为此更改添加新的微版本。
依赖项¶
N/A
测试¶
添加功能 api_sample 测试。
文档影响¶
API 文档应更改为介绍此新功能。
参考资料¶
Stein PTG 讨论:https://etherpad.openstack.org/p/nova-ptg-stein
邮件列表讨论:http://lists.openstack.org/pipermail/openstack-discuss/2018-December/001070.html
历史¶
发布名称 |
版本 |
|---|---|
Stein |
首次引入 |