2018年4月27日 星期五

Linux /dev/kvm

原文 http://blog.51cto.com/1054383/1664143

/dev/kvm到底是什麼?

1./dev/kvm設備是kvm(kernel-based virtual machine)虛擬機器出來的一個設備檔

2.說到kvm,不得不提qemu,qemu是一個類比軟體,運行於linux的用戶空間。qemu可以類比我們能見到的所有作業系統,如在x86平臺上模擬andrio,ios等,當然也可以模擬windows,linux(gnu),BSD。由於是通過類比的方法來實現系統虛擬化,它產生的所有CPU指令都翻譯轉換一次,因此其性能非常低。

3.那麼問題來了,kvm提供了什麼呢?其實,kvm只提供了三個模組,分別是kvm.ko,kvm_intel.ko,kvm_amd.ko,後兩個模組是根據物理主機的CPU所屬廠家自動匹配的。

4.由上可知,qemu是一個使用者空間的程式,kvm是一個運行於內核空間的程式。為了提供一個整體的解決方案(包括用戶空間工具集[由qemu提供],管理各種設備(由kvm內核模組提供)),kvm開發團隊借用了qemu代碼,並作了一些修改,形成了一套工具,也就是qemu-kvm(不是linux中的命令)

5.如何讓qemu與kvm內核模組結合起來,這時,/dev/kvm就起作用了。/dev/kvm是一個字元設備,當qemu打開這個設備後,通過ioctl這個系統調用就可以獲得kvm模組提供的三個抽象物件:

    kvm:代表kvm模組本身,用來管理kvm版本資訊,創建一個vm(通過)

    vm:代表一個虛擬機器。通過vm的io_ctl介面,可以為虛擬機器創建vcpu,設置記憶體區間,創建中斷控制晶片,分配中斷等等

    vcpu:代表一個vcpu。通過vcpu的io_ctl介面,可以啟動或者暫停vcpu,設置vcpu的寄存器,為vcpu注入中斷等等

Qemu的使用方式:

    1.打開/dev/kvm設備

    2.通過KVM_CREATE_VM創建一個虛擬機器物件

    3.通過KVM_CREATE_VCPU為虛擬機器創建vcpu對象

    4.通過KVM_RUN設置vcpu運行起來

6.So,/dev/kvm只是kvm內核模組提供給使用者空間的一個介面,這個介面被qemu-kvm調用,通過ioctl系統調用就可以給使用者提供一個工具用以創建,刪除,管理虛擬機器等

沒有留言: