用户空间的程序与KVM的交互来查询、管理KVM hypervisor或者guest,是通过使用ioctl函数与一个特殊的设备/dev/kvm的交互来实现的。 KVM API就是一些可以用于控制虚拟机各个方面的ioctl的集合。(The kvm API is a set of ioctls that are issued to control various aspects of a virtual machine.)
用户可以通过KVM API 获得KVM的版本信息、创建虚拟机、创建VCPU、查询KVM的特性支持和性能容量,等等
内核代码中关于KVM API的参考文档在: $Linux-SRC/Documentation/virtual/kvm/api.txt
另外,可以参考代码: virt/kvm/kvm_main.c, arch/x86/kvm/x86.c
下面是一个使用KVM API的示例小程序:
Python
#include
#include
#include
#include
#include
#include
#include
#include
#define KVM_FILE "/dev/kvm"
int main()
{
int dev;
int ret;
dev = open(KVM_FILE,O_RDWR|O_NDELAY);
ret = ioctl(dev,KVM_GET_API_VERSION,0);
printf("----KVM API version is--%d---\n",ret);
ret = ioctl(dev,KVM_CHECK_EXTENSION,KVM_CAP_MAX_VCPUS);
printf("----KVM supports MAX_VCPUS per guest(VM) is %d---\n",ret);
ret = ioctl(dev,KVM_CHECK_EXTENSION,KVM_CAP_IOMMU);
if(ret != 0)
printf("----KVM supports IOMMU (i.e. Intel VT-d or AMD IOMMU).----\n");
else
printf("----KVM doesn't support IOMMU (i.e. Intel VT-d or AMD IOMMU).----\n");
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include
#include
#include
#include
#include
#include
#include
#include
#define KVM_FILE "/dev/kvm"
intmain()
{
intdev;
intret;
dev=open(KVM_FILE,O_RDWR|O_NDELAY);
ret=ioctl(dev,KVM_GET_API_VERSION,0);
printf("----KVM API version is--%d---\n",ret);
ret=ioctl(dev,KVM_CHECK_EXTENSION,KVM_CAP_MAX_VCPUS);
printf("----KVM supports MAX_VCPUS per guest(VM) is %d---\n",ret);
ret=ioctl(dev,KVM_CHECK_EXTENSION,KVM_CAP_IOMMU);
if(ret!=0)
printf("----KVM supports IOMMU (i.e. Intel VT-d or AMD IOMMU).----\n");
else
printf("----KVM doesn't support IOMMU (i.e. Intel VT-d or AMD IOMMU).----\n");
return0;
}
运行上面的示例程序,如下所示:
Python
[root@jay-linux jay]# vim kvm-api-test.c
[root@jay-linux jay]# gcc kvm-api-test.c -o kvm-api-test
[root@jay-linux jay]# ./kvm-api-test
----KVM API version is--12---
----KVM supports MAX_VCPUS per guest(VM) is 254---
----KVM supports IOMMU (i.e. Intel VT-d or AMD IOMMU).----
1
2
3
4
5
6
[root@jay-linuxjay]# vim kvm-api-test.c
[root@jay-linuxjay]# gcc kvm-api-test.c -o kvm-api-test
[root@jay-linuxjay]# ./kvm-api-test
----KVMAPIversionis--12---
----KVMsupportsMAX_VCPUSperguest(VM)is254---
----KVMsupportsIOMMU(i.e.IntelVT-dorAMDIOMMU).----