用户空间的程序与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的示例小程序:
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 <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <linux/kvm.h> #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 |
[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).---- |
其实一直想用KVM,不过怕和VB有冲突,一直没敢用。。。
喜欢Linux或者玩虚拟机,还是可以试试KVM的~ 应该和VirtualBox没啥可以冲突的..
那我试试看咯
博主,你好! 感谢你的文章。我想问下,KVM API在哪些程序里被用到呢?qemu应该是吧。其他还有吗?我想看看更多的例子学习使用这些API。十分感谢!
据我所知主要就是QEMU了,其他高级的应用程序,主要就时调用qemu来使用kvm,基本很少直接使用kvm API的大项目;Android SDK中的emulator(也改自QEMU)也会用到的~
求问lz有xen的c的api的例子或是资料吗
Xen里面的工具libxl就是C写的,可以参考:
http://xenbits.xen.org/gitweb/?p=xen.git;a=tree;f=tools/libxl;h=964d2a0bcece6564b3cd5f779858abbada372aa9;hb=HEAD
另外libvirt里面有对xenapi的调用也可以参考。
关于XenAPI:http://wiki.xenproject.org/wiki/XAPI_Developer_Guide