1. 程式人生 > >KVM虛擬化技術實戰與原理解析——讀書筆記

KVM虛擬化技術實戰與原理解析——讀書筆記

入門級書籍——一種KVM,Qemu的使用手冊 轉載請說明出處。
全書一共9章:         第1章介紹了雲端計算和虛擬化的概念,並對KVM等幾種流行的虛擬化技術做了比較;         第2章介紹了KVM的基本架構、QEMU的作用以 及Intel的硬體虛擬化技術;
        第3章詳細講解了KVM依賴的硬體環境配置,編譯和安裝KVM和QEMU的步驟與方法,以及KVM客戶機的啟動;
        第4章深 入講解了KVM的基礎功能,包括虛擬的CPU、記憶體、儲存、網路、圖形顯示等的配置和基本原理,以及CPU和記憶體的過載使用;    
        第5章講解了KVM的高階功 能,包括半虛擬化驅動virtio、裝置直接分配VT-d、熱插拔、動態遷移、巢狀虛擬化、KSM、透明大頁、KVM安全技術、QEMU監控器、QEMU 命令列引數以及從物理機或其他虛擬機器遷移到KVM的方法;
        第6章介紹了管理KVM虛擬化的上層軟體;
        第7章介紹了RHEL等所有流行的Linux發行版中 的KVM虛擬化功能的使用;
        第8章首先介紹了虛擬化效能測試,然後詳細介紹了對KVM虛擬化的CPU、記憶體、網路、磁碟I/O等重要元件進行效能測試的方 法、工具和步驟;
        第9章介紹了Linux、KVM、QEMU等開源社群的情況,KVM、QEMU和KVM單元測試程式碼的基本結構,以及如何向 QEMU/KVM開源社群貢獻自己的程式碼和如何提交KVM相關的bug。

目錄

前言

第1章 虛擬化與雲端計算
1.1 雲端計算概念
1.1.1 發展歷史和現狀
1.1.2 概念
1.1.3 雲端計算模式:SaaS,PaaS,IaaS


1.2 雲端計算技術
1.2.1 Map/Reduce
1.2.2 資源管理平臺,CloudStack,VMware,OpenStack
1.2.3 虛擬化


1.3 虛擬化技術
1.3.1 軟體虛擬化和硬體虛擬化(軟體虛擬化Qemu,硬體VMM)
1.3.2 準虛擬化與全虛擬化(準Xen)
1.4 KVM簡介
1.4.1 KVM的歷史——核心虛擬機器
1.4.2 KVM功能概覽,基本架構,記憶體管理,儲存,裝置驅動程式,效能簡介
1.4.3 KVM的前景
1.5 Xen簡介
1.5.1 Xen的歷史——架構簡介,微核心
1.5.2 Xen功能概覽
1.5.3 Xen的前景

1.6 其他虛擬化方案簡介
1.6.1 VMware
1.6.2 VirtualBox
1.6.3 Hyper-V
1.7 本章小結
1.8 本章註釋

第2章 KVM原理簡介
2.1 Linux作業系統簡介——微核心(Xen)和單核心(KVM)設計
2.2 虛擬化模型,(底層是物理機,上層是一個虛擬機器監控器(VMM,Hypervisor),非作業系統,上層為真正的虛擬機器OS)
2.3 KVM架構

      型別一:虛擬機器監控器,Xen,VMWare ESX/ESXi  , Hyper-V

      型別二:虛擬機器監控程式,KVM ,VMware Workstation,VirtualBox,為單核心結構

2.4 KVM模組

    CPU虛擬化,記憶體虛擬化,淺

2.5 QEMU裝置模型
2.6 Intel虛擬化技術
2.7 本章小結

第3章 構建KVM環境
3.1 硬體系統的配置,在BIOS中開啟VT和VT-d
3.2 安裝宿主機Linux系統
3.3 編譯和安裝KVM——核心空間KVM模組
          下載KVM原始碼,配置KVM(配置命令),編譯KVM,安裝KVM
3.4 編譯和安裝qemu-kvm——使用者空間的KVM模組

          下載qemu-kvm原始碼,配置和編譯qemu-kvm(make -j 10),安裝qemu-kvm
3.5 安裝客戶機
3.6 啟動第一個KVM客戶機
3.7 本章小結
3.8 本章註釋和參考閱讀

