深度探索Linux系統(tǒng)虛擬化:原理與實(shí)現(xiàn)
定 價(jià):89 元
叢書名:華章原創(chuàng)精品
- 作者:王柏生 謝廣軍
- 出版時(shí)間:2020/10/1
- ISBN:9787111666066
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP316.85
- 頁碼:0
- 紙張:
- 版次:
- 開本:16開
內(nèi)容簡介
這是一部深度講解如何在Linux操作系統(tǒng)環(huán)境下用軟件虛擬出一臺(tái)“物理”計(jì)算機(jī)的著作。
兩位作者都是百度的技術(shù)專家,一位是百度的主任架構(gòu)師,一位是百度智能云的副總經(jīng)理,都在操作系統(tǒng)和虛擬化等領(lǐng)域有多年的實(shí)踐經(jīng)驗(yàn)。本書從計(jì)算機(jī)體系結(jié)構(gòu)、操作系統(tǒng)、硬件等多個(gè)方面深度探索了如何從CPU、內(nèi)存、中斷、外設(shè)、網(wǎng)絡(luò)5個(gè)維度去虛擬化Linux系統(tǒng),不僅剖析了其中的關(guān)鍵技術(shù)原理,而且深入闡述了具體的實(shí)現(xiàn)。
全書共6章:
第1章:CPU虛擬化
介紹了X86架構(gòu)下的VMX擴(kuò)展,討論了在VMX下虛擬CPU的完整生命周期,著重闡述了Host和Guest的切換、指令的模擬以及KVM是如何虛擬多處理器的。
第2章:內(nèi)存虛擬化
討論了操作系統(tǒng)如何為虛擬機(jī)呈現(xiàn)物理內(nèi)存,結(jié)合影子頁表以及EPT探討了KVM如何完成從GVA到HPA的2層地址映射。
第3章:中斷虛擬化
首先,討論了從單核系統(tǒng)的8259A開始,到多核系統(tǒng)的APIC,再到繞開I/O APIC直接從設(shè)備向LAPIC發(fā)送基于消息的MSI的虛擬化原理和實(shí)現(xiàn)。然后,討論了Intel為了提高效率,是如何從硬件層面對虛擬化中斷進(jìn)行支持的,以及KVM是如何使用它們的。
第4~5章 外設(shè)虛擬化
從完全虛擬化開始,依次講解了半虛擬化(Virtio)和Intel的VT-d支持下的硬件輔助虛擬化。通過實(shí)現(xiàn)一個(gè)模擬串口帶領(lǐng)讀者直觀體會(huì)了設(shè)備虛擬化的基本原理,然后深入闡述了Virito標(biāo)準(zhǔn)和實(shí)現(xiàn),以及支持SR-IOV的DMA重映射和中斷重映射。
第6章 網(wǎng)絡(luò)虛擬化
討論了在通用硬件網(wǎng)絡(luò)的基礎(chǔ)上,操作系統(tǒng)如何虛擬出專用的網(wǎng)絡(luò)設(shè)備,為租戶組建虛擬網(wǎng)絡(luò)。
前 言
第1章 CPU虛擬化 1
1.1 x86架構(gòu)CPU虛擬化 1
1.1.1 陷入和模擬模型 2
1.1.2 x86架構(gòu)虛擬化的障礙 2
1.1.3 VMX 3
1.1.4 VCPU生命周期 5
1.2 虛擬機(jī)切入和退出 8
1.2.1 GCC內(nèi)聯(lián)匯編 8
1.2.2 虛擬機(jī)切入和退出及相關(guān)的上下文保存 10
1.3 陷入和模擬 15
1.3.1 訪問外設(shè) 15
1.3.2 特殊指令 22
1.3.3 訪問具有副作用的寄存器 27
1.4 對稱多處理器虛擬化 28
1.4.1 MP Table 28
1.4.2 處理器啟動(dòng)過程 33
1.5 一個(gè)簡單KVM用戶空間實(shí)例 41
1.5.1 創(chuàng)建虛擬機(jī)實(shí)例 43
1.5.2 創(chuàng)建內(nèi)存 43
1.5.3 創(chuàng)建處理器 44
1.5.4 Guest 46
1.5.5 加載Guest鏡像到內(nèi)存 47
1.5.6 運(yùn)行虛擬機(jī) 47
第2章 內(nèi)存虛擬化 49
2.1 內(nèi)存尋址 49
2.1.1 段式尋址 50
2.1.2 平坦內(nèi)存模型 50
2.1.3 頁式尋址 54
2.1.4 頁式尋址實(shí)例 55
2.2 VMM為Guest準(zhǔn)備物理內(nèi)存 61
2.2.1 內(nèi)核是如何獲取內(nèi)存的 62
2.2.2 建立內(nèi)存段信息 64
2.2.3 準(zhǔn)備中斷0x15的處理函數(shù)以及設(shè)置IVT 65
2.2.4 中斷0x15的處理函數(shù)實(shí)現(xiàn) 68
2.2.5 虛擬內(nèi)存條 69
2.3 實(shí)模式Guest的尋址 72
2.3.1 設(shè)置CPU運(yùn)行于Virtual-8086模式 74
2.3.2 設(shè)置Guest模式下的cr3寄存器 75
2.3.3 虛擬MMU的上下文 75
2.3.4 缺頁異常處理 77
2.4 保護(hù)模式Guest的尋址 81
2.4.1 偷梁換柱cr3 83
2.4.2 影子頁表缺頁異常處理 86
2.5 EPT 92
2.5.1 設(shè)置EPT頁表 93
2.5.2 EPT異常處理 95
2.5.3 EPT支持下的地址翻譯過程 97
第3章 中斷虛擬化 99
3.1 虛擬中斷 99
3.2 PIC虛擬化 102
3.2.1 可編程中斷控制器8259A 103
3.2.2 虛擬設(shè)備向PIC發(fā)送中斷請求 106
3.2.3 記錄中斷到IRR 107
3.2.4 設(shè)置待處理中斷標(biāo)識 108
3.2.5 中斷評估 110
3.2.6 中斷ACK 112
3.2.7 關(guān)于EOI的處理 113
3.2.8 中斷注入 114
3.3 APIC虛擬化 116
3.3.1 外設(shè)中斷過程 118
3.3.2 核間中斷過程 123
3.3.3 IRQ routing 125
3.4 MSI(X)虛擬化 128
3.4.1 MSI(X)Capability數(shù)據(jù)結(jié)構(gòu) 129
3.4.2 建立IRQ routing表項(xiàng) 131
3.4.3 MSI設(shè)備中斷過程 132
3.5 硬件虛擬化支持 134
3.5.1 虛擬中斷寄存器頁面(virtual-APIC page) 134
3.5.2 Guest模式下的中斷評估邏輯 136
3.5.3 posted-interrupt processing 139
第4章 設(shè)備虛擬化 142
4.1 設(shè)備虛擬化模型演進(jìn) 142
4.2 PCI配置空間及其模擬 144
4.3 設(shè)備透傳 152
4.3.1 虛擬配置空間 153
4.3.2 DMA重映射 157
4.3.3 中斷重映射 160
4.4 完全虛擬化 166
4.4.1 Guest發(fā)送數(shù)據(jù) 167
4.4.2 Guest接收數(shù)據(jù) 173
第5章 Virtio虛擬化 182
5.1 I/O棧 182
5.1.1 文件系統(tǒng) 182
5.1.2 通用塊層 190
5.1.3 塊設(shè)備驅(qū)動(dòng) 194
5.1.4 page cache 196
5.1.5 bio 201
5.1.6 I/O調(diào)度器 202
5.2 Virtio協(xié)議 204
5.2.1 描述符表 205
5.2.2 可用描述符區(qū)域 207
5.2.3 已用描述符區(qū)域 208
5.2.4 Virtio設(shè)備的PCI配置空間 209
5.3 初始化Virtqueue 210
5.4 驅(qū)動(dòng)根據(jù)I/O請求組織描述符鏈 216
5.5 驅(qū)動(dòng)通知設(shè)備處理請求 221
5.6 設(shè)備處理I/O請求 222
5.7 驅(qū)動(dòng)側(cè)回收I/O請求 226
5.8 設(shè)備異步處理I/O 229
5.9 輕量虛擬機(jī)退出 231
5.9.1 創(chuàng)建eventfd 232
5.9.2 kvmtool監(jiān)聽eventfd 235
5.9.3 VM exit處理函數(shù)喚醒I/O任務(wù) 236
第6章 網(wǎng)絡(luò)虛擬化 239
6.1 基于Overlay的虛擬網(wǎng)絡(luò)方案 239
6.1.1 計(jì)算節(jié)點(diǎn) 240
6.1.2 網(wǎng)絡(luò)節(jié)點(diǎn) 247
6.1.3 Open vSwitch 251
6.2 虛擬機(jī)訪問外部主機(jī) 255
6.2.1 數(shù)據(jù)包在計(jì)算節(jié)點(diǎn)Linux網(wǎng)橋中的處理 256
6.2.2 數(shù)據(jù)包在計(jì)算節(jié)點(diǎn)的Open vSwitch中的處理 257
6.2.3 數(shù)據(jù)包在網(wǎng)絡(luò)節(jié)點(diǎn)的Open vSwitch中的處理 265
6.3 外部主機(jī)訪問虛擬機(jī) 272
6.3.1 數(shù)據(jù)包在網(wǎng)關(guān)中的處理過程 273
6.3.2 數(shù)據(jù)包在網(wǎng)絡(luò)節(jié)點(diǎn)的Open vSwitch中的處理 274
6.3.3 數(shù)據(jù)包在計(jì)算節(jié)點(diǎn)的Open vSwitch中的處理 279
6.3.4 數(shù)據(jù)包在Linux網(wǎng)橋中的處理 283