亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 6287 | 回復(fù): 7
打印 上一主題 下一主題

[KVM] 讓KVM飛——初識 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2013-07-05 19:55 |只看該作者 |倒序瀏覽
本帖最后由 風(fēng)影刃 于 2013-07-05 19:56 編輯

轉(zhuǎn)自:讓KVM飛——初識


前言: 寫這些帖子的初衷是接觸虛擬化一年多的時間,做一個簡單的總結(jié)。因為本人不是程序員出身,并沒有能力對KVM代碼級做原理分析(不會看源碼,只能看別人的分析,o(╯□╰)o),主要是從運維的角度如何更快的使用KVM,感受虛擬化帶來的便利。
大體分為4個部分:
  • 初識
  • 初識
  • 初識
  • 初識
好吧,我的節(jié)操又掉一地了。。。剩下的3個部分,將會在最近2-3周內(nèi)分享給大家。
初識

什么是虛擬化
  • 虛擬化是資源的邏輯表示,不會受物理限制的約束。
  • 運行環(huán)境不是在真實的服務(wù)器上,而是虛擬的環(huán)境中。
  • 虛擬化是以某種用戶和應(yīng)用程序都可以容易從中獲益的方式來表示計算機資源的過程,而不是根據(jù)這些資源的實現(xiàn)、地理位置或物理包裝的專有方式來表示的。換句話說,它為數(shù)據(jù)、計算能力、存儲資源以及其他資源提供了一個邏輯視圖,而不是物理視圖。
(概念有點類似于云計算,這也就表明了為什么虛擬化是云計算發(fā)展的源動力,以上概念和理解虛擬化的使用沒有半毛關(guān)系,只是為了當(dāng)別人問你是做什么的時候,可以不用說“呃,我是裝虛擬機的”)
虛擬化帶來的好處:大幅度降低了IT支出成本、減少能源浪費,而且還能極大的增強系統(tǒng)整體安全性和可靠性。(這也是為什么虛擬化能夠飛速發(fā)展的重要原因。)
虛擬化必須滿足的三個條件:同質(zhì)、高效、資源受控
1.        同質(zhì)(Equivalence)
即VM的運行環(huán)境和物理機的環(huán)境在本質(zhì)上市相同的,表現(xiàn)上可以有一些差異。如CPU的ISA必須一致,CPU core的個數(shù)可以不同。
2.        高效(Efficiency)
即VM的性能必須接近物理機。因此,常見的模擬器(boches,simics……)就不能成為VM。為達此目的,軟件在VM上運行時,大多數(shù)指令要直接運行在硬件上執(zhí)行,只有少量指令需要VMM的模擬或處理。
3.        資源受控(Resource control)
即VMM對物理機的所有資源有絕對的控制力。虛擬機不允許直接執(zhí)行敏感指令。(什么是敏感指令?)首先說下什么是特權(quán)指令和敏感指令。
        多數(shù)計算機體系結(jié)構(gòu)都有2個或以上的特權(quán)級,用來分隔系統(tǒng)軟件(操作系統(tǒng))和應(yīng)用軟件。而我們x86的架構(gòu)中提供了4個運行級別——Linux內(nèi)核運行在ring0,應(yīng)用程序運行在ring3 。