第4章 KVM核心基礎功能
4.1 硬體平臺和軟體版本說明
4.2 CPU配置
4.2.1 vCPU的概念,KVM的三種模式相互切換,切換圖
4.2.2 SMP的支援,參考cpu-info.sh,/proc/cpuinfo檔案檢視系統cpu,多核心,超執行緒等情況

     qemu-system-x86_64 -smp(或不加) 8  其他引數   /*.img
4.2.3 CPU過載使用

         利用客戶機使用物理CPU時間差異,保證物理CPU一直處在最大狀態,如果8核物理機,開3個客戶機都是8核的,但3個客戶機執行的時間不一樣,一個早上,一個下午,一個晚上。

4.2.4 CPU模型

      qemu64,kvm64,等

      好處:便於遷移,相容等問題

4.2.5 程序的處理器親和性和vCPU的繫結(**)

      一個程序在前一個時間片是在CPUM上,但是在後一個時間片是在CPUN上,

      親和性是指:將程序繫結到指定的一個或多個CPU上,而不允許將程序排程到其他程序上。

      每個vCPU是宿主機上的一個普通的Qemu程序,使用taskset工具,設定處理器的親和性,將某個vCPU繫結到某個或幾個固定的cpu上去排程。

      測試步驟:

        1)啟動宿主機時,在linux核心上加上“isolcpus="引數,實現cpu的隔離,從宿主機中隔離出幾個cpu供客戶機使用;

        2)啟動2個客戶機,並實現vcpu和物理cpu的繫結。

4.3 記憶體配置
4.3.1 記憶體設定基本引數

    1)qemu-system-x86_64 rhe16u3.img

    2)客戶機中,free -m  ,檢視核心使用的情況

                         dmesg


4.3.2 EPT和VPID簡介

    客戶機虛擬地址GVA——>客戶機實體地址GPA轉換,通過客戶機作業系統實現

    客戶機實體地址GPA——>宿主機實體地址HPA轉換,通過Hypervisor實現

    影子頁表,軟體實現GVA——>HPA的轉換過程,後來引入EPT,硬體實現GVA——GPA——HPA的轉換。

    VPID,虛擬處理器標識,在硬體上為每個TLB項增加一個標識,用於區分不同的虛擬處理器的地址空間。

4.3.3 大頁(Huge Page)

    4KB的記憶體頁——>2MB的記憶體頁,減少了記憶體頁的數量,提高了快取命中率,這是一種提高效能的技術手段。
4.3.4 記憶體過載使用

    記憶體不足,解決方案

    1)記憶體交換,和交換分割槽來交換,openstack目測使用的就是這種方式。

            效能較差,要求(實體記憶體空間+交換空間大小總和)>所有客戶機的記憶體總和。

            舉例:64個記憶體1G的客戶機,32G記憶體的物理機,如何分割槽,其中宿主機維持自身程序佔用資源4G。

                   客戶機要求的交換分割槽總和   64x1G+4G-32G=36G.

                   安裝redhat建議,32G的實體記憶體,建議使用8G的交換分割槽。

                   故而,在宿主機中使用 44GB(36GB+8GB)的交換分割槽來滿足安全使用記憶體過載問題。

    2)氣球(ballooning技術),通過virio_balloon驅動來實現宿主機和客戶機之間的協作。網易的openstack實踐中好像就是用這種。

    3)頁共享(page sharing),通過KSM合併多個客戶機程序使用相同的記憶體頁。
4.4 儲存配置
4.4.1 儲存配置和啟動順序

         1)qumu-kvm引數      -hda file    /  -hdb file  / ... /  -fdb  file  ; -driver引數

         2)客戶機的啟動順序:即類似Bios中系統引導順序

         3)舉例

4.4.2 qemu-img命令

        1)qemu-img check rhe16.img 檢查映象檔案;

        2)qemu-img create -f qcow2 -o ? temp.cow

        3)  qemu-img convertmy -o qcow2 rhe16.img rhe16-1.gcow2

        4)  qemu-img info rhe16.img

        5)  snapshot  /rebase /resize  
4.4.3 QEMU支援的映象檔案格式

        1)raw——原始格式,一次性佔用磁碟空間。

        2)qcow2——支援稀疏檔案和加密、壓縮。qcow——老版本,支援後端映象和加密

        3)sheepdog——為KVM虛擬化提供塊儲存,單點無故障,淘寶貢獻較多。

        4)clinder——openstack映象塊儲存。

4.4.4 客戶機儲存方式

        1)物理磁碟或磁碟分割槽;

        2)LVM

        3)分散式檔案系統,NFS,iSCSI,GFS2

4.5 網路配置

        1)QEMU支援的網路模式——virtio型別
        A.使用網橋模式,通過linux-bridge來實現。此部分可以實際參考。

        B.使用NAT模式——此部分可以參考,講的不錯。

                dnsmasq,宿主機中執行的DHCP工具,給宿主機分配NAT內網的IP地址。基本架構圖。

                bridge-util 管理linux-brige的工具

                iptables 對核心中IPv4包過濾工具和NAT管理工具。
        C.QEMU內部的使用者模式網路

                Qeum自身實現的網路管理,效能差,不常用。
        D.其他網路選項


4.6 圖形顯示
4.6.1 SDL的使用
4.6.2 VNC的使用
4.6.3 VNC顯示中的滑鼠偏移
4.6.4 非圖形模式
4.6.5 顯示相關的其他選項
4.7 本章小結
4.8 本章註釋和參考閱讀

第5章 KVM高階功能詳解
5.1 半虛擬化驅動
5.1.1 virtio概述(Qemu模擬I/O裝置的基本原理和優缺點,virtio的基本原理和優缺點
5.1.2 安裝virtio驅動(Linux、Windows中virtion驅動程式的安裝、使用)
5.1.3 使用virtio_balloon(1.ballooning簡介;2.KVM中balloning的原理及優劣勢;3.KVM中ballooning使用示例;4.通過ballooning過載使用記憶體)
5.1.4 使用virtio_net(半虛擬化網路裝置--1.配置和使用;2.宿主機中的TSO和GSO設定;3.用vhost_net後端驅動)
5.1.5 使用virtio_blk(使用virtio API為客戶機提供訪問塊裝置的IO方法)
5.1.6 kvm_clock配置(半虛擬化時鐘,為客戶機提供精準的System time和Wall time)
5.2 裝置直接分配(VT-d)
5.2.1 VT-d概述

     Emulated device: QEMU純軟體模擬的裝置

     Virtio device:實現virtio API的半虛擬化驅動的裝置

     PCI device assignment:PCI裝置直接分配(VT-d)

5.2.2 VT-d環境配置

     (1.硬體支援和BIOS設定;2.宿主機核心的配置;3.在宿主機中隱藏裝置;4.通過Qemu命令列分配裝置給客戶機)
5.2.3 VT-d操作示例

      (1.網絡卡直接分配;2.硬碟直接分配;3.USB直接配置;4.VGA顯示卡直接分配)
5.2.4 SR-IOV技術——多個虛擬機器共享一個物理裝置資源,達到裝置直接分配的效能。

      (1.SR-IOV概述,物理功能,虛擬功能)

      (2.SR-IOV操作示例)

      (3.SR-IOV使用問題解析)


5.3 熱插拔——電腦執行時(不關閉電源)插上或拔除硬體
5.3.1 PCI裝置熱插拔
5.3.2 PCI裝置熱插拔示例(1.網絡卡的熱插拔;2.USB的熱插拔;3.SATA硬碟的熱插拔)
5.3.3 CPU和記憶體的熱插拔


5.4 動態遷移
5.4.1 動態遷移的概念

      (遷移概念,靜態遷移,動態遷移。)
5.4.2 動態遷移的效率和應用場景

       (衡量條件:整體遷移時間,伺服器停機時間,對伺服器效能的影響)
5.4.3 KVM動態遷移原理和實踐

       (先遷移記憶體、後遷移配置;KVM動態遷移應該注意的事項,在KVM上具體進行的操作步驟)
5.4.4 VT-d/SR-IOV的動態遷移


5.5 巢狀虛擬化
5.5.1 巢狀虛擬化的基本概念(Xen On Xen和KVM On Xen,VMware on VMware 和KVM on KVM等等)
5.5.2 KVM巢狀KVM(主要步驟)


5.6 KSM技術—寫實複製。
5.6.1 KSM基本原理—核心同頁合併。

    KSM允許核心在兩個或多個程序(包括虛擬機器客戶機)之間共享完全相同的記憶體頁。
5.6.2 KSM操作實踐

    配置檔案
5.7 KVM其他特性簡介
    5.7.1 1GB大頁

       (2MB->1GB,減少記憶體頁表數量,提高TLB快取的效率,從而提高了系統的記憶體訪問效能。

         1GB大頁的使用步驟)
    5.7.2 透明大頁

        (提高系統記憶體的使用效率和效能。

          使用透明大頁的步驟)

5.7.3 AVX和XSAVE——高階向量擴充套件。
5.7.4 AES新指令——指令的配置、測試
5.7.5 完全暴露宿主機CPU特性——CPU模型特性、CPU資訊檢視。
5.8 KVM安全
5.8.1 SMEP—安全滲透,監督模式執行保護
5.8.2 控制客戶機的資源使用-cgroups—linux核心中的一個特性,用於限制、記錄和隔離程序組對系統物理資源的使用。

       cgroups的功能—資源限制,優先順序控制,記錄,隔離,控制。

       cgroups子系統。

       cgroups操作示例:通過cgroups的blkio子系統來設定2個客戶機對磁碟I/O讀寫的優先順序。
5.8.3 SELinux和sVirt

       SELinux—linux核心中的安全訪問體系(MAC,強制訪問控制模式),為每一個應用程式提供一個“沙箱”,只允許應用程式執行它設計需要的且在安全策略中明確允許的任務,對每個應用程式只分配它正常工作所需要的對應許可權。

       sVirt—對虛擬化客戶機使用強制訪問控制來提高安全性,阻止因為Hypervisor的bug而導致的從一臺客戶機向宿主機或其他伺服器的攻擊。

       SELinux和sVirt的配置和操作示例。
5.8.4 可信任啟動-Tboot

       TXT—在PC或伺服器系統啟動是對系統關鍵部位進行驗證的硬體解決方案。

       TBoot—可信啟動,是使用TXT技術在核心或Hypervisor啟動之前的一個軟體模組,用於度量和驗證作業系統或Hypervisor的啟動過程。

       使用TBoot的示例。
5.8.5 其他安全策略

       1.映象檔案加密

       2.虛擬網路的安全

       3.遠端管理的安全

       4.普通Linux系統的安全準則


5.9 QEMU監控器
5.9.1 QEMU monitor的切換和配置

5.9.2 常用命令介紹

      help,info,info version ,info ,commit,cont,change,balloon,cup index,log,sendkey keys,x和xp,p或print fmt expt
5.10 qemu-kvm命令列引數

      qemu-system-x86_64[options] [disk_images]

      cpu的相關引數—-cpu引數,-smp引數

      磁碟相關的引數

      網路相關的引數

      圖形顯示相關的引數

      Vt-d和SR-IOV相關引數

      動態遷移的引數

      已用過的其他引數
5.10.1 回顧已用過的引數
5.10.2 其他常用引數


5.11 遷移到KVM虛擬化環境
5.11.1 virt-v2v工具介紹—將虛擬客戶機從一些Hypervisor(也包括KVM自身)遷移到KVM環境中去。
5.11.2 從Xen遷移到KVM

      virt-v2v-ic xen+ssh://[email protected] -os pool -b brnamevm-name
5.11.3 從VMware遷移到KVM

      virt-v2v-ic esx://esx.demo.com/ -os pool --bridege brame vm-name
5.11.4 從VirtualBox遷移到KVM

      virt-v2v -ic vbox+ssh://[email protected] -os pool -b bramevm-name
5.11.5 從物理機遷移到KVM虛擬化環境(P2V)

      
5.12 本章小結
5.13 註釋和參考閱讀


第6章 KVM管理工具
6.1 libvirt
6.1.1 libvirt簡介

   對KVM虛擬機器進行管理的工具和應用程式介面、守護程序和管理工具。

   libvirt目標、互動框架、支援的虛擬機器、主要的功能、支援的語言、主要程序

6.1.2 libvirt的編譯、安裝和配置
6.1.3 libvirt和libvirtd的配置

  /etc/libvirt/libvirt.conf——用來配置一些常用libvirt連線(通常是遠端連線的)別名

  /etc/libvirt/libvirtd.conf——libvirt的守護程序libvirtd的配置檔案,是一些啟動設定,包括開啟TCP連線、設定TCP監聽埠、TCP連線認證授權方式、設定UNIX domain的儲存目錄等。

  /etc/libvirt/qemu.conf——對Qeum的驅動的配置檔案

  /etc/libvirt/qume/目錄/——存放的是使用Qume驅動域的配置檔案

  libvirtd——是libvirt虛擬化管理工具的伺服器端的守護程序。(要讓某個節點能夠使用libvirt進行管理,都需要在這個節點上安裝該守護程序) libvirt的客戶端程式包括——virsh,virt-manager。

  libvirtd的常見命令列。
6.1.4 libvirt域的XML配置檔案

    Libvirt對虛擬機器管理,實質是基於xml檔案作為配置檔案。

    客戶機的XML檔案,其中CPU配置(vcpu、cpuset,vcpupin),記憶體的配置(memory),客戶機系統型別及其啟動順序,網路的配置(橋接方式,NAT方式,使用者模式網路的設定,網絡卡裝置直接分配(VT-d),儲存的配置,域的配置,QEMU模擬器的配置,圖形顯示的方式,客戶機音效卡和顯示卡的配置,PCI控制器

6.1.5 libvirt API簡介

    連線Hypervisor相關API:以virConnect開頭的一系列操作,

        連線函式 virConnectOpen,virConnectOpenReadOnly,virConncetOpenAuth

        互動:virConectGetCapabilities,virConnectListDomains

        關閉操作:virConnectClose

    域管理的API:以virDomain開頭的一系列函式

        獲取域物件:virDomainPtrvirDomainLookupByID,virDomainPtrvirDomainLookupByID

        查詢域資訊,控制域的生命週期

    節點管理的API:以virNode開頭的一系列函式

        獲取各種資源資訊:virNodeGetInof,virNodeGEtCPUStatus,virNodeGetMemoryStats,virNodeGetFreeMemory,virNodeSuspendForDuration

    網路管理的API:以virNetwork開頭的和virInterface開頭的

    儲存卷管理的API:以virStorageVol開頭的一系列函式

    儲存池管理的API:以virStroagePool開頭的一系列函式

    事件管理API:以virEvent開頭的一系列函式

    資料流管理的API:以virStream開頭的一系列函式

6.1.6 建立到Hypervisor的連線

    CS架構,伺服器端執行Hypervisor,其上需要Libvirtd這個守護程序,科幻段連線到Libvirtd從而進行管理操作。

    本地URI——客戶端使用本地URL用於連線本系統範圍內的Hypervisor;

    遠端URI

    使用URI   virsh -c qemu:///system

              virsh -c qemu+ssh://[email protected]/system

6.1.7 libvirt API使用示例

     使用C API連線客戶機,查詢域資訊

     使用python API連線客戶機,查詢域資訊


6.2 virsh

6.2.1 virsh簡介

      管理虛擬化環境中的客戶機和Hypervisor的命令列工具,客戶端連線程式。兩種工作模式,互動模式和非互動模式。
6.2.2 virsh常用命令

      域管理命令(list,dominfo,domid,....)

      宿主機和Hypervisor的管理(version,sysinfo,nodeinfo,...)

      網路管理命令(iface-list,iface-name,net-list,net-edit,...)

      儲存池和儲存卷的管理命令(pool-list,pool-info<pool-name>,...)
6.3 virt-manager

6.3.1 virt-manager簡介

      管理虛擬機器的圖形化的桌面使用者介面
6.3.2 virt-manager編譯和安裝

6.3.3 virt-manager使用

      1.開啟virt-manager

      2.建立、啟動、暫停、關閉一個客戶機;

      3.連線到本地和遠端的Hypervisor

      4.檢視和修改客戶機的詳細配置

      5.動態遷移

      6.效能統計影象介面,可以統計客戶機CPU利用率、客戶機磁碟IO,客戶機網路IO等

6.4 virt-viewer、virt-install和virt-top
6.4.1 virt-viewer——用於與虛擬化客戶機的圖形顯示的輕量級的交行介面工具。
6.4.2 virt-install——為virt-manager的圖形介面和建立客戶機提供安裝系統的API。
6.4.3 virt-top——用於展示虛擬化客戶機狀態和資源利用率的工具。


6.5 OpenStack雲端計算平臺
6.5.1 OpenStack簡介
6.5.2 使用DevStack安裝和配置OpenStack開發環境
6.5.3 在OpenStack中使用KVM
6.6 本章小結
6.7 本章註釋和參考閱讀


第7章 Linux發行版中的KVM
7.1 RHEL和Fedora中的KVM
7.1.1 Red Hat、RHEL、Fedora和CentOS簡介
7.1.2 RHEL中的KVM
7.1.3 Fedora中的KVM
7.2 SLES和openSUSE中的KVM
7.2.1 SLES中的KVM
7.2.2 openSUSE中的KVM
7.3 Ubuntu中的KVM
7.4 本章小結
7.5 本章註釋和參考閱讀


第8章 KVM效能測試及參考資料

虛擬化方案——功能和效能;功能是實現虛擬化的基礎,效能是虛擬化效率的關鍵指標。評價一個系統的效能指標:

 響應時間:客戶端發出請求到響應的整個過程所花費的時間

 吞吐量:指在一次效能測試過程中網路上傳輸的資料量的總和。

 併發使用者數:指在使用一個系統服務的使用者數量

 資源佔用率:使用某個服務時,客戶端和伺服器佔用資源的情況。

     CPU密集型:科學計算;網路IO祕籍型:web服務;磁碟IO密集型:資料庫服務;記憶體密集型:快取服務

8.1 虛擬化效能測試簡介


8.2 CPU效能測試
8.2.1 CPU效能測試工具

   SPECCPU2006

   SPECjbb2005:評估伺服器端Java應用效能的基準測試程式

   UnixBench:類Unix系統提供的基礎的衡量指標

   SysBench:系統在模擬高壓力資料庫應用中的效能

   PCMark:針對一個計算機系統整體及其部件進行效能評估的基準測試工具。

   核心編譯:CPU密集型、也可是記憶體密集型

   Super PI:典型的計算CPU密集型基準測試工具。

8.2.2 測試環境配置

   宿主機、客戶機軟硬體環境,核心選項配置情況

8.2.3 效能測試方法

   SPEC CPU2006測試安裝

   核心編譯

   Super PI
8.2.4 效能測試資料


8.3 記憶體效能測試
8.3.1 記憶體效能測試工具

     LMbench——評價系統綜合性能的良好工具。

     Memtest86++——記憶體檢測工具

     STREAM——衡量系統執行一些簡單向量計算核心是能達到的最大記憶體頻寬和相應的計算速度。
8.3.2 測試環境配置
8.3.3 效能測試方法

     LMbench——評估KVM記憶體虛擬機器效能。會生成一個系統測試文件和測試結果報告
8.3.4 效能測試資料

8.4 網路效能測試
8.4.1 網路效能測試工具

     Netperf——網路效能測試工具,可以測試多個方面。

     Iperf——常用的網路測試工具

     NETIO——使用不同大小的資料包來測試TCP和UDP網路連線的吞吐量。

     SCP——最常用的遠端檔案複製工具。

8.4.2 測試環境配置

     注意網絡卡配置,使用預設的rt181139模式的網橋網路、使用virtio-net(QEMU做後端驅動)的網橋網路,使用virtio-net模式的網橋網路,

     VT-d直接分配PF,SR-IOV直接分配VF
8.4.3 效能測試方法

     Netperf

     SCP
8.4.4 效能測試資料

     不同配置下的Netperf測試資料;不同配置下的SCP測試資料

     結論:

       配置對比:virtio、VT-d和SR-IOV模式,可以達到和原生系統網路差不多的效能;在達到相同頻寬的情況下,VT-d和SR-IOV方式佔用的CPU資源比virtio略少;純軟體模擬的rt181139和e1000網絡卡的效能較差。

8.5 磁碟I/O效能測試
8.5.1 磁碟I/O效能測試工具

  DD——檔案複製工具;

  IOzone——通過對多種檔案進行操作,來衡量一個檔案系統的效能。

  Bonnie++——可以模擬資料庫去訪問一個單一的大檔案

  hdparm——獲取和設定SATA和IDE裝置的引數工具,粗略的測試磁碟IO的效能。

8.5.2 測試環境配置

  使用純軟體模擬IDE磁碟和使用virtio-blk驅動的磁碟。
8.5.3 效能測試方法

  DD、IOZone、Bonnie++
8.5.4 效能測試資料
8.6 本章小結
8.7 本章註釋和參考閱讀


第9章 參與KVM開源社群

9.1 開源社群介紹
9.1.1 Linux開源社群

     Linux核心程式碼維護層次結構
9.1.2 KVM開源社群

     KVM Forum,http://www.linux-kvm.org/page/KVM_Forum
9.1.3 QEMU開源社群

     CloudStack cloudstack.apache.org

     Apache     httpd.apache.org

     Hadoop     hadoop.apache.org 

9.2 程式碼結構簡介
9.2.1 KVM程式碼   

     kvm框架核心程式碼  位於目錄 virt/kvm/下

     與硬體架構相關的程式碼,位於  arch/*/kvm
9.2.2 QEMU程式碼

     QEMU程式碼實現了對PC客戶機的完全模擬。

     QEMU配合KVM啟動一個客戶機的流程。先開啟 /dev/kvm裝置,通過名為 KVM_CREATE_VM的IOCTL呼叫來建立一個虛擬機器物件,然後通過KVM_CREATE_VCPU為虛擬機器建立vcpu物件,最後通過 KVM_RUN 讓vCPU 執行起來。這個抽象後的簡化過程如下:

     main(): vl.c

     configure_accelerator():vl.c -> kvm_init(): kvm_all.c

     machine->init():vl.c            qemu_open("/dev/kvm"):kvm_all.c

     pc_init_pci():pc_piix.c         kvm_ioctl(KVM_CREATE_VM):kvm_all.c

     pc_init1():hw/i386/pc_piix.c

     pc_nex_cpu():hw/i386/pc.c

     ...

     qemu_init_vcpu():cpu.c

     qemu_kvm_start_vcpu():cpu.c

     qemu_thread_create():util/qemu-thread-posix.c

     pthread_create():#create vCPU thread

     qume_kvm_cpu_thread_fn(): cpu.c

     kvm_init_vcpu:kvm-all.c

     kvm_vm_ioctl(KVM_CREATE_VCPU)

9.2.3 KVM單元測試程式碼

     基本原理:將編譯好的輕量級測試核心映象(*.flat檔案)作為支援多重啟動的QEMU的客戶機核心映象來啟動,測試使用一個通過客戶機BIOS來呼叫的基礎架構,該基礎架構將會主要初始化客戶機系統(包括CPU等),然後切換到長模式(x86_64 CPU架構的一種執行模式)並呼叫各個具體測試用例的主函式從而執行測試,在測試完成QEMU程序自動退出。

9.2.4 KVM Autotest程式碼

     
9.3 向開源社群貢獻程式碼
9.3.1 開發者郵件列表
9.3.2 程式碼風格

     縮排;長的行和字串打亂(每一行的長度不要超過80個詞);大括號的位置;空格的使用;
9.3.3 生成patch

     patch:新增的新功能或者修復某個bug的程式碼。

     使用diff工具或git工具可以生成patch

      diff -urN kvm.git/ kvm-my.git/ >my.patch

      git add virt/kvm/kvm_main.c
9.3.4 檢查patch

      使用腳步檢查patch是否合規: scripts/checkpatch.pl

9.3.5 提交patch
9.4 提交KVM相關的bug
9.4.1 通過郵件列表提交bug
9.4.2 使用bug管理系統提交bug
9.4.3 使用二分法定位bug
9.5 本章小結
9.6 本章註釋和參考閱讀

相關推薦

KVM虛擬化技術實戰原理解析——讀書筆記

入門級書籍——一種KVM,Qemu的使用手冊 轉載請說明出處。 全書一共9章:         第1章介紹了雲端計算和虛擬化的概念,並對KVM等幾種流行的虛擬化技術做了比較;         第2章介紹了KVM的基本架構、QEMU的作用以 及Intel的硬體虛

KVM虛擬化技術實戰原理解析

1、軟體虛擬化和硬體虛擬化:實現虛擬化的重要一步在於:虛擬化層必須能夠截獲計算元件對物理資源的直接訪問,並將其重定向到虛擬資源池中。硬體虛擬化,就是物理平臺本身提供了對特殊指令的截獲和重定向的硬體支援 2、準虛擬化與全虛擬化:改動客戶作業系統,使他以為自己執行在虛擬環境下,能夠與虛擬機器監控

《RockeMQ實戰原理解析》 學習筆記

第一章 1.1 訊息佇列的功能介紹 1.1.1 應用解耦 1.1.2 流量消峰 大部分應用系統在高峰時間段流量會猛增, 這個時候如果沒有緩衝機制,不可能短時間內承受住大流量的衝擊。利用訊息佇列,把大量的請求快取起來,分散到相對長的一個時間段內處理,能大大提高系統的穩定性和使用

