又是藏在心中很久的疑問,這幾天被要求提交伺服器規格,被迫花了點時間把它釐清楚。

我們都知道,微軟的Server系列產品,不同的版本可支援處理器(Processor)數與記憶體容量上限不同,以Windows 2003為例,共有Web Edition、Standard Edition、Enterprise Edition、Datacenter Edition等四個版本,其中Web版只支援到兩顆處理器、Standard版4顆、Enterprise版8顆、Datacenter版則可以到32顆。(詳細資料請看這裡)

不過,問題來了! 近代的CPU開始走多核風(Multicore),市面上的CPU,Dual Core雙核已經是基本要求,連Quad Core四核版本的CPU價位也日益平民化。當四核CPU愈來愈普及,雙CPU插座的主機板插上兩顆,Windows Task Manager裡頓時會冒出8顆CPU的使用率上下跳動,爽快歸爽快,另一個問題來了,依據前面所說的,Windows 2003 Standard Edition的CPU上限是4顆CPU,可以安裝在兩顆四核CPU的主機上嗎? 會不會Task Manager裡只能看到4顆CPU? 不然乾脆一點買Enterprise Editiony就不用擔心這麼多了? 別開玩笑了,依據官方報價,Standard與Enterprise版本的價差達四倍呢($999 vs $3,999)!!

因此我們要釐清的問題是,版本比較文件裡所說的4 way SMP support,指的是最多四顆實體的CPU呢? 或是超過一顆四核CPU就破表? (這個問題價值十萬元呢!)

有份官方文件可以精準地回答我們的疑問:

For Microsoft software with processor limits, each processor counts as a single processor regardless of the number of cores and/or threads that the processor contains. For example, Windows Server 2003 R2 Standard Edition can be used on a four-processor system, whether the processors in the system are single-core, hyperthreaded, or multicore.

換句話說,MS的規格文件裡,所提到的n-way SMP,是指"實體上"的n顆CPU,即便它可以開啟Hyper-Thread、或內建雙核或四核,不管Task Manager看到多少個CPU Usage,都只算一顆。所以如果有一台四個CPU Socket的主機器插上四顆四核CPU,在Windows Standard Edition裡看到16條CPU Usage Bar跳動,也是可能的。

題外話,並不是每家軟體廠商都採行像微軟一樣以實體處理器數量(或說Per CPU Socket)為認定基準,有些廠商會訂定每顆核心的換算比例(約當處理器數嗎? XD),例如: 一個核心相當於0.75個處理器,IBM甚至發明了Value Process Unit為CPU的計算能力計價。有興趣的可以看看這篇文章


Comments

# by chainchung

感謝, 解了我的疑惑, 受教了.

# by SOLONG

若是寫程式的話,寫出來的程式想要完全用到多核心, 我想一定要改寫程式碼去針對多核心做處理 假設寫出來的程式可以完全用到cpu多核心的資源,那這個程式拿到多cpu的環境去執行是不是也一樣可以完全用到多cpu的資源 還是說二者是不一樣(雖然工作管理員看到的CPU數量是一樣)

# by Jeffrey

原則上把程式寫成多執行緒,移到多CPU或多核環境下就可以搾出多CPU或多核的效能。 對程式開發而言,多核或是多CPU並沒有不同,都是可以讓不同的Thread平行運算改善效能。只是多核因為某些機構共用,效能比不上真的多CPU(如我文中有提到一核=0.75CPU),程式只要能適當的善用(過與不及都不好)Multithreading的優勢,其餘的倒不必煩心。

# by midipig

多核授權似乎簡單一點 虛擬化的授權花招相對就多了一些 微軟還做了一個計算機幫你算 http://www.microsoft.com/windowsserver2003/howtobuy/licensing/calculator.mspx

# by Rex Tang

前幾天為了要跑 Hyper-V , 自己組了一台 Intel Quad Core CPU + 8GB RAM 的 Server... Hyper-V 跑起來很爽快, 價格上野還可以接受... 關於多核運用的問題, multi-threading 的程式在實際上或許也會因為 threading 的前後關係問題, 沒有辦法真正的放到各個 core 去處理. thread 本身目前應該也無法指定自己要在哪個 core 被處理... 我目前正在進行的 project 是有關 Windows HPC Server 2008 的驗證, 透過 High Performance Computing (HPC) 的程式 (使用業界規格 OpenMP 或 MPI) , 要執行的 Job 可以指定要用哪個 core 來執行. 但是因為已經進入平行處理的世界, 程式的寫法以及要注意的東西也跟以前學習過的程式開發技巧不同了. 還挺有趣的喔... ^^

Post a comment