linux串口中断_5年匠心之作,深度探索Linux虚拟化
大約在2014年底,我參與了一個(gè)項(xiàng)目,使用Android模擬器在x86架構(gòu)的機(jī)器上運(yùn)行各種Android游戲。當(dāng)時(shí)項(xiàng)目遇到的核心問題是游戲運(yùn)行卡頓嚴(yán)重,印象中普通的小游戲每秒大約只能渲染十幾幀,大型游戲則完全無法成功加載。運(yùn)行模擬器的機(jī)器都有頂配的顯卡,因此硬件性能并不存在問題。那么問題就出在軟件架構(gòu)上了。當(dāng)時(shí)采用的軟件架構(gòu)是:使用虛擬機(jī)運(yùn)行Android程序,Android中有一個(gè)模塊會(huì)將數(shù)據(jù)通過網(wǎng)絡(luò)傳送給另外一個(gè)本地應(yīng)用進(jìn)行渲染。對(duì)于游戲這種數(shù)據(jù)量很大的應(yīng)用,采用網(wǎng)絡(luò)包傳輸顯然不是一個(gè)最優(yōu)的方案。除了網(wǎng)絡(luò)包在協(xié)議棧中的各種復(fù)雜處理外,大量的網(wǎng)絡(luò)包傳輸會(huì)導(dǎo)致虛擬機(jī)和主機(jī)之間的頻繁切換,這將耗費(fèi)大量的計(jì)算資源。基于此,我們?cè)O(shè)計(jì)的新方案是在VMM層實(shí)現(xiàn)一個(gè)虛擬設(shè)備,在Guest內(nèi)部通過這個(gè)虛擬設(shè)備向渲染程序發(fā)送數(shù)據(jù)。虛擬設(shè)備通過IPC方式與負(fù)責(zé)渲染的程序進(jìn)行通信。方案實(shí)現(xiàn)后,原來無法加載的大型游戲每秒都可以達(dá)到Android的渲染上限60幀。
2015年我參與了另外一個(gè)項(xiàng)目,將虛擬機(jī)的塊設(shè)備數(shù)據(jù)存儲(chǔ)到塊存儲(chǔ)集群。原有的方案是在宿主機(jī)上采用SCSI創(chuàng)建一個(gè)塊設(shè)備,然后將這個(gè)塊設(shè)備傳給Qemu,SCSI設(shè)備再通過iSCSI協(xié)議將塊數(shù)據(jù)傳遞給遠(yuǎn)端塊存儲(chǔ)集群。這個(gè)方案有很多弊端,塊數(shù)據(jù)經(jīng)歷了兩次I/O棧,一次是Guest內(nèi)核中的,另外一次是Host內(nèi)核中的,因此效率很低。另外,這個(gè)方案還有個(gè)致命的問題:那時(shí)偶爾會(huì)遇到內(nèi)核中iSCSI協(xié)議的Bug,此時(shí)除了重啟宿主機(jī)外別無他法,而且那時(shí)熱遷移還不是很成熟,可以想象一下重啟宿主機(jī)的后果。為了解決這些問題,我們?cè)O(shè)計(jì)了另外一種方案,在Qemu中實(shí)現(xiàn)一個(gè)虛擬塊設(shè)備,繞過內(nèi)核的I/O棧,在該虛擬塊設(shè)備中直接將塊數(shù)據(jù)通過TCP/IP發(fā)給塊存儲(chǔ)集群,從而不再依賴iSCSI協(xié)議。方案實(shí)現(xiàn)后,IOPS獲得了極大的提升,系統(tǒng)的穩(wěn)定性也增強(qiáng)了。
經(jīng)歷了很多類似上述的情況,因此我打算寫一本Linux系統(tǒng)虛擬化方面的書,希望能讓讀者更深刻地認(rèn)識(shí)和理解系統(tǒng)虛擬化,于是我和本書的第二作者謝廣軍博士相約,一起撰寫本書。從2015年開始,歷時(shí)近6年,中間歷經(jīng)多次易稿,從最開始過多地聚焦于煩瑣的技術(shù)細(xì)節(jié),到嘗試從系統(tǒng)結(jié)構(gòu)、操作系統(tǒng)和硬件等多角度去解釋原委。書中全部采用可以說明問題的早期代碼版本,而不是采用因各種特性迭代而變得紛繁復(fù)雜的最新代碼。
在這5年多的時(shí)間里,每每不想堅(jiān)持時(shí),就會(huì)想起自己年輕氣盛時(shí)經(jīng)常質(zhì)疑前輩們?yōu)槲覀兞粝铝耸裁?#xff0c;而如今我捫心自問,從事了這么多年計(jì)算機(jī)工作,我又為這個(gè)行業(yè)做了什么?最后,希望本書能讓大家有所收獲。
02內(nèi)容簡(jiǎn)介本書探討了軟件如何虛擬計(jì)算機(jī)系統(tǒng),包括CPU、內(nèi)存、中斷和外設(shè)等。此外,在云計(jì)算中,網(wǎng)絡(luò)虛擬化也至關(guān)重要,因此,本書最后一章探討了網(wǎng)絡(luò)虛擬化。
第1章討論CPU虛擬化。
這一章介紹了x86架構(gòu)下的VMX擴(kuò)展,討論了在VMX下虛擬CPU的完整生命周期。以Guest通過內(nèi)存映射(MMIO)方式訪問外設(shè)為例,展示了KVM如何完整地模擬一個(gè)CPU指令。然后,我們探討了KVM是如何模擬多處理器系統(tǒng)的。最后,通過一個(gè)具體的KVM用戶空間部分的實(shí)例,帶領(lǐng)讀者直觀地體會(huì)CPU虛擬化的概念。
第2章討論內(nèi)存虛擬化。
這一章首先簡(jiǎn)略地介紹了內(nèi)存尋址的基本原理,然后分別探討了實(shí)模式Guest以及保護(hù)模式Guest的內(nèi)存尋址,包括大家比較熟悉的影子頁(yè)表等。最后,我們討論了在硬件虛擬化支持下,即EPT模式下從Guest的虛擬地址到Host的物理地址的翻譯過程。
第3章討論中斷虛擬化。
這一章我們從最初IBM PC為單核系統(tǒng)設(shè)計(jì)的PIC(8259A)開始,討論到為多核系統(tǒng)設(shè)計(jì)的APIC,再到繞開I/O APIC、從設(shè)備直接向LAPIC發(fā)送基于消息的MSI。最后,我們討論了Intel為了提高效率是如何從硬件層面對(duì)虛擬化中斷進(jìn)行支持的,以及KVM是如何使用它們的。
第4章和第5章討論外設(shè)虛擬化。
我們從完全虛擬化開始,討論到半虛擬化,最后討論到Intel的VT-d支持下的硬件輔助虛擬化。其間,我們通過實(shí)現(xiàn)一個(gè)模擬串口,帶領(lǐng)讀者直觀地體會(huì)設(shè)備虛擬化的基本原理,然后帶領(lǐng)讀者深入了解Virito標(biāo)準(zhǔn)。最后,我們還探討了支持SR-IOV的DMA重映射和中斷重映射。
第6章討論網(wǎng)絡(luò)虛擬化。
以一個(gè)典型的Overlay網(wǎng)絡(luò)為例,從虛擬機(jī)訪問外部主機(jī)、外部主機(jī)訪問虛擬機(jī)兩個(gè)方面,分別探討了計(jì)算節(jié)點(diǎn)、網(wǎng)絡(luò)節(jié)點(diǎn)上的網(wǎng)絡(luò)虛擬化技術(shù)。
03本書讀者收獲云計(jì)算從業(yè)人員
虛擬化是云計(jì)算的基礎(chǔ),運(yùn)行各種服務(wù)的云主機(jī)都是通過虛擬化方式虛擬出來的,需要深入地掌握虛擬化技術(shù)。
云計(jì)算平臺(tái)的研發(fā)人員
只有更好地掌握虛擬化技術(shù),才能更好地管理云主機(jī)等計(jì)算資源。
云計(jì)算解決方案架構(gòu)師
只有更好地了解虛擬化技術(shù),才能為客戶設(shè)計(jì)更合理的解決方案。
虛擬化相關(guān)底層技術(shù)的研發(fā)人員
只要參透虛擬化技術(shù),才能為用戶提供更高性能的云主機(jī)。
IT技術(shù)從業(yè)者
虛擬化技術(shù)是一門跨領(lǐng)域的技術(shù),涉及操作系統(tǒng)、系統(tǒng)結(jié)構(gòu)、硬件等多個(gè)領(lǐng)域。虛擬化提供了一個(gè)全方位窺探計(jì)算機(jī)技術(shù)的途徑,通過虛擬化技術(shù),我們可以更好地研究在物理環(huán)境下無法觀察到的各種行為,虛擬化為研究計(jì)算機(jī)核心基礎(chǔ)技術(shù)提供了一個(gè)無與倫比的環(huán)境。
04
? ? 作者介紹? ??
王柏生
資深技術(shù)專家,先后就職于中科院軟件所、紅旗Linux和百度,現(xiàn)任百度主任架構(gòu)師。在操作系統(tǒng)、虛擬化技術(shù)、分布式系統(tǒng)、云計(jì)算、自動(dòng)駕駛等相關(guān)領(lǐng)域耕耘多年,有著豐富的實(shí)踐經(jīng)驗(yàn)。
著有暢銷書《深度探索Linux操作系統(tǒng)》(2013年出版)。
謝廣軍
計(jì)算機(jī)專業(yè)博士,畢業(yè)于南開大學(xué)計(jì)算機(jī)系。
資深技術(shù)專家,有多年的IT行業(yè)工作經(jīng)驗(yàn)。現(xiàn)擔(dān)任百度智能云副總經(jīng)理,負(fù)責(zé)云計(jì)算相關(guān)產(chǎn)品的研發(fā)。多年來一直從事操作系統(tǒng)、虛擬化技術(shù)、分布式系統(tǒng)、大數(shù)據(jù)、云計(jì)算等相關(guān)領(lǐng)域的研發(fā)工作,實(shí)踐經(jīng)驗(yàn)豐富。
更多精彩回顧書訊 |11月書訊(下)| 這些好書必須“買買買”!書訊 |11月書訊(上)| 這些好書必須“買買買”!資訊 |DB-Engines 10月數(shù)據(jù)庫(kù)排名:“三大王”無人能敵,PostgreSQL緊隨其后上新 |?百度官方出品 | 全面解讀PaddlePaddle,零基礎(chǔ)快速入門深度學(xué)習(xí)書單 |?開學(xué)季——計(jì)算機(jī)專業(yè)學(xué)生必讀的10本暢銷經(jīng)典干貨 |?數(shù)據(jù)分析必讀干貨:簡(jiǎn)單而實(shí)用的3大分析方法收藏 |?(萬(wàn)字長(zhǎng)文)Spring的核心知識(shí)盡攬其中視頻 |?大佬出鏡推薦不可不讀系列——程序員陳彼得點(diǎn)擊閱讀全文購(gòu)買
總結(jié)
以上是生活随笔為你收集整理的linux串口中断_5年匠心之作,深度探索Linux虚拟化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis原理及拓展
- 下一篇: python中del语句