RocketMQ 實戰原理解析

內容簡介 本書由雲棲社群官方出品。 本書作者是阿里資深資料專家,對 RocketMQ 有深入的研究,並有大量的實踐經驗。在寫這本書之前,作者不僅系統、深入地閱讀了 RocketMQ 的原始碼,而且還向 RocketMQ 的官方開發團隊深入瞭解了它的諸多設計細節。作者結合自己多年使用 Rocket

iOS KVO crash 自修復技術實現原理解析

摘要: 【前言】KVO API設計非常不合理,於是有很多的KVO三方庫,比如 KVOController 用更優的API來規避這些crash,但是侵入性比較大,必須編碼規範來約束所有人都要使用該方式。有沒有什麼更優雅,無感知的接入方式?KVO crash 自修復

深入理解Nginx:模組開發架構解析 讀書筆記

Nginx的作用 當我們在設計高效能web伺服器的時候,我們第一選擇是使用Nginx,因為nginx對伺服器效能上的挖掘已經到了非常高的水平,Nginx採用了無阻塞分階段的事件驅動框架。當nginx不能那個完全實現我們的業務需求的時候,我們可以在Nginx後端搭建一個非ng

Spring原始碼解析--《SPRING技術內幕:深入解析Spring架構設計原理讀書筆記(一):IOC容器初始化過程

