登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
我知道了
查看详情
登录
注册
开源中国、Gitee、模力方舟招人啦~ 快来看看有没有适合你的岗位
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
2
Star
1
Fork
35
src-anolis-os
/
qemu
代码
Issues
6
Pull Requests
8
Wiki
统计
流水线
服务
Gitee Pages
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)
Cherry-pick 提交
Cherry-pick 可以将
特定提交(Commit)
从某个分支挑选并应用到另一个分支,实现快速集成特定更改,而无需合并整个分支。
请选择应用 Cherry-pick 提交 (Commit) 的目标分支
新建分支
当前账号不存在 Fork 仓库,建议 cherry-pick 到 Fork 仓库。
Fork 仓库
提交列表
Commit SHA
Commit Message
基于 Cherry-pick 后的分支发起 Pull Request
取消
Cherry-pick
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 帐号,请先登录后再操作。
立即登录
没有帐号,去注册