KVM實(shí)戰(zhàn):原理、進(jìn)階與性能調(diào)優(yōu)
定 價(jià):89 元
叢書名:云計(jì)算與虛擬化技術(shù)叢書
- 作者:任永杰 程舟
- 出版時(shí)間:2019/2/1
- ISBN:9787111619819
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP338
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
內(nèi)容簡介
這是一部兼具實(shí)戰(zhàn)性、系統(tǒng)性又不乏深度的KVM虛擬化技術(shù)指南,既能讓新人快速掌握KVM的基礎(chǔ)知識(shí),又能滿足有經(jīng)驗(yàn)的讀者進(jìn)階學(xué)習(xí)的需求。
本書兩位作者來自于阿里云和Intel,在云計(jì)算和KVM方面有深入的研究,他們將自己的經(jīng)驗(yàn)傾囊相授,帶你全面了解KVM的各種技術(shù)細(xì)節(jié)。
本書在邏輯上分為三大部分:
第yi部分 基礎(chǔ)篇(第1~5章)
以云計(jì)算、虛擬化的概念開篇,首先,詳細(xì)介紹了KVM的原理和基礎(chǔ)架構(gòu),以及KVM生產(chǎn)環(huán)境的構(gòu)建;然后,詳細(xì)講解了libvirt、virsh、virt-manager等KVM主流管理工具,以及包括CPU、內(nèi)存、存儲(chǔ)、網(wǎng)絡(luò)、圖形界面等在內(nèi)的各種核心基礎(chǔ)功能。這部分內(nèi)容將幫助讀者打下扎實(shí)的KVM虛擬化技術(shù)基礎(chǔ)。
第二部分 進(jìn)階篇(第6~9章)
從設(shè)備管理、內(nèi)存管理、動(dòng)態(tài)遷移、嵌套虛擬化、安全、CPU指令性能優(yōu)化等幾個(gè)特定的相對(duì)高階的知識(shí)點(diǎn)詳細(xì)展開。相信通過這部分內(nèi)容的系統(tǒng)學(xué)習(xí),讀者可以對(duì)半虛擬化驅(qū)動(dòng)、設(shè)備直接分配、設(shè)備熱插拔、大頁內(nèi)存、NUMA、嵌套虛擬化、安全特性、CPU新指令集等一系列熱門及高階的名詞和技術(shù)都會(huì)有比較深入的理解,并能培養(yǎng)起可以真正動(dòng)手實(shí)踐的能力。
第三部分 性能測試與調(diào)優(yōu)篇(第10章)
從CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤等各個(gè)方面來介紹性能評(píng)估工具與測試參考結(jié)果,同時(shí)介紹了CPU新指令(如AVX2等)、THP、KSM、NUMA等對(duì)性能的影響。讀者可以根據(jù)本篇介紹的方法來對(duì)云服務(wù)器做性能評(píng)估,也可以對(duì)自己搭建的虛擬化環(huán)境做性能調(diào)優(yōu)。
(1)兩位作者來自于Intel和阿里云,是國內(nèi)早期的KVM布道者之一,是虛擬化和云計(jì)算方面的專家。
(2)2013年,本書的第yi版彌補(bǔ)了市場空白,得到了市場的廣泛認(rèn)可,本書在此基礎(chǔ)上做了大幅度修訂,與時(shí)具進(jìn)。
為什么要寫這本書
自《KVM虛擬化技術(shù):實(shí)戰(zhàn)與原理解析》(以下簡稱“上一本書”)出版以來,受到了讀者的熱烈歡迎,幾度脫銷重印。這給了筆者強(qiáng)烈的鼓舞和責(zé)任感,覺得有必要與時(shí)俱進(jìn)給讀者介紹最新的KVM虛擬化技術(shù)的相關(guān)知識(shí)。
從上一本書出版后到現(xiàn)在近5年時(shí)間里,國內(nèi)虛擬化技術(shù)迅速普及,云計(jì)算應(yīng)用風(fēng)起云涌,阿里云、騰訊云、華為云等國內(nèi)云服務(wù)提供商迅速崛起,使得云計(jì)算、虛擬化不再是原來象牙塔里虛無縹緲的技術(shù)概念,而是與普通大眾日常生活息息相關(guān)的新名詞,KVM被這幾大云服務(wù)提供商廣泛采用,使得它成為云計(jì)算世界里事實(shí)上的虛擬化標(biāo)準(zhǔn)。在這樣的市場背景下,以Intel為代表的x86硬件廠商,這些年也愈加重視虛擬化技術(shù)的硬件支持與創(chuàng)新,ARM平臺(tái)的硬件虛擬化支持也愈加完善。硬件層面的創(chuàng)新也促使QEMU、KVM在軟件層面日新月異。比如,從2013年第1版發(fā)行至今,KVM(內(nèi)核)版本從3.5發(fā)展到了4.8;QEMU版本從1.3發(fā)展到了2.7;專門針對(duì)KVM的qemu-kvm代碼樹已經(jīng)廢棄(被合并到了主流QEMU中)……因此,上一本書中的很多用例、方法和結(jié)論等,在新的代碼環(huán)境下已經(jīng)有些不合時(shí)宜,甚至?xí)鲥e(cuò)。我們有必要給讀者提供最新且正確的信息。
相對(duì)于上一本書的修改
總體來說,我們對(duì)上一本書里所有的用例、圖例都做了大量修改更新,實(shí)驗(yàn)環(huán)境采用筆者寫作時(shí)的最新技術(shù):硬件平臺(tái)采用Intel Broadwell Xeon Server,KVM(內(nèi)核)為4.8版本,QEMU為2.7版本,操作系統(tǒng)環(huán)境是RHEL 7.3。文中注釋改成腳注的形式,而不是像上一本書那樣出現(xiàn)在每章末尾。我們認(rèn)為這樣更方便讀者閱讀。當(dāng)然,文字表述上也進(jìn)行了許多修改。
另外,我們對(duì)章節(jié)的結(jié)構(gòu)也進(jìn)行了重新組織,全書共分3篇,10章:第一篇“KVM虛擬化基礎(chǔ)”(第1章~第5章),第二篇“KVM虛擬化進(jìn)階”(第6章~第9章),第三篇“性能測試與調(diào)優(yōu)”(第10章)。
除了上述的總體修改外,各章主要修改內(nèi)容如下。
第1章,我們重新組織了結(jié)構(gòu),精簡了一些文字介紹,加入了一些數(shù)據(jù)圖表以便于讀者的理解。加入了云計(jì)算幾種服務(wù)模型的描述和圖示。加入了一節(jié)關(guān)于容器(Container)的簡介,以便讀者對(duì)比學(xué)習(xí)。
第2章,對(duì)上一本書相關(guān)章節(jié)進(jìn)行了更為系統(tǒng)的梳理,介紹了硬件虛擬化技術(shù)、KVM、QEMU、與KVM配合的組件以及相關(guān)工具鏈。
第5章,著重對(duì)其中的網(wǎng)絡(luò)配置一節(jié)進(jìn)行了更新。將上一本書中的第5章拆分成了第6章、第7章、第8章和第9章,并分別進(jìn)行了內(nèi)容擴(kuò)充。
第6章,對(duì)應(yīng)上一本書中的第5章的半虛擬化、設(shè)備直接分配、熱插拔這3節(jié),并分別進(jìn)行了補(bǔ)充。在半虛擬化驅(qū)動(dòng)一節(jié)中,我們新增了“內(nèi)核態(tài)的vhost-net后端以及網(wǎng)卡多隊(duì)列”“使用用戶態(tài)的vhost-user作為后端驅(qū)動(dòng)”“對(duì)Windows客戶機(jī)的優(yōu)化”這3小節(jié)。在設(shè)備直接分配一節(jié)中,我們使用VFIO替換掉了已經(jīng)被廢棄的Legacy passthrough。在熱插拔一節(jié),我們將內(nèi)存熱插拔獨(dú)立出來,并著重更新,因?yàn)樵谏弦槐緯霭鏁r(shí)它還未被完全支持。除此之外,我們還新增了磁盤熱插拔和網(wǎng)絡(luò)接口的熱插拔兩節(jié)。
第7章,我們將上一本書中的第4章中內(nèi)存大頁部分和上一本書中的第5章中的KSM、透明大頁等內(nèi)容湊在一起,組成了KVM內(nèi)存管理高級(jí)技巧,同時(shí)新增了NUMA(非統(tǒng)一內(nèi)存訪問架構(gòu))一節(jié)。
第8章,由上一本書中的第5章的“動(dòng)態(tài)遷移”和“遷移到KVM虛擬化環(huán)境”兩節(jié)組成。
第9章,在上一本書中的第5章的“嵌套虛擬化”“KVM安全”等內(nèi)容的基礎(chǔ)上,新增了“CPU指令相關(guān)的性能優(yōu)化”一節(jié),著重介紹了最近幾年Intel的一些性能優(yōu)化新指令在虛擬化環(huán)境中的應(yīng)用。
第10章,對(duì)應(yīng)上一本書中的第8章,專門講KVM性能測試與優(yōu)化。我們?cè)谧钚碌能浻布h(huán)境中重做了CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤的性能測試,獲取了最新的數(shù)據(jù),尤其對(duì)一些測試工具(benchmark)進(jìn)行了重新選取,比如磁盤性能測試,我們放棄了IOzone和Bonnie++,而選用業(yè)界更認(rèn)可的fio。另外,我們還加入了“CPU指令集對(duì)性能的提升”和“其他的影響客戶機(jī)性能的因素”兩節(jié)進(jìn)行分析,希望對(duì)讀者進(jìn)行虛擬化系能調(diào)優(yōu)有所啟示。
上一本書中的第7章“Linux發(fā)行版中的KVM”和第9章“參與KVM開源社區(qū)”分別作為本書的附錄A和附錄B,并進(jìn)行了相應(yīng)的內(nèi)容更新。
其他章節(jié)的內(nèi)容保持不變,即第3章為上一本書的第3章且內(nèi)容不變;第4章為上一本書的第6章,內(nèi)容不變。
讀者對(duì)象
本書適合對(duì)Linux下虛擬化或云計(jì)算基礎(chǔ)技術(shù)感興趣的讀者閱讀,包括Linux運(yùn)維工程師、KVM開發(fā)者、云平臺(tái)開發(fā)者、虛擬化方案決策者、KVM的用戶以及其他對(duì)KVM虛擬機(jī)感興趣的計(jì)算機(jī)愛好者。希望本書對(duì)這些讀者了解KVM提供以下幫助。
Linux運(yùn)維工程師:了解KVM的使用方法、功能和基本的性能數(shù)據(jù),能夠搭建高性能的KVM虛擬化系統(tǒng),并應(yīng)用于生產(chǎn)環(huán)境中。
KVM開發(fā)者:了解KVM的基本原理和功能,也了解其基本用法和一些調(diào)試方法,以及如何參與到KVM開源社區(qū)中去貢獻(xiàn)代碼。
云平臺(tái)開發(fā)者:了解底層KVM虛擬化的基本原理和用法,以促進(jìn)云平臺(tái)上層應(yīng)用的開發(fā)和調(diào)試的效率。
虛擬化方案決策者:了解KVM的硬件環(huán)境需求和它的功能、性能概況,以便在虛擬化技術(shù)選型時(shí)做出最優(yōu)化的決策。
普通用戶:了解KVM的功能和如何使用KVM,用掌
前言
第一篇 KVM虛擬化基礎(chǔ)
第1章 虛擬化簡介2
1.1 云計(jì)算概述2
1.1.1 什么是云計(jì)算2
1.1.2 云計(jì)算的歷史4
1.1.3 云計(jì)算的幾種服務(wù)模型5
1.2 虛擬化技術(shù)6
1.2.1 什么是虛擬化6
1.2.2 軟件虛擬化和硬件虛擬化7
1.2.3 半虛擬化和全虛擬化8
1.2.4 Type1和Type2虛擬化8
1.3 KVM簡介9
1.3.1 KVM的歷史9
1.3.2 KVM的功能概覽10
1.3.3 KVM的現(xiàn)狀12
1.3.4 KVM的展望13
1.4 其他的虛擬化解決方案簡介14
1.4.1 Xen14
1.4.2 VMware14
1.4.3 HyperV16
1.4.4 Container17
1.5 本章小結(jié)17
第2章 KVM原理簡介18
2.1 硬件虛擬化技術(shù)18
2.1.1 CPU虛擬化18
2.1.2 內(nèi)存虛擬化20
2.1.3 I/O虛擬化22
2.1.4 Intel虛擬化技術(shù)發(fā)展24
2.2 KVM架構(gòu)概述25
2.3 KVM內(nèi)核模塊26
2.4 QEMU用戶態(tài)設(shè)備模擬27
2.5 與QEMU/KVM結(jié)合的組件28
2.6 KVM上層管理工具30
2.7 本章小結(jié)31
第3章 構(gòu)建KVM環(huán)境32
3.1 硬件系統(tǒng)的配置32
3.2 安裝宿主機(jī)Linux系統(tǒng)34
3.3 編譯和安裝KVM37
3.3.1 下載KVM源代碼37
3.3.2 配置KVM39
3.3.3 編譯KVM43
3.3.4 安裝KVM44
3.4 編譯和安裝QEMU46
3.4.1 曾經(jīng)的qemu-kvm46
3.4.2 下載QEMU源代碼47
3.4.3 配置和編譯QEMU47
3.4.4 安裝QEMU49
3.5 安裝客戶機(jī)50
3.6 啟動(dòng)第一個(gè)KVM客戶機(jī)53
3.7 本章小結(jié)53
第4章 KVM管理工具55
4.1 libvirt55
4.1.1 libvirt簡介55
4.1.2 libvirt的安裝與配置58
4.1.3 libvirt域的XML配置文件63
4.1.4 libvirt API簡介76
4.1.5 建立到Hypervisor的連接78
4.1.6 libvirt API 使用示例82
4.2 virsh87
4.2.1 virsh簡介87
4.2.2 virsh常用命令88
4.3 virt-manager95
4.3.1 virt-manager簡介95
4.3.2 virt-manager編譯和安裝96
4.3.3 virt-manager使用96
4.4 virt-viewer、virt-install、virt-top和libguestfs105
4.4.1 virt-viewer105
4.4.2 virt-install106
4.4.3 virt-top107
4.4.4 libguestfs107
4.5 云計(jì)算管理平臺(tái)109
4.5.1 OpenStack簡介109
4.5.2 ZStack簡介111
4.6 本章小結(jié)111
第5章 KVM核心基礎(chǔ)功能112
5.1 硬件平臺(tái)和軟件版本說明112
5.2 CPU配置114
5.2.1 vCPU的概念115
5.2.2 SMP的支持116
5.2.3 CPU過載使用123
5.2.4 CPU模型124
5.2.5 進(jìn)程的處理器親和性和vCPU的綁定127
5.3 內(nèi)存配置131
5.3.1 內(nèi)存設(shè)置基本參數(shù)132
5.3.2 EPT和VPID簡介133
5.3.3 內(nèi)存過載使用136
5.4 存儲(chǔ)配置137
5.4.1 存儲(chǔ)配置和啟動(dòng)順序137
5.4.2 qemu-img命令142
5.4.3 QEMU支持的鏡像文件格式145
5.4.4 客戶機(jī)存儲(chǔ)方式149
5.5 網(wǎng)絡(luò)配置150
5.5.1 用QEMU實(shí)現(xiàn)的網(wǎng)絡(luò)模式151
5.5.2 使用直接的網(wǎng)橋模式154
5.5.3 用網(wǎng)橋?qū)崿F(xiàn)NAT模式161
5.5.4 QEMU內(nèi)部的用戶模式網(wǎng)絡(luò)170
5.5.5 其他網(wǎng)絡(luò)選項(xiàng)174
5.6 圖形顯示175
5.6.1 SDL的使用175
5.6.2 VNC的使用177
5.6.3 VNC顯示中的鼠標(biāo)偏移186
5.6.4 非圖形模式187
5.6.5 顯示相關(guān)的其他選項(xiàng)189
5.7 本章小結(jié)191
第二篇 KVM虛擬化進(jìn)階
第6章 KVM設(shè)備高級(jí)管理194
6.1 半虛擬化驅(qū)動(dòng)194
6.1.1 virtio概述194
6.1.2 安裝virtio驅(qū)動(dòng)196
6.1.3 使用virtio_balloon203
6.1.4 使用virtio_net208
6.1.5 使用virtio_blk210
6.1.6 內(nèi)核態(tài)的vhost-net后端以及網(wǎng)卡多隊(duì)列212
6.1.7 使用用戶態(tài)的vhost-user作為后端驅(qū)動(dòng)215
6.1.8 kvm_clock配置216
6.1.9 對(duì)Windows客戶機(jī)的優(yōu)化218
6.2 設(shè)備直接分配(VT-d)219
6.2.1 VT-d概述219
6.2.2 VFIO簡介220
6.2.3 VT-d環(huán)境配置221
6.2.4 VT-d操作示例230
6.2.5 SR-IOV技術(shù)240
6.3 熱插拔251
6.3.1 PCI設(shè)備熱插拔252
6.3.2 PCI設(shè)備熱插拔示例253
6.3.3 CPU的熱插拔259
6.3.4 內(nèi)存的熱插拔260
6.3.5 磁盤的熱插拔264
6.3.6 網(wǎng)卡接口的熱插拔265
6.4 本章小結(jié)266
第7章 KVM內(nèi)存管理高級(jí)技巧268
7.1 大頁268
7.1.1 大頁的介紹268
7.1.2 KVM虛擬化對(duì)大頁的利用271
7.2 透明大頁274
7.3 KSM277
7.3.1 KSM基本原理278
7.3.2 KSM操作實(shí)踐280
7.3.3 QEMU對(duì)KSM的控制286
7.4 與NUMA相關(guān)的工具288
7.4.1 numastat289
7.4.2 numad290
7.4.3 numactl294
7.5 本章小結(jié)295
第8章 KVM遷移297
8.1 動(dòng)態(tài)遷移297
8.1.1 動(dòng)態(tài)遷移的概念297
8.1.2 動(dòng)態(tài)遷移的效率和應(yīng)用場景298
8.1.3 KVM動(dòng)態(tài)遷移原理299
8.1.4 KVM動(dòng)態(tài)遷移實(shí)踐302
8.1.5 VT-d/SR-IOV的動(dòng)態(tài)遷移306
8.2 遷移到KVM虛擬化環(huán)境307
8.2.1 virt-v2v工具介紹307
8.2.2 從Xen遷移到KVM308
8.2.3 從VMware遷移到KVM310
8.2.4 從VirtualBox遷移到KVM311
8.2.5 從物理機(jī)遷移到KVM虛擬化環(huán)境(P2V)312
8.3 本章小結(jié)313
第9章 其他高級(jí)功能314
9.1 嵌套虛擬化314
9.1.1 嵌套虛擬化的基本概念314
9.1.2 KVM嵌套KVM315
9.2 KVM安全318
9.2.1 SMEP/SMAP/MPX318
9.2.2 控制客戶機(jī)的資源使用—cgroups319
9.2.3 SELinux和sVirt327
9.2.4 其他安全策略336