這次測試過程中,無論是「主機」或「虛擬機」都是使用 Fedora。其它 Linux 分支應該也適用,至於 Windows 系統,就不得而知了。當然,過程也順便整理、記錄下來,以備將來不時之需。記錄如下:
一、啟用「虛擬機」的 CPU Hot-Plug 功能
要讓「虛擬機」內的系統具有『CPU Hot-Plug (熱插拔)』的功能,在「虛擬機」關閉時要先啟動『CPU 熱插拔』功能。[SiB@Core-i7 ~]# VBoxManage modifyvm "VM-test" --cpuhotplug on上例中,第一個命令是啟動「虛擬機」的『CPU 熱插拔』功能,第二個命令是設定「虛擬機」可使用的最多 CPU 數量。
[SiB@Core-i7 ~]# VBoxManage modifyvm "VM-test" --cpus 4
注意:最多可使用 CPU 數,不要超過實際 CPU 數。請參考前文〝VirtualBox 「虛擬機」的最佳化設定組態〞之內容。
二、調整「虛擬機」所使用的 CPU
關於『CPU 數量』的意義有兩個的,兩者未必要相同數量,
- 在『主機電腦』設定,供「虛擬機」使用的 CPU 數量
- 在「虛擬機」內部,設定『客戶作業系統』可運用的 CPU 數量
在「虛擬機」啟動前設定
在「虛擬機」尚未啟動時,就可以下命令更改「虛擬機」的 CPU 數量,[SiB@Core-i7 ~]# VBoxManage modifyvm "VM-test" --plugcpu 2上例中,第一個命令是加入指定(編號 2)的 CPU,第二個命令是移除指定(編號 3)的 CPU。
[SiB@Core-i7 ~]# VBoxManage modifyvm "VM-test" --unplugcpu 3
在「虛擬機」啟動後,由內部的『客戶作業系統』查詢 CPU 資訊。以 Fedora 為例,事先已將 CPU 數量移除至只剩一個,可以看到類似的結果如下:
[root@VM-test ~]$ lscpu上例中,可以看到「虛擬機」只有一個 CPU,而使用中(On-line)的 CPU 編號為 0。
. . . . . CPU(s): 1 On-line CPU(s) list: 0 每核心執行緒數: 1 每通訊端核心數: 1 Socket(s): 1 . . . . .
註一:CPU 的指定編號,由 0 開始遞增。例:4 個 CPU,則編號為 0 ~ 3,而非 1 ~ 4。
註二:編號 0 的 CPU 不可移除。
在「虛擬機」執行期間修改
通常在「虛擬機」執行時,才能查詢 CPU 使用數量的實際情形。若在「虛擬機」關機時,已經啟動過『CPU 熱插拔』的功能,就可以立即加入 CPU,增加「虛擬機」的執行效能。
[SiB@Core-i7 ~]# VBoxManage controlvm "VM-test" plugcpu 2上例中,第一個命令是加入指定(編號 2)的 CPU,第二個命令是移除指定(編號 3)的 CPU。
[SiB@Core-i7 ~]# VBoxManage controlvm "VM-test" unplugcpu 3
註:超過 CPU 設定數量的操作,會有錯誤訊息。當看到錯誤訊息請檢查所下的命令。
在「虛擬機」啟動後,由內部的『客戶作業系統』查詢 CPU 資訊。以 Fedora 為例:事先已先將 CPU 數量加到三個,再移除至只剩兩個,可以看到類似的結果如下:或文。
[root@VM-test ~]$ lscpu上例中,可以看到「虛擬機」顯示有兩個 CPU,使用中(On-line)的 CPU 編號為 0,而離線中(Off-line)的 CPU 編號為 1。
. . . . . CPU(s): 2 On-line CPU(s) list: 0 Off-line CPU(s) list: 1 每核心執行緒數: 1 每通訊端核心數: 1 Socket(s): 1 . . . . .
新加入的 CPU 仍處於離線狀態,尚不能由『客戶作業系統』使用。要再進行下一個步驟,將新加入且處於離線狀態的 CPU 交由『客戶作業系統』統籌運用。
三、在「虛擬機」中調整使用的 CPU
在「虛擬機」中調整所使用的 CPU 數量,必須為 root 權限才行,命令如下:[root@VM-test ~]# echo 1 > /sys/devices/system/cpu/cpu3/online上述的第一個命令為將 CPU 3 設為『上線』狀態,而第二個命令則是將 CPU 2 設為『離線』狀態。
[root@VM-test ~]# echo 0 > /sys/devices/system/cpu/cpu2/online
用個例子詳細說明,假設在操作前有三個 CPU 在『上線』狀態,則將 CPU 1 及 CPU 2 依序『離線』,再將 CPU 1 『上線』的過程如下:
[root@VM-test ~]# echo 0 > /sys/devices/system/cpu/cpu1/online由上面的例子中,紅色的部份可以看出這些命令的操作改變過程。
[root@VM-test ~]$ lscpu
[root@VM-test ~]# echo 0 > /sys/devices/system/cpu/cpu2/online
. . . . . CPU(s): 3 On-line CPU(s) list: 0,2 Off-line CPU(s) list: 1 每核心執行緒數: 1 每通訊端核心數: 1 Socket(s): 1 . . . . .
[root@VM-test ~]$ lscpu
[root@VM-test ~]# echo 1 > /sys/devices/system/cpu/cpu1/online
. . . . . CPU(s): 3 On-line CPU(s) list: 0 Off-line CPU(s) list: 1,2 每核心執行緒數: 1 每通訊端核心數: 1 Socket(s): 1 . . . . .
[root@VM-test ~]$ lscpu
. . . . . CPU(s): 3 On-line CPU(s) list: 0,1 Off-line CPU(s) list: 2 每核心執行緒數: 1 每通訊端核心數: 1 Socket(s): 1 . . . . .
經驗分享:
- 在不知幾個 CPU 時可用這個方法,不用重開機就可以快速測試『所需的 CPU 數量』。
- 確認 CPU 數量後,最好將這個功能關閉。筆者使用時,保有動態調整功能會有『效能』上的損失。
已測試版本:
- 主 機:Fedora 20, 21 + VirtualBox 4.3.20
- 虛擬機:Fedora 20, 21
沒有留言:
張貼留言
感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)