網路也是虛擬機器I/O很重要的一部分,kvmtool 自然有提供若干種不同的使用方式,此外因為支援 virtio-net 的緣故,kvmtool 也實作了 vhost-net 的支援(雖然之前他有些問題)。我們先來看一下 virtio-net 怎麼啟用吧

$ lkvm run [-net NET_PARAMS] [其他參數]

 

NET_PARAMS 會長成這樣 PA=VA,PB=VB,PC=VC

 

第一個參數是 mode,用來指定 virtio-net 的模式,目前只支援 user 跟 tap,如果妳只是要單純要讓 VM 可以有網路的功能,那就使用 user 即可。

$ lkvm run -kernel /path/to/bzImage -net mode=user

 

在 user 模式的網路下,我們可以透過參數指定 host_ip 與 guest_ip,記得讓他們處在同一個網段。

$ lkvm run -kernel /path/to/bzImage -net mode=tap,guest_ip=192.168.99.2,host_ip=192.168.99.1

 

如果是有進階的使用,像是想要效能好一點需要啟動 vhost,兩台 VM 之間要處在同個區段互連、或是同個區段的實體機器要跟 VM 互動...等進階功能,那我會建議使用者改用 tap。

$ lkvm run -kernel /path/to/bzImage -net mode=tap

 

因為 kvmtool 會建立 tap 裝置,可能會需要 root 的權限,如果有回報「Warning: Config tap device error. Are you root?」,請加上 sudo 啟動 lkvm。這樣的設定上,在 host 的 tap 裝置 IP 預設為 192.168.33.1,guest 會嘗試使用 dhcp 取得 IP,然而因為我們沒有準備指定 guest IP,也沒有準備 dhcp 伺服器,這會讓 guest 等上好幾分鐘。我們可以等 guest 的 dhcp request timed out 之後,再進行手動設定。例如將 guest 設為 192.168.33.2,如此一來,host 與 guest 便可以互相 ping 到。

請注意一點,在 tap 模式下,host_ip 將會被作為 tap 裝置的位址,然而 guest_ip 將不會被使用。

與 qemu 的 /etc/qemu-ifup 類似,tap 模式網路也提供了 script 的參數,讓 kvmtool 初始化網路時,可以連帶著執行 script 檔進行其他設定。例如將 tap 裝置加入某個 bridge 裝置、iptables 等操作。此 script 檔的第一個參數將會被 kvmtool 代入 tap 裝置的名稱,例如 tap0,如果是使用 shell 的話,使用 $1 便可以知道 tap 裝置的名稱。

$ lkvm run -kernel /path/to/bzImage -net mode=tap,script=/path/to/net.sh

 

tap 模式的網路還可以開啟進階的加速功能:vhost-net,vhost-net 的運作方式中,將 backend driver 給移到 kernel space,如此一來可以降低 kernel/user 的切換次數,減少緩衝區的複製次數,進而提昇效能。vhost-net 之前因為初始化部份挪動的緣故造成無法啟動的問題,已經修正並合併回官方的程式碼,如果啟用 vhost 有錯誤的朋友,可以檢查看看是否已經更新到最新版。

$ lkvm run -kernel /path/to/bzImage -net mode=tap,vhost=1


無論何種模式下,皆可以額外指定 VM 的 mac,以避免同網段的 VM 衝突,請用 guest_mac。

$ lkvm run -kernel /path/to/bzImage -net mode=tap,guest_mac=00:11:22:33:44:55


 

 

arrow
arrow

    koukaipan 發表在 痞客邦 留言(0) 人氣()