显示服务器 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 拓扑是预期的,并且已正确映射到宿主机。
如果管理员允许,最终用户可以通过更改默认策略规则来拥有上述所有功能。
提议的变更¶
在 Nova 中,InstanceNUMATopology 对象包含一组相关的属性,例如由 NUMA 单元管理的内存量以及 vCPU 线程到逻辑宿主机处理器的映射。此规范提出一个 API 来呈现 NUMA 信息、cpu 拓扑和内存页大小。
此规范建议在 servers API 中添加一个新的子资源 topology
GET /servers/{server_id}/topology
默认情况下,此 API 仅供管理员使用,可以通过更改默认策略规则将其暴露给用户/角色。
拓扑 API 返回服务器的 NUMA 单元信息,包括内存、cpuset、兄弟节点、CPU pinning、宿主机 NUMA 节点编号、cpu 拓扑和页大小。
如果没有可用的 NUMA 信息,则相应键的值将简单地设置为 None。
备选方案¶
与其将此信息放入 GET /servers/{server_id}/topology 中,还有另外两个选项
将 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,
# control by policy TOPOLOGY % 'index:host_info'
# 0:5 means vcpu 0 pinning to pcpu 5
"cpu_pinning": {0:5, 1:6, 2:3, 3:8},
"vcpu_set": [0,1,2,3],
"siblings": [[0,1],[2,3]],
"memory_mb": 1024,
}
...
], # nodes
"cpu_topology": {
# toltal sockets
"sockets":2,
# cores per socket
"cores":10,
# thread per core
"threads":2
}
"pagesize_kb": 4,
}
安全影响¶
此 API 暴露的细粒度信息默认情况下仅供管理员使用,并且控制策略
TOPOLOGY % 'index:host_info'用于将仅限宿主机的保留给管理员,同时将此 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, "Show the host specific topology data for a servers", [ { 'method': 'GET', 'path': '/servers/{server_id}/topology' } ]), ]
通知影响¶
N/A
其他最终用户影响¶
python novaclient 和 python-openstackclient 应该扩展以显示 numa_topology 信息。
性能影响¶
无
其他部署者影响¶
N/A
开发人员影响¶
N/A
升级影响¶
N/A
实现¶
负责人¶
- 主要负责人
Yongli He
工作项¶
为此更改添加一个新的 microversion。
依赖项¶
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 |
首次引入 |