温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

KVM虚拟化的原理是什么

发布时间:2021-08-05 09:27:54 来源:亿速云 阅读:232 作者:chen 栏目:云计算

这篇文章主要讲解了“KVM虚拟化的原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“KVM虚拟化的原理是什么”吧!

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,

};

感谢各位的阅读,以上就是“KVM虚拟化的原理是什么”的内容了,经过本文的学习后,相信大家对KVM虚拟化的原理是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

kvm
AI