登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
3
Star
1
Fork
37
src-anolis-os
/
qemu
代码
Issues
4
Pull Requests
9
Wiki
统计
流水线
服务
JavaDoc
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
我知道了,不再自动展开
8
支持CSV,CSV2虚拟机迁移,支持CSV2虚拟机重启
已合并
hanliyang:a23
src-anolis-os:a23
hanliyang
创建于 2023-11-14 22:49
克隆/下载
HTTPS
SSH
复制
下载 Email Patch
下载 Diff 文件
海光CSV固件提供了CSV/CSV2虚拟机迁移所需的API,包括SEND_START,SEND_UPDATE_DATA,SEND_UPDATE_VMSA,SEND_FINISH,RECEIVE_START,RECEIVE_UPDATE_DATA,RECEIVE_UPDATE_VMSA,RECEIVE_FINISH等等,QEMU通过kvm ioctl接口可以向CSV固件发起这些API的请求,并实现CSV/CSV2虚拟机的加密内存迁移。 海光CSV2虚拟机运行时需要通过per-vCPU的GHCB页实现主机-虚拟机之间的通信,因此per-vCPU的GHCB页也需要迁移,因此为了支持CSV2虚拟机迁移后正常运行,在补丁集中增加了对GHCB页迁移的支持。 海光CSV2虚拟机的vCPU寄存器状态在启动阶段即被加密,主机不能恶意篡改vCPU寄存器状态,为了支持CSV2虚拟机迁移,在QEMU中增加了kvm ioctl接口(这部分接口在anolis cloud-kernel(branch:devel-5.10)中已经支持),QEMU通过新增的kvm ioctl接口通知KVM重置CSV2虚拟机的vCPU状态。 0010-doc-update-AMD-SEV-to-include-Live-migration-flow.patch 说明:添加加密虚拟机迁移流程的说明 0011-migration.json-add-AMD-SEV-specific-migration-parame.patch 说明:添加加密虚拟机迁移的证书链设置功能 0012-confidential-guest-support-introduce-ConfidentialGue.patch 说明:添加加密虚拟机迁移所需的回调接口 0013-target-i386-sev-provide-callback-to-setup-outgoing-c.patch 说明:添加加密虚拟机迁移上下文的设置,主要是解析及确认证书链已就绪 0014-target-i386-sev-do-not-create-launch-context-for-an-.patch 说明:迁移接收端不应当直接调用LAUNCH_START启动虚拟机,而是应当等待发送端传递加密内存过来时,由接收端发起RECEIVE_START,并等待内存页迁移完成 0015-target-i386-sev-add-support-to-encrypt-the-outgoing-.patch 说明:添加调用SEND_START,SEND_UPDATE_DATA,SEND_FINISH API实现虚拟机加密内存的迁移功能 0016-target-i386-sev-add-support-to-load-incoming-encrypt.patch 说明:添加调用RECEIVE_START,RECEIVE_UPDATE_DATA,RECEIVE_FINISH API实现虚拟机加密内存的迁移接收 0017-kvm-Add-support-for-SEV-shared-regions-list-and-KVM_.patch 说明:使用shared_regions_list记录虚拟机内存加密页号区间 0018-migration-add-support-to-migrate-shared-regions-list.patch 说明:添加对shared_regions_list的迁移支持 0019-migration-ram-add-support-to-send-encrypted-pages.patch 说明:在迁移内存时根据shared_regions_list记录的加密页号区间确定是否利用0015中的接口迁移内存 0020-migration-ram-Force-encrypted-status-for-flash0-flas.patch 说明:OVMF_CODE是被加密的,需要通过0015中的接口迁移;OVMF_VARS不应被加密,不需要通过0015中的接口迁移 0021-migration-for-SEV-live-migration-bump-downtime-limit.patch 说明:由于API请求的响应很耗时,所以把加密虚拟机迁移的downtime增大,以便迁移完成 0022-kvm-Add-support-for-userspace-MSR-filtering-and-hand.patch 说明:支持用户态处理MSR_KVM_MIGRATION_CONTROL寄存器的读写,在虚拟机向MSR_KVM_MIGRATION_CONTROL寄存器写了KVM_MIGRATION_READY之后,QEMU才能开始迁移虚拟机,否则会提示未实现加密虚拟机迁移 0023-anolis-migration-ram-Force-encrypted-status-for-VGA-.patch 说明:VGA vram区域应当作为非加密内存被迁移 0024-anolis-target-i386-sev-Clear-shared_regions_list-whe.patch 说明:在虚拟机重启时,重置shared_regions_list,因为重启之后,虚拟机重启之前的加密页号区间是无效的 0025-anolis-migration-ram-Fix-calculation-of-gfn-correpon.patch 说明:0019补丁来自于AMDESE,那个代码在获取gfn号时,存在逻辑错误 0026-anolis-target-i386-csv-Move-is_hygon_cpu-to-header-f.patch 说明:将is_hygon_cpu()移动到头文件中,后续有很多代码需要调用is_hygon_cpu() 0027-anolis-target-i386-csv-Read-cert-chain-from-file-whe.patch 说明:0011和0013补丁对于证书链的获取是假设迁移发送端通过qmp命令将证书链的base64编码传入,但是base64编码字符串太长,很麻烦;所以,对于CSV虚拟机,我们是假设迁移发送端通过qmp命令获得base64编码后的证书链文件的绝对路径,然后读取证书链文件并base64解码 0028-anolis-target-i386-csv-add-support-to-queue-the-outg.patch 说明:添加批量迁移加密内存页的功能,这里将要发送的加密内存页先缓存起来 0029-anolis-target-i386-csv-add-support-to-encrypt-the-ou.patch 说明:添加批量迁移加密内存页的功能,这里将缓存的加密内存页批量发给CSV固件处理 0030-anolis-target-i386-csv-add-support-to-queue-the-inco.patch 说明:添加批量迁移加密内存页的功能,这里将已经接收的加密内存页先缓存起来 0031-anolis-target-i386-csv-add-support-to-load-incoming-.patch 说明:添加批量迁移加密内存页的功能,这里将缓存的加密内存页批量发给CSV固件处理,由固件来恢复内存 0032-anolis-migration-ram-Accelerate-the-transmission-of-.patch 说明:在内存迁移代码里增加对补丁0028和0029接口的调用,实现虚拟机加密内存迁移加速 0033-anolis-migration-ram-Accelerate-the-loading-of-CSV-g.patch 说明:接收端利用0030和0031接口实现接收端的内存恢复加速 0034-anolis-target-i386-csv-Add-support-for-migrate-VMSA-.patch 说明:添加CSV2虚拟机迁移VMSA的支持 0035-anolis-target-i386-get-set-migrate-GHCB-state.patch 说明:添加CSV2虚拟机获取GHCB,设置GHCB,迁移GHCB的功能 0036-anolis-target-i386-kvm-Return-resettable-when-emulat.patch 说明:对于CSV2虚拟机,返回可以重启 0037-anolis-kvm-Add-support-for-CSV2-reboot.patch 说明:添加kvm ioctl接口,通过ioctl接口通知KVM使CSV2虚拟机寄存器回到reset状态 -------------------------------------------------------------------------------------- ## CSV/CSV2虚拟机迁移说明:假设主机HostA是迁移源主机,主机HostB是迁移目标主机 #### HostB 1. 启动CSV/CSV2接收端虚拟机guestB,假设迁移监听端口6666 1. $ sudo ./hag csv export_cert_chain 1. $ cat hsk.cert hrk.cert > vendor_cert.bin 1. $ cat pek.cert oca.cert cek.cert > plat_cert.bin 1. $ cat pdh.cert > pdh.bin 1. $ base64 -w 0 vendor_cert.bin > vendor_cert.base64 1. $ base64 -w 0 plat_cert.bin > plat_cert.base64 1. $ base64 -w 0 pdh.bin > pdh.base64 1. $ sudo chmod 666 *.base64 1. $ cp -a *.base64 /tmp #### HostA 1. 启动CSV/CSV2虚拟机guestA,等待进入登录状态(因为虚拟机内核未运行时,无法使能迁移功能),假设qmp监听端口4444 1. $ scp HostB:/tmp/*.base64 /tmp/ 1. $ sudo socat - tcp:HostA:4444 {"QMP": {"version": {"qemu": {"micro": 0, "minor": 2, "major": 6}, "package": "qemu-kvm-6.2.0-33.0.4.an8"}, "capabilities": ["oob"]}} {"execute":"qmp_capabilities"} {"return": {}} {"execute":"migrate-set-parameters","arguments":{"sev-pdh":"/tmp/pdh.base64","sev-plat-cert":"/tmp/plat_cert.base64","sev-amd-cert":"/tmp/vendor_cert.base64"}} {"return": {}} {"execute":"migrate","arguments":{"uri":"tcp:HostB:6666"}} {"return": {}}
此 Pull Request 需要通过一些审核项
类型
指派人员
状态
审查
happy_orange
已审查通过
已完成
(1/1人)
测试
小龙
已测试通过
已完成
(1/1人)
怎样手动合并此 Pull Request
git checkout a23
git pull https://gitee.com/hanliyang/src-anolis-os.qemu.git a23
git push origin a23
评论
16
提交
1
文件
29
检查
代码问题
0
批量操作
展开设置
折叠设置
审查
Code Owner
审查人员
happy_orange
happy_orange
Meredith
yueeranna
未设置
最少人数
1
测试
happy_orange
happy_orange
Meredith
yueeranna
小龙
anolis-bot
未设置
最少人数
1
优先级
不指定
严重
主要
次要
不重要
标签
anolis_cla_pass
anolis_test_pass
关联 Issue
未关联
Pull Request 合并后将关闭上述关联 Issue
里程碑
未关联里程碑
参与者
(4)
1
https://gitee.com/src-anolis-os/qemu.git
git@gitee.com:src-anolis-os/qemu.git
src-anolis-os
qemu
qemu
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册