系統(tǒng)中有一些操作和管理關(guān)鍵系統(tǒng)資源的指令會被定義為特權(quán)指令。
特權(quán)指令只有在最高特權(quán)級別上才能夠正確執(zhí)行。
如果再非最高特權(quán)級上運行,特權(quán)指令會引發(fā)異常,處理器會陷入到最高特權(quán)級別。
在虛擬化后,操作特權(quán)資源的指令叫做敏感指令。
其實這個就像在家里,錢是重要的資源,花錢這種敏感指令是需要經(jīng)過老婆的特權(quán)審批的,老婆給才能花,老婆不給就花不了。(連個對象沒有的談到這里不禁淚兩行。
有了上邊三個條件和兩種特權(quán)級別的認識,我們自己假想的設(shè)計一個虛擬機執(zhí)行代碼的結(jié)構(gòu)流程:
        虛擬機內(nèi)部執(zhí)行代碼的時候,如果是非特權(quán)訪問的指令,則直接通過進程在用戶模式執(zhí)行,如果是特權(quán)的指令,陷入到內(nèi)核模式模擬執(zhí)行。這也是CPU虛擬化一個基本方式“陷入模式”。如此,既可以保證同質(zhì)(本質(zhì)上還是有物理CPU執(zhí)行)、高效(技術(shù)不同,效率不同)、和資源受控(特權(quán)訪問都需要VMM模擬執(zhí)行)。
但理想在現(xiàn)實面前總是那么不堪一擊,因為x86在虛擬化天然的短板——有少部分指令不能在以前的虛擬化環(huán)節(jié)進行正常VMM陷入,導(dǎo)致指令執(zhí)行失敗,使得x86架構(gòu)的服務(wù)器很難正常的完成虛擬化。這就是所謂的虛擬化漏洞。(想繞過老婆的審批就花錢,豈不是亂了套了)


全虛擬化實現(xiàn)的幾種典型的方式(雖然XenServer最近開源了,但是這只能是我加快對KVM研究的腳步,動搖不了我對KVM的忠心,
        因為我們主要是介紹KVM虛擬化解決方案,其他的幾種只是簡單說下(復(fù)雜的內(nèi)容我也不是很懂)
解釋執(zhí)行
                 取一條執(zhí)行,模擬出這條指令執(zhí)行的效果,再去一條指令,周而復(fù)始。
二進制翻譯(BT)(VMWare不愧是老大,即使出了第一代VT以后,性能還是略微領(lǐng)先。)
(1)        主要思想是在執(zhí)行時將VM上執(zhí)行的Guest OS的命令
(2)        翻譯成X86 ISA的一個子集,其中的敏感指令被替換成陷入指令
(3)        翻譯過程與指令執(zhí)行交叉進行。不含敏感指令的用戶態(tài)程序可以不經(jīng)翻譯直接執(zhí)行。
(4)        該技術(shù)為VMWare workstation, VMWare ESX Server早起版本,Virtual PC以及QEMU所采用。
掃描與修補(Scan)SUN的Virtualbox即采用的該技術(shù)
(1)        VMM會在VM運行每塊指令之前對其掃描,查找敏感指令
(2)        補丁指令塊會在VMM中動態(tài)生成,通常每一個需要修補的指令會對應(yīng)一塊補丁指令
(3)        敏感指令被替換成一個外跳轉(zhuǎn),從VM跳轉(zhuǎn)到VMM,在VMM中執(zhí)行動態(tài)生成的補丁指令塊。
(4)        當(dāng)補丁指令塊執(zhí)行完后,執(zhí)行流在跳轉(zhuǎn)回VM的下一條指令處繼續(xù)執(zhí)行
下邊就是今天的主角KVM。
VT-x的實現(xiàn)原理:感興趣的朋友可以直接看下:Intel VT-x的技術(shù)手冊
VMCS是Intel VT-x中的一個很重要的數(shù)據(jù)結(jié)構(gòu),占用一個page大。4k),由VMM分配,但是硬件是需要讀寫的,與頁表類似。在VMCS有很多域,但每個域在VMCS中的具體位置是不知道的,程序員也不需要關(guān)心,只需要使用相應(yīng)的VMWRITE和VMREAD指令去訪問。簡單介紹下VMCS中一些重要的域。


其中比較重要的是vm-exit信息域


VMX操作模式


在OS沒有虛擬化時,VMX操作模式默認是關(guān)閉的
VMXON:打開VMX操作模式
VMXOFF:關(guān)閉VMX操作模式
VM-Entry:CPU由根模式切換到非根模式,從虛擬機的角度將,CPU從VMM切換到客戶機執(zhí)行。一般有VMM主動發(fā)起。
VM-entry提供了兩條指令:VMLANUCH和VMRESUME。
VMLANUCH:用于剛執(zhí)行過VMCLEAR的VMCS的第一次VM-Entry
VMRESUME: 用于執(zhí)行過VMLANUCH的VMCS的后續(xù)VM-Entry
下圖是一個VM-Exit與VM-Entry切換的圖,畫了好久,還是想不到一個比較直觀的表達方式。(盡量之后補一張靠譜點的)


主要流程是,虛擬機執(zhí)行敏感指令,保存當(dāng)前的虛擬機狀態(tài)域,VM-Exit到Host模式,加載VMCS中的宿主機狀態(tài)域,然后根據(jù)VM-Exit信息域去處理中斷的內(nèi)容。
VM-Exit信息域中有中斷的條件和中斷的原因……會讀取中斷原因,如果是IO,則交給User模式的Qemu去處理,將結(jié)果返回給Host;如果是缺頁異常,則會去判斷是具體原因(之后內(nèi)存虛擬化會多說一些);如果是執(zhí)行指令,則由VMM執(zhí)行,將結(jié)果返回,然后再有VMM執(zhí)行VM-Entry,加載虛擬機狀態(tài)域,進入到Guest模式,繼續(xù)重復(fù)之前的流程。
KVM架構(gòu)(COPY IBM的文檔)


在KVM上你可能看到一個叫做QEMU的東西,即使是你在使用KVM虛擬機的時候也很難逃脫qemu的魔掌,我在剛開始學(xué)習(xí)KVM的時候,一直糾結(jié),KVM到底是什么( Kernel-based Virtual Machine),和qemu有啥關(guān)系,為什么有KVM的地方總會有qemu的出現(xiàn),難道真是基情燃燒的歲月?

怎么除了qemu,還有一個kqemu的小伙伴?
kqemu是通過kqemu模塊實現(xiàn)內(nèi)核態(tài)的加速,在用戶態(tài)的qemu通過訪問/dev/kqemu設(shè)備文件接口調(diào)用改進加速。不過,此類模式主要針對Guest與Host運行屬于統(tǒng)一架構(gòu)的虛擬化。
Qemu看起來就比較寒酸了,只有一個用戶空間的進程,通過TCG(Tiny Code Generator)動態(tài)翻譯。很明顯的缺點:慢。
KVM說起來并不能算是一個完整的虛擬化解決方案,只是Linux標準內(nèi)核加載了一個據(jù)說有幾萬行代碼的模塊。也就是說KVM僅可以在VT技術(shù)的基礎(chǔ)上,提供一個虛擬的處理器?然后向內(nèi)核申請點內(nèi)存的工作?說起來覺得KVM也挺寒酸的。。。不過讓KVM遇上QEMU合體成qemu-kvm后,就開始了幸福的生活。。。
下面我們八卦一下qemu和kvm兩個小伙伴的幸福生活。
創(chuàng)建虛擬機流程


1)        標準的Linux內(nèi)核中加入KVM的模塊kvm.ko變身成為一個VMM(VMM Virtual MachineMonitor)
2)        在原有的用戶模式(工作在ring3)和內(nèi)核模式(工作在ring0)兩種模式的基礎(chǔ)上增加了新的客戶模式?蛻裟J酱嬖诘奶貦(quán)級別與ring0-3正交。(也就是說客戶模式也存在4個特權(quán)級別)
3)        用戶創(chuàng)建虛擬機,通過調(diào)用用戶模式的qemu程序,qemu與kvm提供的libkvm庫為接口,傳遞創(chuàng)建指令。
4)        打開/dev/kvm文件并獲得文件描述符fd后,通過ioctl指令寫入KVM_CREATE_KVM,即可創(chuàng)建一個虛擬機,并返回一個fd_vm的虛擬機文件描述符。
5)        獲得fd_vm后,通過ioctl調(diào)用KVM_CREATE_VCPU指令,可以對fd_vm所對應(yīng)的虛擬機創(chuàng)建vCPU,并對vCPU做初始化操作。
6)        然后通過KVM_RUN指令對fd_vcpus操作,啟動運行虛擬機。
注:        其實在整個過程中所謂的初始化操作基本上就是一個工作——定義初始化結(jié)構(gòu)體。整個虛擬機在Linux上只是User Mode的一個qemu的進程,而內(nèi)部則是一堆結(jié)構(gòu)體。
下邊是Copy的一段話,覺得挺靠譜的……
一般來說:我們會就3個方面來評斷hypervisor的好壞
1:hypervisor 的架構(gòu)實現(xiàn)如何?"我的hypervisor比你薄...."
2:  硬件輔助(Intel-VT, Amd-V)如何?“我的CPU虛擬化是借助的硬件,肯定比你用軟件來的快!
3 : 半虛擬化的噱頭。"我的hypervisor可以支持修改過的guest,因此肯定比你快。"

論壇徽章:
22
CU大;照
日期:2013-09-18 15:22:06白羊座
日期:2014-04-14 22:56:32午馬
日期:2014-05-16 17:18:08巳蛇
日期:2014-05-30 20:53:19寅虎
日期:2014-06-03 10:53:34未羊
日期:2014-08-12 22:15:31神斗士
日期:2015-11-20 17:26:2515-16賽季CBA聯(lián)賽之浙江
日期:2016-03-15 18:27:4215-16賽季CBA聯(lián)賽之同曦
日期:2016-03-22 09:21:0115-16賽季CBA聯(lián)賽之北控
日期:2017-03-26 21:47:12技術(shù)圖書徽章
日期:2014-04-03 16:47:26摩羯座
日期:2014-03-25 23:51:36
2 [報告]
發(fā)表于 2013-07-05 20:58 |只看該作者
等待樓主的續(xù)集。寫得很好,總結(jié)了很多。

論壇徽章:
16
IT運維版塊每日發(fā)帖之星
日期:2015-10-02 06:20:00IT運維版塊每月發(fā)帖之星
日期:2015-09-11 19:30:52IT運維版塊每周發(fā)帖之星
日期:2015-09-11 19:20:31IT運維版塊每日發(fā)帖之星
日期:2015-08-26 06:20:00每日論壇發(fā)貼之星
日期:2015-08-20 06:20:00IT運維版塊每日發(fā)帖之星
日期:2015-08-20 06:20:002015年辭舊歲徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09雙子座
日期:2013-12-17 16:44:37辰龍
日期:2013-11-22 15:20:59獅子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
3 [報告]
發(fā)表于 2013-07-05 21:21 |只看該作者
挺好。支持。!

論壇徽章:
0
4 [報告]
發(fā)表于 2013-07-08 16:49 |只看該作者
寫的真好~~{:3_203:}

論壇徽章:
0
5 [報告]
發(fā)表于 2013-07-08 22:26 |只看該作者
感受虛擬化帶來的便利。

論壇徽章:
0
6 [報告]
發(fā)表于 2013-08-22 10:32 |只看該作者
期待后續(xù)內(nèi)容回復(fù) 1# 風(fēng)影刃


   

論壇徽章:
0
7 [報告]
發(fā)表于 2013-08-22 14:01 |只看該作者
不錯不錯,繼續(xù)~~

論壇徽章:
0
8 [報告]
發(fā)表于 2013-09-11 20:20 |只看該作者
樓主加把勁,期待更新后續(xù)內(nèi)容啊
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP