KVM API的使用

KVM API的使用

 KVM的API是通过/dev/kvm设备进行访问的。/dev/kvm是一个字符型设备,如下图所示。

                               

 作为 Linux 的一个标准字符型设备,可以使用常见的系统调用如open、close、ioctl等指令进行操作。因为KVM的字符型设备的实现函数中,没有包含write、read等操作。所有对KVM的操作都是通过ioctl发送相应的控制字实现的。

 KVM所提供的用户控件API从功能上划分,可以分为三种类型,如下面所示。

API类型 功能说明
system指令 针对虚拟化系统的全局性参数设置和用于虚拟机创建等控制操作
VM指令
针对具体的VM虚拟机进行控制,如进行内存设置、创建VCPU等。注意:VM指令不是进程安全的

vcpu指令 针对具体的vCPU进行参数设置(MRU寄存器读写、中断控制等)

     用户空间的程序与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的示例小程序:

#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;
}

运行上面的示例程序,如下所示:

[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.    http://smilejay.com/2013/03/use-kvm-api/
2.  《虚拟化技术原理与实现》
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值