设为首页 收藏本站
查看: 1537|回复: 0

[经验分享] KVM基本原理及架构六-KVM API

[复制链接]

尚未签到

发表于 2015-12-24 15:36:46 | 显示全部楼层 |阅读模式
6KVM API
KVMAPI是通过/dev/kvm设备访问的,/dev/kvm是一个标准的字符设备,可以使用常用的opencloseioctl接口操作,但是kvm的实现中,没有提供readwrite接口,所有对KVM的所有操作都是通过ioctl接口操作的。KVM提供给上层的API功能上分,可分为3中类型:
1、    system指令,针对虚拟化系统的全局性参数设置和控制。
2、    VM指令,针对VM虚拟机进行控制,如:内存设置、创建VCPU等。
3、    VCPU指令,针对具体的VCPU进行参数设置。如:相关寄存器的读写、中断控制等。
通常对于KVM的操作都是从open /dev/kvm设备文件开始的,open后,会获得相应的文件描述符(fd),然后通过ioctl系统指令对该fd进行进一步的操作,比如通过KVM_CREATE_VM指令,可以创建一个虚拟机并返回虚拟机对应的文件描述符,然后根据该描述符来进一步控制虚拟机的行为,比如通过KVM_CREATE_VCPU指令来为该虚拟机创建VCPU
指令
System ioctl指令用于控制KVM运行环境的参数,包括全局性的参数设置和虚拟机创建等工作,主要的指令字包括:
ü  KVM_CREATE_VM 创建KVM虚拟机
ü  KVM_GET_API_VERSION 查询当前KVM API版本
ü  KVM_GET_MSR_INDEX_LIST 获得MSR索引列表
ü  KVM_CHECK_EXTENSION 检查扩展支持情况
ü  KVM_GET_VCPU_MMAP_SIZE 运行虚拟机和用户态空间共享的一片内存区域的大小
其中,KVM_CREATE_VM比较重要,用于创建虚拟机,并返回一个代表该虚拟机的描述符(fd)。新创建的虚拟机没有VCPU,也没有内存等资源,需要对创建虚拟机时返回的描述符,通过ioctl指令,进行进一步的配置。
指令
VM ioctl指令实现对虚拟机的控制,大多需要从KVM_CREATE_VM中返回的fd来进行操作,具体操作包括:配置内存、配置VCPU、运行虚拟机等,主要指令如下:
ü  KVM_CREATE_VCPU 为虚拟机创建VCPU
ü  KVM_RUN 根据kvm_run结构体信息,运行VM虚拟机
ü  KVM_CREATE_IRQCHIP 创建虚拟APIC,且随后创建的VCPU都关联到此APIC
ü  KVM_IRQ_LINE 对某虚拟APIC发出中断信号
ü  KVM_GET_IRQCHIP 读取APIC的中断标志信息
ü  KVM_SET_IRQCHIP 写入APIC的中断标志信息
ü  KVM_GET_DIRTY_LOG 返回脏内存页的位图
KVM_CREATE_VCPU KVM_RUNVM ioctl指令中两种重要的指令字,通过KVM_CREATE_VCPU为虚拟机创建VCPU,并获得对应的fd描述符后,可以对其调用KVM_RUN,以启动该虚拟机(或称为调度VCPU)。  
Kvm_run结构体定义在include/linux/kvm.h中,可以通过该结构体了解KVM的内部运行状态。
指令
VCPU ioctl指令主要针对具体的VCPU进行配置,包括寄存器读写、中断设置、内存设置、时钟管理、调试开关等,可以对KVM虚拟机进行运行时配置。主要指令字包括:
l  寄存器控制方面:
ü  KVM_GET_REGS 获取通用寄存器信息
ü  KVM_SET_REGS 设置通用寄存器信息
ü  KVM_GET_SREGS 获取特殊寄存器信息
ü  KVM_SET_SREGS设置特殊寄存器信息
ü  KVM_GET_MSRS获取MSR寄存器信息
ü  KVM_SET_MSRS设置MSR寄存器信息
ü  KVM_GET_FPU获取浮点寄存器信息
ü  KVM_SET_FPU设置浮点寄存器信息
ü  KVM_GET_XSAVE获取VCPUxsave寄存器信息
ü  KVM_SET_XSAVE设置VCPUxsave寄存器信息
ü  KVM_GET_XCRS获取VCPUxcr寄存器信息
ü  KVM_SET_XCRS设置VCPUxcr寄存器信息
2  中断和事件管理方面
ü  KVM_INTERRUPT VCPU上产生中断(APIC无效时)
ü  KVM_SET_SIGNAL_MASK 设置某个VCPU的中断信号屏蔽掩码
ü  KVM_GET_CPU_EVENTS 获取VCPU中被挂起待延时处理的事件,如中断、NMI或异常
ü  KVM_SET_CPU_EVENTS 设置VCPU的事件,如中断、NMI或异常
3  内存管理方面
ü  KVM_TRANSLATE VCPU的物理地址翻译成HPA
ü  KVM_SET_USER_MEMORY_REGION 修改VCPU的内存区域
ü  KVM_SET_TSS_ADDR 初始化TSS内存区域(Intel架构专用)
ü  KVM_SET_IDENTITY_MAP_ADDR 创建EPT页表(Intel架构专用)
4  其他方面(如:CPUID的设置、调试接口等)

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155843-1-1.html 上篇帖子: KVM基本原理及架构七-KVM内核模块中重要的数据结构 下篇帖子: KVM基本原理及架构五-IO虚拟化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表