vCPU hotplug on Arm

本文探讨了Arm架构下vCPUHotplug技术的工作原理及其实现过程,包括vCPUHotplug的两个主要阶段:vCPUhotadd和上电操作。文中详细介绍了Linux内核中CPU的不同状态,并解释了Arm平台上的实现方式与x86平台的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近Arm上的vCPU hotplug 的patch的rfc版快要发布出来了,做了一些测试debug,了解了一些内部原理,记录一下。

vCPU hotplug 的含义:在虚拟机运行时插入新的vCPU,无需重启虚拟机。

vCPU hotplug可以认为包含两个阶段:1. vCPU hot add,即插入vCPU,由ACPI驱动;2. 上电,cpu online,由PSCI控制。

CPU在linux内核中的几个状态:possible,present,online, offline。

possible的含义是所有可能可用的CPU,present指现在存在的CPU,online指的是已经上电的CPU,offline指的是未来可用+存在但没上电的CPU。正在开发当中的patch,认为possible = present,也就是凡是ACPI表中描述的东西都认为是存在的。这跟x86的实现是不同,x86认为present CPU是现在确实存在的,possible - present = 可以hotplug的CPU。这么解释hotplug其实更加合理。但是Arm就是这么特别。

由于gic在VM启动之后内部组件的数量不可更改,因此在初始化阶段就需要给所有possible cpu创建gicc和gicr,同时也意味着要创建所有possible cpu的对象,然后将disabled cpu park起来(我的理解是暂时不创建vcpu thread)

要保证gicr的存在,唯一的办法是在madt表中创建gicr struct。

acpi 6.5中有关online capable bit对linux不起作用。

之前存在于kvm中的psci fw可以在VMM中处理。

一旦vcpu hotplug开始,guest会收到ged irq。通过调用acpi表中的ged的evt method来处理中断。该method将返回notify method来通知guest os是哪个设备产生了event,通过一系列函数调用,guest 获取该cpu的device id,mpidr以及当前的状态。注册cpu到sysfs,发送uevent到guest userspace,udev尝试online 该cpu。guest kernel调用hvc route到kvm,kvm转发请求到vmm,由vmm来决定是否online。返回结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值