原创 9.1 libvirt與openstack
9.1.1 libvirt的基本概念 在前面的1-7章,我們分析了kvm的虛擬化原理與技術實現;第8章則分析了qemu的虛擬機的管理。在雲環境下: (1)不同的服務可能構建在不同的虛擬機實現上如kvm和xen,vmare等;因而上層就需
原创 4.3 時鐘虛擬化
kvm支持的時鐘有8254,local apic timer,kvmclock等,本節將分析8254和kvmclock 4.3.1 8254時鐘虛擬化 structkvm_pit *kvm_create_pit(struct kvm *
原创 5.1 Qemu IO管理框架
IO虛擬化的核心就是通過模擬寄存器操作來完成設備的相應功能,並通過注入中斷推動guest os上的驅動執行. 因此如何獲取guest os 的設備寄存器操作和注入中斷是設備虛擬化框架的關鍵. 中斷注入在第4章分析過,這裏不再分析. PC
原创 5.4 QEMU block & AIO
5.4.1 Qemu block driver (1) block driver註冊 bdrv_register 用戶驅動註冊,raw-posix.c是raw block driver. block_init(bdrv_file_ini
原创 4.2 APIC 虛擬化
每個邏輯處理器都有自己的local apic,當guest讀取local apic寄存器時將返回物理cpu的值,當guest寫時將寫入物理寄存器。例如可以通過ICR寄存器向其他cpu發送IPI.Local APIC虛擬化有兩種方法:
原创 6.2 vm host端的virtio
本節通過三個問題來分析vm host端的virtio架構。1.虛擬設備的添加,2.數據傳輸 3.中斷注入。 仍然以virtio_blk爲例,代碼位於qemu中 6.2.1 虛擬設備管理 (1) 註冊虛擬驅動設備 static TypeI
原创 8.3 Qemu啓動參數管理
8.3.1參數初始化流程 其代碼位於vl.c(main.c) a) 判斷是否使用default設置 optind = 1; popt = lookup_opt(argc, argv,&optarg, &optind); switc
原创 9.2 libvirt中對Qemu的控制
本節以libvirt 1.2.8爲基礎,來分析libvirt如何控制qemu虛擬機. 9.2.1 libvirt qemu的架構 int qemuRegister(void) (qemu/qemu_driver.c) { i
原创 10.1 Qemu的網絡管理
本節通過rtl8139網卡的例子,從虛擬驅動模塊入手,來分析Qemu的網絡虛擬化原理與架構。 10.1.1 rtl8139的虛擬網卡驅動 (1) 虛擬網卡設備的初始化 static Property rtl8139_properti
原创 5.2 磁盤控制器虛擬驅動
本節通過分析piix磁盤 控制器來看看虛擬化驅動的骨架與實現要點。相關源碼路徑如下: hw\ide\piix.c; hw\ide\core.c; 5.2.1虛擬驅動初始化 pc_init1 ==> 創建設備p
原创 10.2KVM嵌套虛擬化原理
10.2.1 KVM嵌套虛擬化簡介 KVM使用Intel的vmx來提高虛擬機性能, ,現在如果我們需要多臺具備VMX支持的主機, 但是又沒有太多物理機器可使用, 那應該怎麼辦呢? 如果我們的虛擬機能夠和物理機一樣支持VMX,就能解決這
原创 6.1.Virtio 原理與Guest OS driver
6.1.1 全虛擬化與半虛擬化 讓我們先討論一下兩種類型完全不同的虛擬化模式:完全虛擬化和半虛擬化。在完全虛擬化中,Guest OS運行在位於物理機器上的 hypervisor 之上。Guest OS並不知道它已被虛擬化,並且不需要
原创 7.1 虛擬機直接IO原理與架構
7.1.1 虛擬機直接虛擬化原理與難點 第5與第6章分別講解了qemu/kvm的硬件輔助IO模擬虛擬化與virtio半虛擬化. 模擬I/O設備方式的優點是對硬件平臺依賴性較低、可以方便模擬一些流行的和較老久的設備、不需要宿主機和客
原创 7.2 Qemu/KVM 直接IO框架
7.2.1 qemu pci-assign模塊 虛擬機上的設備是由qemu創建出來的,對於直接io也是如此。 區別在於直接io時,qemu直接調用vm host上的硬件設備完成相應功能;而不需要更多的軟件處理。 static const
原创 5.3Pci虛擬化
5.3.1 虛擬pci控制器 (1) 初始化 pc_init1 ==> i440fx_init(&i440fx_state,&piix3_devfn, &isa_bus, gsi,.....); ==> i440fx_