openstack 虛擬機設備管理器cpu核數與任務管理器不一致


一. 官方資料

       在官方文檔,找到一些關於虛擬機處理器配置的相關內容;在官方社區,沒有找到對應話題。兩句話很有啟發性,即:

(1)"您可以配置虛擬機的處理器設置,包括處理器數量、每個處理器的核心數,以及虛擬化引擎的首選執行模式"  

(2)"只有至少具有邏輯處理器的主機才支持指定多個虛擬處理器"。

      對啊,為什么這兩個參數一定要是指導我們物理主機如何去"分配"處理器資源給虛擬主機,而不能是指導如何去"虛擬"虛擬主機(如ubuntu等)本身的虛擬處理器參數呢?很顯然,官方沒有這樣的界定,於是我開始了我的求證之路。

 

 

二. 主流說法

說法一:虛擬機處理器設置頁面的“處理器數量”指的是“核心數”,“每個處理器的內核數量”是超線程數量。

       這個說法的贊同人數挺多的,畢竟官方不會這么無聊搞出兩個一樣的概念,認證過程說的也蠻有道理的。但是,下面的例子有點駁斥這種說法。如,我的物理主機 4核8線程,配置 8 * 1正常運行,我的核心只有4核,而我配置8也可以,我哪里來那么多物理給它?感覺,這個說法站不住。 

 

說法二:“處理器數量”跟物理主機的CPU個數一樣

       這個我有幸遇到一個博主寫的論證博客,有些說法我也挺贊同的,主要是最后的觀點不謀而合。

文章鏈接:https://blog.csdn.net/tiancao222/article/details/104412090?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-OPENSEARCH-1

      博主的結論:支持說法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)中,“邏輯核心總數 ”和 “物理核心總數” 相同 ,猜測他們是一個物理核心對應一個邏輯核心


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM