vm ioctl系统调用

vm ioctl系统调用实现了对虚拟机的控制。vm ioctl控制指令的参数大多需要从KVM_CREATE_VM中返回的fd文件描述符来进行操作,涉及的操作主要针对某一个虚拟机进行控制,如配置内存、配置VCPU等。其主要指令如表5-3所示。

表5-3  vm ioctl指令字

指令字

功能说明

KVM_CREATE_VCPU

为已经创建好的VM添加VCPU

KVM_GET_DIRTY_LOG

返回经过上次操作之后,改变的内存页的位图

KVM_CREATE_IRQCHIP

创建一个虚拟的APIC,并且随后创

建的VCPU都将连接到该APIC

KVM_IRQ_LINE

对某虚拟的APIC引发中断信号

KVM_GET_IRQCHIP

读取APIC的中断标志信息

KVM_SET_IRQCHIP

写入APIC的中断标志信息

KVM_RUN

根据kvm_run结构体的信息,启动VM虚拟机

KVM_RUN和KVM_CREATE_VCPU是vm ioctl系统调用的两个重要指令字。在通过KVM_CREATE_VCPU为VM虚拟机创建VCPU,并且获得VCPU对应的fd文件描述符之后,可以进行KVM_RUN启动虚拟机的操作。

KVM_RUN指令字虽然没有任何参数,但是在调用KVM_RUN启动了虚拟机之后,可以通过mmap()系统调用映射VCPU的fd所在的内存空间来获得kvm_run结构体信息。该结构体位于内存偏移量0,结束位置在KVM_GET_ VCPU_MMAP_SIZE指令所返回的大小中。

kvm_run结构体的定义在include/linux/kvm.h中,通过读取该结构体可以了解KVM内部的运行状态,可以类比为计算机芯片中的寄存器组。其中主要的字段及说明如表5-4所示。

表5-4  kvm_run结构体的重要字段

字段名

功能说明

request_interrupt_window

往VCPU中发出一个中断插入请求,

让VCPU做好相关的准备工作

ready_for_interrupt_injection

响应request_interrupt_windows中的中

断请求,当此位有效时,说明可以进行中断

if_flag

中断标识,如果使用了APIC,则不起作用

hardware_exit_reason

当VCPU因为各种不明原因退出时,

该字段保存了失败的描述信息(硬件失效)

io

该字段为一个结构体。当KVM产

生硬件出错的原因是因为I/O输出时

(KVM_EXIT_IO),该结构体将保存导致

出错的I/O请求的原因

mmio

该字段为一个结构体。当KVM产生出

错的原因是因为内存I/O映射导致的

(KVM_ EXIT_MMIO),该结构体中将

保存导致出错的内存I/O映射请求的数据


原文地址:http://book.51cto.com/art/201210/362616.htm

你可能感兴趣的:(vm ioctl系统调用)