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

[经验分享] KVM API的使用

[复制链接]

尚未签到

发表于 2015-10-10 09:45:47 | 显示全部楼层 |阅读模式
KVM API的使用
KVM的API是通过/dev/kvm设备进行访问的。/dev/kvm是一个字符型设备,如下图所示。

                               DSC0000.jpg

作为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 &quot;/dev/kvm&quot;

int main()
{
        int dev;
        int ret;

        dev = open(KVM_FILE,O_RDWR|O_NDELAY);
        ret = ioctl(dev,KVM_GET_API_VERSION,0);
        printf(&quot;----KVM API version is--%d---\n&quot;,ret);
        ret = ioctl(dev,KVM_CHECK_EXTENSION,KVM_CAP_MAX_VCPUS);
        printf(&quot;----KVM supports MAX_VCPUS per guest(VM) is %d---\n&quot;,ret);
        ret = ioctl(dev,KVM_CHECK_EXTENSION,KVM_CAP_IOMMU);
        if(ret != 0)
                printf(&quot;----KVM supports IOMMU (i.e. Intel VT-d or AMD IOMMU).----\n&quot;);
        else
                printf(&quot;----KVM doesn't support IOMMU (i.e. Intel VT-d or AMD IOMMU).----\n&quot;);

        return 0;
}

运行上面的示例程序,如下所示:
[iyunv@jay-linux jay]# vim kvm-api-test.c
[iyunv@jay-linux jay]# gcc kvm-api-test.c  -o kvm-api-test
[iyunv@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.  《虚拟化技术原理与实现》
         版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 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.iyunv.com/thread-124960-1-1.html 上篇帖子: 使用libvirt管理kvm(API篇) 下篇帖子: KVM虚拟机三大存储模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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