通過閱讀相關章節內容,Spring中IOC容器的載入中,我們需要了解下列幾個概念: Resource:是一個定位、訪問資源的抽象介面,包含了多種資源操作的基礎方法定義,如getInputStream()、exists()、isOpen()、getD

虛擬化技術原理實現》讀書筆記之前序(一)

《虛擬化技術原理與實現》一書連結:http://book.2cto.com/201210/6736.html“變化,無論是突如其來的,還是循序漸進的,有時都會淘汰你認為理所當然的一切。”    ——《

KVM虛擬化技術DNS

rsynckvm命令1、查看虛擬機列表[root@room8pc16 review]# virsh list --all2、打開控制臺[root@room8pc16 review]# virt-manager 3、連接虛擬機[root@room8pc16 review]# virt-viewer rh7-no

分享《Flask Web開發實戰:入門、進階原理解析》PDF+源代碼

1.0 baidu rip 更多 aid size log fff web 下載:https://pan.baidu.com/s/1gbC5uhh_vjVbDk55_p7SOA 更多資料分享:http://blog.51cto.com/3215120 《Flask Web開

《Flask Web開發實戰:入門、進階原理解析》PDF+原始碼

下載:https://pan.baidu.com/s/1gbC5uhh_vjVbDk55_p7SOA 更多資料分享:http://blog.51cto.com/3215120 《Flask Web開發實戰:入門、進階與原理解析》PDF,帶目錄書籤,文字可以複製貼上;配套原始碼。 一本面向Python程式

