一. 官方資料
在官方文檔,找到一些關於虛擬機處理器配置的相關內容;在官方社區,沒有找到對應話題。兩句話很有啟發性,即:
(1)"您可以配置虛擬機的處理器設置,包括處理器數量、每個處理器的核心數,以及虛擬化引擎的首選執行模式"
(2)"只有至少具有邏輯處理器的主機才支持指定多個虛擬處理器"。
對啊,為什么這兩個參數一定要是指導我們物理主機如何去"分配"處理器資源給虛擬主機,而不能是指導如何去"虛擬"虛擬主機(如ubuntu等)本身的虛擬處理器參數呢?很顯然,官方沒有這樣的界定,於是我開始了我的求證之路。
二. 主流說法
說法一:虛擬機處理器設置頁面的“處理器數量”指的是“核心數”,“每個處理器的內核數量”是超線程數量。
這個說法的贊同人數挺多的,畢竟官方不會這么無聊搞出兩個一樣的概念,認證過程說的也蠻有道理的。但是,下面的例子有點駁斥這種說法。如,我的物理主機 4核8線程,配置 8 * 1正常運行,我的核心只有4核,而我配置8也可以,我哪里來那么多物理給它?感覺,這個說法站不住。
說法二:“處理器數量”跟物理主機的CPU個數一樣
這個我有幸遇到一個博主寫的論證博客,有些說法我也挺贊同的,主要是最后的觀點不謀而合。
博主的結論:支持說法2,且VMware占用的是最終的“超線程”。但是,他沒有提及這兩個參數的意義是什么。
三. 個人猜想
(1)“處理器數量” :指導如何虛擬化 -- 虛擬主機的虛擬處理器數量
(2)“每個處理器的核心數量” :指導如何虛擬化 -- 虛擬主機的每個虛擬處理器的核心數量
(3)“處理器內核總數” :分配處理器依據 -- 真實物理主機分配給虛擬主機的處理器線程總數(真實處理器資源)
注意表達前綴:“虛擬主機的” ,即這些是虛擬主機被虛擬化出來的處理器參數。意味這些處理器參數在虛擬機內部的處理器信息是可查詢的,那么就可以很容易去驗證啦。
配置成功關鍵:“處理器內核總數”決定着配置參數是否能夠通過(處理器內核總數 = 處理器數量 * 每個處理器的核心數量 ),即 只要“處理器內核總數”不超出我們真實物理主機處理器的線程總數,配置參數都可以通過。
1. 說明一下我的猜想:
(1)“處理器數量”和“每個處理器的核心數量”這兩個參數意義重點不在於指導物理主機怎么 “分配外部處理器資源” 給虛擬主機,而是在於指導如何 “配置虛擬主機內部的處理器參數” ,即如何去虛擬化虛擬主機的處理器參數,即CPU數量、物理核心。
(2) “處理器內核總數”則是真實物理主機分配給虛擬主機的真正處理器資源,分配的是VMware占用的是最終的“線程總數”,是真實物理主機分配給虛擬主機的處理器的分配依據。
2. 舉個例子說明猜想:
處理器數量 :2
每個處理器的核心數量: 4
處理器內核總數 :8 ( = 2 * 4)
2 和 4 不是在於指導物理主機(且稱為windows)如何分配外部處理器資源給虛擬主機,而是在於指導如何虛擬化虛擬主機(且稱為ubuntu)的內部處理器。配置成功之后,我們可以在虛擬主機(ubuntu)的 /proc/cpuinfo中看到,處理器數量是2,每顆處理器的物理核心是4,這個是虛擬主機的虛擬處理器參數,不是物理主機分配的外部處理器資源,真實分配的處理器資源是8,即分了8個線程,只要8沒有超出真實處理器的線程總數,配置就可以成功。
3. 個人猜想實驗例證:
---- 物理主機處理器資源:4核8線程
---- 配置沒有超出8線程的(配置成功) : 1 * 4 1 * 8 2 * 2 2 * 4 4 * 2 8 * 1
---- 配置已經超出8線程的(配置失敗) : 8 * 2 4 * 3 2 * 6 1 * 12
---- 為什么這樣配置原因:
(1)因為第一種說法說是處理器數量是“核心數”,而我的處理器是四核,如果我設置為 8 * 1 豈不是應該不被允許,(即配置失敗,因為我的只有4核) ??那么假如配置通過了,則可以說明第一種說法是錯誤的;
(2)可以看到配置超出8線程的則不被允許,而配置沒有超出8線程的則可以通過,則說明配置參數能否被通過,是看配置參數的處理器內核總數是否超出真實物理主機的線程數(比如我的是8線程)(關鍵詞:超出、超線程數)
(3)通過多個可以配置成功的例子,去查看虛擬機虛擬出來的處理器數量、CPU物理核數、CPU邏輯核數,可以發現我們的配置參數和虛擬機的處理器參數有很大的聯系(關鍵詞:虛擬)
1)查看我的處理器資源(CPU一顆、四核八線程)
2)貼上查詢 虛擬機Ubuntu 的 CPU數量、CPU物理核數、CPU邏輯核數的方法
3)測試
//查看不同physical id的數量,直接輸出CPU數量
cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l
// 查看不同core id的數量,直接輸出CPU物理核數(注意:輸出的是一顆CPU的物理核數)
cat /proc/cpuinfo | grep "core id" | sort -u | wc -l
// 查看不同 processor 的數量,直接輸出CPU邏輯核數總數(注意:輸出的是本服務器所有CPU的邏輯核的總數)
cat /proc/cpuinfo | grep "processor" | sort -u | wc -l
實驗輸出:
1. 沒有超出限制(配置成功)的例子:(處理器內核總數 <= 真實物理主機的線程總數,此處為8)
2. 已經超出限制(配置失敗)的例子:(處理器內核總數 > 真實物理主機的線程總數,此處為8)
實驗結論:
(1) 第一種說法 :“處理器數量”是“核心數”,顯然是錯誤的;
(2) 第二種說法 :VMware占用的是最終的“超線程”,在這里也得到了輔助證明;
(3) 自己的說法 :
(1)“處理器數量” :指導如何虛擬化 -- 虛擬主機的虛擬處理器數量
(2)“每個處理器的核心數量” :指導如何虛擬化 -- 虛擬主機的每個虛擬處理器的核心數量
(3)“處理器內核總數” :分配處理器依據 -- 真實物理主機分配給虛擬主機的處理器線程總數(真實處理器資源)
配置關鍵:“處理器內核總數 ”是否超出真實物理主機的線程總數,即 “處理器內核總數”不能超出我們真實處理器的線程總數
值得注意:在虛擬主機(ubuntu)中,“邏輯核心總數 ”和 “物理核心總數” 相同 ,猜測他們是一個物理核心對應一個邏輯核心