文档章节

KVM虚拟化原理

最新更新消息
 最新更新消息
发布于 2015/10/04 10:26
字数 384
阅读 298
收藏 6

kvm这个结构体包含了vCPU,内存,APIC,IRQ,MMU,Event事件管理等信息。该结构体中的信息主要在kvm虚拟机内部使用,用于跟踪虚拟机的状态。

对于一个kvm,就对应一个线程。

Kvm完全利用了硬件虚拟化技术,通过cat /proc/cpuinfo 查看信息,如果是intel处理器,那么就加载kvm-intel.ko

用户态创建一个虚拟机就是通过ioctl向/dev/kvm字符设备进行设置和管理kvm的。


struct kvm {

    spinlock_t mmu_lock;

    spinlock_t requests_lock;

    struct rw_semaphore slots_lock;

    struct mm_struct *mm; /* userspace tied to this vm */

    int nmemslots;

    struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS +

                    KVM_PRIVATE_MEM_SLOTS];

#ifdef CONFIG_KVM_APIC_ARCHITECTURE

    u32 bsp_vcpu_id;

    struct kvm_vcpu *bsp_vcpu;

#endif

    struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];

    atomic_t online_vcpus;

    struct list_head vm_list;

    struct mutex lock;

    struct kvm_io_bus mmio_bus;

    struct kvm_io_bus pio_bus;

#ifdef CONFIG_HAVE_KVM_EVENTFD

    struct {

        spinlock_t lock;

        struct list_head items;

    } irqfds;

    struct list_head ioeventfds;

#endif

    struct kvm_vm_stat stat;

    struct kvm_arch arch;

    atomic_t users_count;

#ifdef KVM_COALESCED_MMIO_PAGE_OFFSET

    struct kvm_coalesced_mmio_dev *coalesced_mmio_dev;

    struct kvm_coalesced_mmio_ring *coalesced_mmio_ring;

#endif


    struct mutex irq_lock;

#ifdef CONFIG_HAVE_KVM_IRQCHIP

    struct list_head irq_routing; /* of kvm_kernel_irq_routing_entry */

    struct hlist_head mask_notifier_list;

#endif


#ifdef KVM_ARCH_WANT_MMU_NOTIFIER

    struct mmu_notifier mmu_notifier;

    unsigned long mmu_notifier_seq;

    long mmu_notifier_count;

#endif

};

struct kvm_vm_stat stat;就是KVM虚拟机中的页表、MMU等运行时状态信息。

kvm_x86_ops 结构体中的所有成员都是函数指针,在kvm-intel.ko 和 kvm-amd.ko这两个不同的模块中,针对各自体系做不同的函数。KVM子系统代码将通过该结构体函数进行实际的硬件操作。


针对kvm的fd,通过KVM_CREATE_VCPU指令字可以创建KVM的vCPU,并且获得该vcpu_fd,vcpu_fd的操作主要包含在kvm_vcpu_fops中,kvm_vcpu_fops的实现方法如下:



static struct file_operations kvm_vcpu_fops = {

    .release = kvm_vcpu_release,

    .unlocked_ioctl = kvm_vcpu_ioctl,

    .compat_ioctl = kvm_vcpu_ioctl,

    .mmap = kvm_vcpu_mmap,

};


© 著作权归作者所有

最新更新消息
粉丝 1
博文 39
码字总数 49637
作品 0
崇明
私信 提问
开源虚拟化 KVM 视频教程在51CTO上线了

  《开源虚拟化KVM极速入门》视频教程,正式在51CTO上线了!   访问地址:http://edu.51cto.com/course/courseid-6815.html   由浅入深、循序渐进地掌握开源虚拟化KVM的体系结构、构建...

dbtrain
2016/08/20
0
0
服务器虚拟化(二):KVM

前言 KVM(Kernel-based Virtual Machine):基于内核的虚拟机。 是一种用于 Liunx 内核中的虚拟化基础设施,可以将 Linux 内核转化为一个 hypervisor(virtual machine monitor 虚拟机器监视...

诸葛孔明亮
2016/10/27
23
0
CPU 和内存虚拟化原理 - 每天5分钟玩转 OpenStack(6)

前面我们成功地把 KVM 跑起来了,有了些感性认识,这个对于初学者非常重要。不过还不够,我们多少得了解一些 KVM 的实现机制,这对以后的工作会有帮助。 CPU 虚拟化 KVM 的虚拟化是需要 CPU ...

CloudMAN
2016/03/11
1K
1
从事Cloud行业需要掌握的基本技能清单

从事Cloud行业需要掌握的基本技能清单如下, 有Openstack,Cloudstack开发经验者优先; 熟悉KVM Hypervisor架构,熟悉Qemu/Libvirt架构; 熟悉Python/C/C++其中之一,有实际开发经验 熟悉开源...

chancein007
2015/05/28
0
0
Linux虚拟化技术KVM、QEMU与libvirt的关系(转)

说明:个人理解,KVM是内核虚拟化技术,而内核是不能使用在界面上使用的,那么此时QEMU提供了用户级别的使用界面,相互辅助。当然,单独使用QEMU也是可以实现一整套虚拟机,不过QEMU+KVM基本...

easonjim
2018/01/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS中实现图片垂直居中

在曾经的 淘宝UED 招聘 中有这样一道题目: “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中。” 当然出题并不是随意,而是有其现实的原因,垂直居中...

前端老手
46分钟前
4
0
vue学习笔记5:vue富文本编辑器ueditor的组件封装及问题

做一个后台,离不开文本编辑器,百度的ueditor经常用,这次改用vue写后台,需要再次集成一下,遇到很多问题,搞了一下午,整理一下,希望能够帮到后来者。 目标: 希望封装的ueditor组件,尽...

Jack088
58分钟前
5
0
MFC多线程编程之四——线程的同步

八、线程的同步 虽然多线程能给我们带来好处,但是也有不少问题需要解决。例如,对于像磁盘驱动器这样独占性系统资源,由于线程可以执行进程的任何代码段,且线程的运行是由系统调度自动完成...

rainbowcode
今天
3
0
QWIDGET、QMAINWINDOW、QFRAME、QWINDOW、QDIALOG、QSCROLLAREA区别

QWindow一般不用 QDialog对话框而已 QScrollArea有滚动条的窗口。 from PyQt5.QtWidgets import (QWidget,QListWidget,QLabel,QApplication,QScrollArea,QFrame,QAction,QVBoxLayout,QLis......

shzwork
今天
3
0
CRM、DMP、CDP都是什么?有什么区别?

Markter对CRM系统(Customer Relationship Management System,客户关系管理系统),营销自动化等概念都已经比较熟悉,也许DMP(Data Management Platform,数据管理平台)也多多少少有些了解。...

怡海软件-CRM
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部