QEMU 的 CPU 配置


轉載:

http://mathslinux.org/?p=277

http://blog.chinaunix.net/uid-26000137-id-3957724.html

 

CPU 基本知識

以下是 CPU 中比較容易混淆的概念:

socket

可以理解為主板上的一個插座, 用來連接物理 CPU 芯片到主板上, 簡單講, 有多少個 socket 就有多少個物理 CPU.

core

core 的概念涉及到 多核心技術 是將多個一樣的 CPU 放置於一個封裝內(或直接將兩個 CPU 做成一個芯片), 每個這樣的 CPU 叫做一個 core, 每個 core 是一個的獨立的 執行單元.

thread

thread 涉及到 超線程技術 , 簡單的講, 就是把兩個邏輯內核模擬成兩個物理芯片, 讓單個處理器都能使用線程級並行計算.

邏輯 CPU 數量

綜上, CPU 的數量不能簡單的通過物理 CPU 的數量(或者 socket 的數量) 來判斷, 如果用了多核技術, 則需要計算全部 core 的數量, 如果用了超線程, 則需要加上 所有 CPU 線程. 所以每一個 CPU(包括 core 或者 thread) 都叫一個邏輯 CPU.

Linux 下的 CPU 計算

在 Linux 下, kernel 拋出了一個統計了 CPU 一般信息的文件 /proc/cpuinfo, 通過這個文件, 可以知道本機的 CPU 信息, 包括廠商, CPU 型號, CPU 緩存, 核心, 超線程等等信息.

下面以一台 intel 酷睿雙核為例說明:

gentoo-company tmp # cat /proc/cpuinfo processor : 0 physical id : 0 siblings : 2 core id : 0 cpu cores : 2   processor : 1 physical id : 0 siblings : 2 core id : 1 cpu cores : 2

我省略的不必要的輸出, 對以上信息做一個解釋

processor
這個表示邏輯 CPU 的 ID
physical id
物理 CPU(socket) 的 ID, 具有相同 physical id 的邏輯 CPU 在同一個 CPU 封裝內.
siblings
同一個 CPU 封裝(socket)里的邏輯 CPU 數量, 這個數字表示在該物理 CPU 里面有多少個邏輯 CPU
core id
核心 ID, 具有相同 core id 的邏輯 CPU 在同一個 core 里, 即是使用 了超線程的邏輯 CPU
cpu cores
CPU 核心數, 在該物理 CPU 內封裝的 core 數目.

通過上面的說明, 該機器有一個物理 CPU(只有一個 physical id), 用了雙核技術(cpu cores 為2), 沒有使用超線程技術(沒有相同的 core id)

 

QEMU 的 CPU 配置

根據前面描述 CPU 的基本知識, 可以知道 CPU 有物理 CPU, 多核 CPU, 超線程 CPU 之分.

事實上, QEMU 支持所有這些配置, 下面一一舉例來說明如何模擬這些 CPU.

基本的 CPU 模擬

下面的指令模擬了一個具有 1 個物理 CPU, 兩個邏輯 CPU 的系統

$ qemu -enable-kvm -m 1024 ArchLinux.img -smp 2,sockets=1

在 guest 上看看 cpuinfo 的信息:

$ cat /proc/cpuinfo processor : 0 physical id : 0 siblings : 2 core id : 0 cpu cores : 2   processor : 1 physical id : 0 siblings : 2 core id : 1 cpu cores : 2

可以看到兩個邏輯 CPU 是雙核的, 沒有使用超線程技術.



指定核心數

模擬一個具有 1 個物理 CPU(雙核), 四個邏輯 CPU 的系統. 此時為了滿足雙核 四線程的概念, 得啟用超線程技術, 如下

$ qemu -enable-kvm -m 1024 ArchLinux.img -smp 4,sockets=1,cores=2
$ cat /proc/cpuinfo processor : 0 physical id : 0 siblings : 4 core id : 0 cpu cores : 2   processor : 1 physical id : 0 siblings : 4 core id : 0 cpu cores : 2   processor : 2 physical id : 0 siblings : 4 core id : 1 cpu cores : 2   processor : 3 physical id : 0 siblings : 4 core id : 1 cpu cores : 2


指定 thread 數

模擬一個具有 2 個物理 CPU, 四個邏輯 CPU 的系統, 啟用超線程技術, 每個核心兩個 線程. 不難算出, 此時每個 CPU 都是單核的(4 = 2*2*1).

$ qemu -enable-kvm -m 1024 ArchLinux.img -smp 4,sockets=2,threads=2
$ cat /proc/cpuinfo processor : 0 physical id : 0 siblings : 2 core id : 0 cpu cores : 1   processor : 1 physical id : 0 siblings : 2 core id : 0 cpu cores : 1   processor : 2 physical id : 1 siblings : 2 core id : 0 cpu cores : 1   processor : 3 physical id : 1 siblings : 2 core id : 0 cpu cores : 1


其它

事實上, QEMU 還有更強大的 CPU 的配置, 比如配置 CPU 指令級, 配置 NUMA, 等等, 這里不一一列舉.

 


免責聲明!

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



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