溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

KVM虛擬化的原理是什么

發(fā)布時(shí)間:2021-08-05 09:27:54 來源:億速云 閱讀:232 作者:chen 欄目:云計(jì)算

這篇文章主要講解了“KVM虛擬化的原理是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“KVM虛擬化的原理是什么”吧!

kvm這個(gè)結(jié)構(gòu)體包含了vCPU,內(nèi)存,APIC,IRQ,MMU,Event事件管理等信息。該結(jié)構(gòu)體中的信息主要在kvm虛擬機(jī)內(nèi)部使用,用于跟蹤虛擬機(jī)的狀態(tài)。

對(duì)于一個(gè)kvm,就對(duì)應(yīng)一個(gè)線程。

Kvm完全利用了硬件虛擬化技術(shù),通過cat /proc/cpuinfo 查看信息,如果是intel處理器,那么就加載kvm-intel.ko

用戶態(tài)創(chuàng)建一個(gè)虛擬機(jī)就是通過ioctl向/dev/kvm字符設(shè)備進(jìn)行設(shè)置和管理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虛擬機(jī)中的頁表、MMU等運(yùn)行時(shí)狀態(tài)信息。

kvm_x86_ops 結(jié)構(gòu)體中的所有成員都是函數(shù)指針,在kvm-intel.ko 和 kvm-amd.ko這兩個(gè)不同的模塊中,針對(duì)各自體系做不同的函數(shù)。KVM子系統(tǒng)代碼將通過該結(jié)構(gòu)體函數(shù)進(jìn)行實(shí)際的硬件操作。

針對(duì)kvm的fd,通過KVM_CREATE_VCPU指令字可以創(chuàng)建KVM的vCPU,并且獲得該vcpu_fd,vcpu_fd的操作主要包含在kvm_vcpu_fops中,kvm_vcpu_fops的實(shí)現(xiàn)方法如下:

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虛擬化的原理是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)KVM虛擬化的原理是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

kvm
AI