Support High Precision Event Timer (HPET) on x86 guests
Generic os-vif datapath offloads
vRouter Hardware Offload Enablement
Train
Virtual Persistent Memory
NUMA Live migration
Add Support for live migration with neutron sriov vnic types
Tenant control of qemu performance monitoring unit
可用性(Usability)更新
Rocky
Use Neutron’s new port binding API
Stein
Default allocation ratio configuration
Live-Migration force after timeout
Train
Select cpu model from a list of cpu models
API 更新
Others
Rocky
Enhanced KVM Storage QoS
Libvirt file backed memory
Support for virtio-net rx/tx queue sizes
Per-instance serial number
zVM supports
Stein
live migraiton support for VMware
U release 展望
前言在今年(2019)的 9 月 22 号,笔者去参加了 OpenStack Q3 的 Meetup。这次 Meetup 的主题是技术,地点在北京,自然是没有错过的可能。本文主要是对大名鼎鼎的徐 Core 所做的演讲(OpenStack Nova Project Update (Rocky to Train))的一次学习总结与整理。
演进方向早前,我在《OpenStack 2018 年终盘点》一文中提到过:OPQ 这三个版本的工作重心是稳定性、易用性和运维能力的提升。那么 RST 就是此之上围绕着 Placement 参与到 Nova Scheduling 以及 Cellv2 的操作优化来展开。前者是从 Nova 孵化出来的一个全局的(集中式)资源登记与追踪 API(This is a REST API stack and data model used to track resource provider inventories and usages, along with different classes of resources.),自 Newton 引入,自 Stein 独立,详细可见 《OpenStack Placement Project》一文。
下文中归纳为 Cellv2、Nova Scheduling、NFV、可用性、API 以及 U release 展望等 6 个方面的功能更新。
Cellv2 更新 Rocky Support disabling a cell
支持执行 Cell 级别(以往只支持 Host 级别)的 Disable,新的请求不会发送到 Disabled Cell。 应用场景:运维人员可以 Disable 掉指定的 Cell,并对其进行管理和运维的工作。
NOTE:在 Disabled Cell 之后要对 nova-scheduler service 发一个挂起的信号,让 nova-scheduler service 刷新并 Cache 可用的 Cells。
Stein Handling a down cell
显示已经 Down 掉的 Cell 中最起码的 Instances 信息(Show minimal info than ignore the instance in the down cell.),例如:UUID、Flavor 等。以此提升用户的操作体验。
Train Count quota usage from placement
以往 User/Project 的 Quota 信息是持久化到 Cell DB 中的,这就导致了 Disabled Cell 之后会丢失一部分的 Quota 信息。所以将这个 Quota 信息持久化到全局的 Placement API 中,可以解决这个问题。 NOTE:该功能可以通过配置选项 CONF.quota.count_usage_from_placement 来主动开启,默认为 False。在 multiple deployments share same placement(边界)场景中建议关闭,因为 Placement 现在不支持分区域,所以会导致 Quota 计算重复累加;在 Placement 滚动升级场景中建议关闭,因为如果开启的话,那么 Nova API 会先检查一下 Placement 的 Data Migration 是否完成并支持 Count quota usage,如果不支持则 fallback(回退)到查 Cell DB 的方式。这个过程中存在性能损耗,建议都升级完成后开启。
Nova Scheduling 更新 Rocky Complex Anti-Affinity Policies
以往 Anti-Affinity Server Group 中的每台计算节点上都分别只能启动一个 Instance,现在通过 max_server_per_host 参数,可以设置 Server Group 中每台计算节点上最大的允许启动的 Instances 数量。 Report CPU features to the placement service
支持将计算节点的 CPU features 上报到 Placement,结合 Placement Traits 功能可以实现更加细致的(根据特征的)调度策略。 应用场景:某些虚拟机上运行的应用程序需要指定的 CPU features,那么就应该在 Flavor 上指定 Placement Traits 属性(e.g. HW_CPU_X86_AVX512VNNI)。 NOTE:暂时只支持 Libvirt Driver。 Support traits in Glance
以往只能在 Flavor 上支持自定义 Placement Traits 属性,现在在 Glance Image metadata 上也支持了。 应用场景:同理,如果某些镜像中已有的应用程序对运行环境有特殊要求,就可以为其设定 Placement Traits 属性(e.g. trait:HW_CPU_X86_AVX512VNNI=required)。当然了,前提是 Placement 已经登记了这个 Traits。
应用场景:用作 Redis 等 DB 的 Cache。 NOTE:暂不支持热迁移,不支持 NUMA 亲和。 NUMA Live migration
支持对 NUMA Instance 进行热迁移。以往对 NUMA Instance 进行热迁移的时候,没有重新计算 InstanceNUMATopology,现在改进了这一缺陷。如果用户希望在 Rocky 版本中使用该功能,可以通过配置 CONF.workaround.enable_numa_live_migration 开启,否则直接返回错误。 文档:https://specs.openstack.org/openstack/nova-specs/specs/rocky/approved/numa-aware-live-migration.html Add Support for live migration with neutron sriov vnic types
支持对 SR-IOV Instance 进行热迁移。
Indirect mode(间接模式):通过 macvtap 来进行转接(具有虚拟 MAC 地址),支持 Hypervisor(Libvirt)层面的热迁移,但性能肯定有损失(20%-30%)。实现方式是:Nova 会先到目的节点上获取 VF 的 MAC 地址等信息,然后重新生成 XML 并在目的节点上启动。
direct mode(直接模式):即透传,不支持 Hypervisor(Libvirt)层面的热迁移。因为此类虚拟机的迁移需要从源节点卸载 SR-IOV vNIC、再到目的节点挂载(只有物理 MAC 地址),显然就导致了网络的中断。workaround 的方式是:在热迁移前,先挂在一个 vSwitch vNIC,然后再进行热迁移,由这个 vSwitch vNIC 来承接 SR-IOV vNIC 断掉的流量。
Tenant control of qemu performance monitoring unit
可用性(Usability)更新 Rocky Use Neutron’s new port binding API
Nova 使用了新的 Neutron Port Binding API。以往虚拟机热迁移是虚拟机数据迁移完之后再进行 Port Binding,现在支持在迁移虚拟机数据之前进行 Port Binding,这样做有效的优化了:
Knowing the port binding failed early:无需再等待到虚拟机数据迁移完才只知道 Port Binding 失败。
minimal network downtime:更小的网络中断时长。
migrate between different ml2 backends:支持在不同的 ML2 backends(openvswitch、linuxbridge)中进行迁移。
Stein Default allocation ratio configuration
支持默认的 CPU、RAM、Disk 分配超分比。当前支持 nova.conf 和 Placement API 两种方式来修改 allocation ratio,但是后者的数值会被前者覆盖。所以由添加了 3 个新的 Default allocation ratio configuration,代表初始的数值,以此来代替了原来 nova.conf 的 3 个配置选项的作用。这样做之后,对 nova.conf 的修改和 Placement API 的修改就不会互相影响了,当以下三个选项配置为 None 之后,Nova 就只关心 Placement 的数值了。
initial_cpu_allocation_ratio
initial_ram_allocation_ratio
initial_disk_allocation_ratio
Live-Migration force after timeout
虚拟机热迁移支持 force_complete,所谓 force_complete 有两种情况:
Train Select cpu model from a list of cpu models
支持配置启动 Instance 的 CPU model 的列表,即 cpu_models:
Replace CONF.libvirt.cpu_model to CONF.libvirt.cpu_models
default choice the first cpu model in the list of CONF.libvirt.cpu_models.
With required CPU traits, will choice the first cpu model support that CPU traits.
应用场景:针对 Live-Migration 要求的 Instance CPU model 向下兼容的问题。以往为了降低向下兼容的失败率,所以用户会刻意的将计算节点的 CPU model 配置为最低级别,这就导致一些具有高级 CPU 功能的计算节点发挥不出应有的功效。现在支持 CPU model 列表后,就可以按照 CPU 功能的复杂度依次递增,顺序填写。在对 CPU model 没有要求的情况下,Nova 默认会使用最低级别的 CPU model 来启动 Instance,以此来保证 Instance Live-Migration 的成功率最高。而当希望创建具有高级别的 CPU model 的 Instance 时,则可以通过 Placement Traits 来设定,并进行调度。虚拟机的创建更加灵活了。
API 更新Rocky
Boot instance specific storage backend:支持指定 cinder volume type 来创建虚拟机。
Expose virtual device tags in REST API
Stein
Remove force flag from live-migrate and evacuate
show which server group a server is in “nova show”
Support to query nova resources filter by changes-before
Support adding description while locking an instance
Train
Support for specifying AZ when restore a shelved server
Show server numa_topology:支持查看计算节点的 HostNUMATopology。
Support config delete_on_termination in server attach volume:支持指定是否要一并删除在线 Attached 的 Volumes。以往在线 Attached Volumes 是不可以被一并删除的。
Others Rocky Enhanced KVM Storage QoS
支持 cinder frontend QoS。 Libvirt file backed memory
支持文件类型的持久化内存。配置方式:[libvirt]/file_backed_memory specifies the available capacity in MiB for file backed memory, at the directory configured for memory_backing_dir in libvirt’s qemu.conf. 应用场景:针对追求内存容量而不追求内存速度的场景,是 HPC 用户的需求。 NOTE:
only can migrate to the host with file backed memory also.
can’t overcommit memory
Support for virtio-net rx/tx queue sizes
支持设置 virtio-net 收发队列的大小。配置方式:CONF.libvirt.rx_queue_size/CONF.libvirt.tx_queue_size for vhost/vhostuser。 Per-instance serial number
支持虚拟机使用计算节点的 serial number 来作为 instance UUID,配置方式:flavor extra spec hw_unique_serial = True。 NOTE:显然,同一计算节点上的 Instances 的 UUID 都是一致的。 应用场景:针对在虚拟机上运行授权软件的场景。 zVM supports
支持 zVM Hypervisor 类型。
Stein live migraiton support for VMware
支持 VMware VM 的热迁移。
U release 展望
Nova NUMA in Placement:通过 Placement 来完成 NUMA 调度,为了支持 vGPU、vPMEM 的 NUMA 亲和性。
Nova-Cyborg integration:完成 Nova 和 Cyborg 的集成。
Virtual Persistent memory Live migration:虚拟化持久化内存支持热迁移。
Mixed dedicated and shared CPU into single instance:支持创建 dedicated/shared CPU 策略共存的虚拟机。
Move vGPU into new resource claim framework:将 vGPU 资源加入到新的 Instance Claim 框架,解决并发请求冲突的问题。
PCI/SRIOV device management into new resource claim framework, but may not in U.