目录
写在前面
最近太忙了,笔者实在懒得画图,文章的图片大多来源于互联网,感谢创作者们(可惜找不到源出处)。
这篇博文与其说是介绍 OpenStack Nova 的高性能虚拟机,倒不如说是介绍 CPU 相关的硬件架构与应用程序之间的爱恨情仇更加贴切一些。
Nova 实现的 NUMA 亲和
在 Icehouse 版本之前,Nova 定义的 libvirt.xml,不会考虑 Host NUMA 的情况。导致 Libvirt 在默认情况下,有可能发生跨 NUMA node 获取 CPU/Memory 资源的情况,导致 Guest 性能下降。Openstack 在 Juno 版本中新增 NUMA 特性,用户可以通过将 Guest 的 vCPU/Memory 绑定到 Host NUMA Node上,以此来提升 Guest 的性能。
Nova 定义的 NUMA 对象概念
除了上文中提到的 NUMA 基本概念之外,Nova 还自定义一些对象概念:
- Cell:NUMA Node 的通名词,供 Libvirt API 使用
- vCPU:虚拟机的 CPU,根据虚拟机 NUMA 拓扑的不同,一个虚拟机 CPU 可以是一个 socket、core 或 thread。
- pCPU:宿主机的 CPU,根据宿主机 NUMA 拓扑的不同,一个物理机 CPU 同样可以是一个 socket、core 或 thread。