《從 PAXOS 到 ZOOKEEPER:分散式一致性原理實踐》讀書筆記[3]——Zookeeper 技術內幕

1 系統模型 1.1 資料模型 Zookeeper 中,每一個數據節點都被稱為一個 ZNode,所有 ZNode 按層次化結構進行組織,節點路徑標識方式和 Unix 檔案系統路徑相似,由一系列使用 / 進行分割的路徑表示,開發人員可以向這個節點中寫入資料,也可以在節點下面建立子節點 Zo

《Flask Web開發實戰:入門、進階原理解析(李輝著 )》PDF+源代碼

同時 下載 第一部分 ebs 提取 項目 程序開發 圖片 bubuko 一句話評價: 這可能是市面上(包括國外出版的)你能找到最好的講Flask的書了 下載:鏈接: https://pan.baidu.com/s/1ioEfLc7Hc15jFpC-DmEYBA 提取碼:

【數據壓縮】JPEG標準原理解析

round 高頻 切割 基於 大小 image 生成 p s pan 轉載請註明出處:http://blog.csdn.net/luoshixian099/article/details/50392230 CSDN-勿在浮沙築高臺 為了滿足不同應用的需求,J

Spring Boot實戰原理分析視頻課程

spring boot 視頻課程 實戰與原理分析 1、Spring Boot概述與課程概要介紹2、Spring4 快速入門3、Spring4 擴展分析(一)4、Spring4 擴展分析(二)5、Spring Boot 快速入門6、Spring Boot 配置分析(一)7、Spring Boot 配

KVM虛擬化技術

kvm虛擬化 KVM虛擬化虛擬化介紹: VMware,Hyper-v, XenSer, XenClient,

虛擬化技術入門實踐--庖丁解牛

虛擬化hypervisor 之於操作系統類似於操作系統之於進程。它們為執行提供獨立的虛擬硬件平臺,而虛擬硬件平臺反過來又提供對底層機器的虛擬的完整訪問。但並不是所有 hypervisor 都是一樣的,這是件好事,因為 Linux 就是以靈活性和選擇性著稱。本文首先簡要介紹虛擬化和 hypervisor,然後探

linux-KVM虛擬化技術

linux運維 計算機網絡 達內 紅帽 linux系統操作 kvm虛擬化 虛擬化概述Virtualization 資源管理– x個物理資源 --> y個邏輯資源– 實現程度:完全、部分、硬件輔助(CPU)手動新建一臺虛擬機: 虛擬機名字:exam

linux運維、架構之路-KVM虛擬化技術

sna 運維 3.1 png 配置 tools 關閉 wall ati 一、雲計算概述 雲計算:是一種資源使用和交付模式 虛擬化:一種具體的技術,用來將物理機虛擬成為多個相互獨立的虛擬機。雲計算不等於虛擬化,雲計算是使用了虛擬化的技術做支撐 二、KV

KVM虛擬化技術(二)

LinuxKVMvirt-instaKVM虛擬化技術(二)===============================================================================概述:============================================