我們先看man lscpu
display information about the CPU architecture
翻譯:顯示cpu架構信息
具體的描述如下:
lscpu gathers CPU architecture information from sysfs, /proc/cpuinfo and any applicable architecture-specific libraries (e.g. librtas on Powerpc). The command output can be optimized for parsing or for easy readability by humans. The information includes, for example, the number of CPUs, threads, cores, sockets, and Non-Uniform Memory Access (NUMA) nodes. There is also information about the CPU caches and cache sharing, family, model, bogoMIPS, byte order, and stepping. In virtualized environments, the CPU architecture information dis‐ played reflects the configuration of the guest operating system which is typically different from the physical (host) system. On architec‐ tures that support retrieving physical topology information, lscpu also displays the number of physical sockets, chips, cores in the host system. Options that result in an output table have a list argument. Use this argument to customize the command output. Specify a comma-sepa‐ rated list of column labels to limit the output table to only the specified columns, arranged in the specified order. See COLUMNS for a list of valid column labels. The column labels are not case sensi‐ tive. Not all columns are supported on all architectures. If an unsup‐ ported column is specified, lscpu prints the column but does not pro‐ vide any data for it.
翻譯如下:
lscpu命令從sysfs、/proc/cpuinfo、或者某些適用於特定架構的庫中收集數據。命令的輸出會以人類易讀的方式展示如下信息:cpu、線程、核心、插槽和Non-Uniform MemoryAccess (NUMA)節點的數量,也有cpu共享緩存,cpu的族號,運行模式,處理指令的速度,大小端,步進等信息
在虛擬環境下,系統架構信息展示映射着客戶操作系統的設置,這和物理主機是有明顯差異的。在架構上支持檢索物理拓撲信息,lscpu命令也顯示主機系統中的物理插槽數量,芯片,內核數。
Options可以提供一些參數,用這些參數可以自定義命令輸出。指定一個列表分隔符,指定一個逗號分隔的列標簽列表,以將輸出表限制為按指定的順序排列的指定的列。按指定順序排列。 有效列標簽請參考COLUMNS的列表。列標簽不區分大小寫。(man的輸出中有各種參數太多這里就不放出來了。可以自己去查看)
我們再來看一下命令執行結果
Architecture: x86_64 //架構--這里的64指的位處理器 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian //小端法 CPU(s): 4 //cpu數量 On-line CPU(s) list: 0-3 //在線的cpu數量 有些時候為了省電或者過熱的時候,某些CPU會停止運行 Thread(s) per core: 1 //每個核心的線程數 Core(s) per socket: 4 //每個插槽上有幾個核心 座: 1 NUMA 節點: 1 //NUMA 這個太復雜,所以他的解釋在下面 廠商 ID: GenuineIntel CPU 系列: 6 型號: 94 型號名稱: Intel(R) Xeon(R) CPU E3-1225 v5 @ 3.30GHz 步進: 3 //這個可以簡單理解為版本號 也有A0這樣的標識方式 CPU MHz: 900.023 CPU max MHz: 3700.0000 CPU min MHz: 800.0000 BogoMIPS: 6624.00 // MIPS是每秒百萬條指令,Bogo是Bogus(偽)的意思,這里是估算MIPS值 虛擬化: VT-x //虛擬化技術,這個我不太懂,不敢亂說 L1d 緩存: 32K //一級高速緩存 dcache 用來存儲數據 L1i 緩存: 32K //一級高速緩存 icache 用來存儲指令 L2 緩存: 256K L3 緩存: 8192K //緩存速度上 L1 > L2 > L3 > DDR(內存) 內存的理論速度在幾十g一秒 NUMA 節點0 CPU: 0-3 //四個cpu在一個numa節點上 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb invpcid_single intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 dtherm arat pln pts hwp hwp_notify hwp_act_window hwp_epp //Flags是標識了一些cpu的特征 具體可以查看https://blog.csdn.net/nemo2011/article/details/7531212
man中還有更多的描述,對大家來說意義也不大,接下來我們直接看選項了
選項: -a, --all 同時打印在線和離線 CPU (-e 選項默認值) 此選項只能與選項-e 或-p 一起指定 -b, --online 只打印在線 CPU (-p 選項默認值) 此選項只能與選項-e 或-p 一起指定 -c, --offline 只打印離線 CPU 此選項只能與選項-e 或-p 一起指定。 -e, --extended[=<列表>] 打印擴展的可讀格式 (類似表格的形式) 如果省略該列表參數, 則在命令輸出中包括所有可用數據的列 指定列表參數時, 選項字符串、等號 (=) 和列表不能包含任何空格或其他空白。 結果如下: CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE MAXMHZ MINMHZ 0 0 0 0 0:0:0:0 是 3700.0000 800.0000 1 0 0 1 1:1:1:0 是 3700.0000 800.0000 2 0 0 2 2:2:2:0 是 3700.0000 800.0000 3 0 0 3 3:3:3:0 是 3700.0000 800.0000 帶list示例: lscpu -e=cpu,node -p, --parse[=<列表>] 打印可解析格式 如果省略該列表參數, 則命令輸出與早期版本的 lscpu 兼容。 在此兼容格式中, 兩個逗號用於分隔 CPU 緩存列。 如果未標識任何 CPU 緩存, 則忽略緩存列。 如果使用列表參數, 則緩存列將用冒號 (:) 分隔 示例: lscpu -p=cpu,node,,L1d:L1i 我在使用上面命令的時候,不帶緩存列正常顯示,帶緩存列不能輸出數據也沒報錯,迷茫 -s, --sysroot <目錄> 以指定目錄作為系統根目錄 收集 lscpu 命令所發出的實例以外的 Linux 實例的 CPU 數據。 指定的目錄是要檢查的 Linux 實例的系統根。 -x, --hex 打印十六進制掩碼而非 CPU 列表 -y, --physical print physical instead of logical IDs 顯示所有列的物理 id。 除了由 lscpu 分配的邏輯 id 之外 物理 id 是由內核提供的特定於平台的值。無法檢索元素的物理 ID 用破折號 (-) 字符顯示 此選項不影響 CPU 邏輯編號。 -h, --help 顯示此幫助並退出 -V, --version 輸出版本信息並退出 可用的列: CPU 邏輯 CPU 數量 CORE 邏輯核心數量 SOCKET 邏輯(CPU)座數量 NODE 邏輯 NUMA 節點數量 BOOK 邏輯 book 數 DRAWER logical drawer number //邏輯抽屜數(不太明白,好像和book有關系) CACHE shows how caches are shared between CPUs //cpu之間如何共享緩存 POLARIZATION CPU dispatching mode on virtual hardware //虛擬硬件上的CPU調度模式 ADDRESS physical address of a CPU //cpu物理地址 CONFIGURED shows if the hypervisor has allocated the CPU //管理程序是否分配了cpu ONLINE shows if Linux currently makes use of the CPU //在使用的cpu MAXMHZ shows the maximum MHz of the CPU //最大頻率 MINMHZ shows the minimum MHz of the CPU //最小頻率
一、lscpu輸出
使用lscpu查看的結果如下圖,這里會顯示很多信息,如下:
使用lscpu -p會詳細的numa信息,如下:
[root@localhost ~]# lscpu -p # The following is the parsable format, which can be fed to other # programs. Each different item in every column has an unique ID # starting from zero. # CPU,Core,Socket,Node,,L1d,L1i,L2,L3 0,0,0,0,,0,0,0,0 1,1,1,2,,1,1,1,1 2,2,2,4,,2,2,2,2 3,3,3,7,,3,3,3,3 4,0,0,0,,4,0,0,0 5,1,1,2,,5,1,1,1 6,2,2,4,,6,2,2,2 7,3,3,7,,7,3,3,3 8,4,0,0,,8,4,4,0 9,5,1,2,,9,5,5,4 …………略部
描述:
此命令用來顯示cpu的相關信息 lscpu從sysfs和/proc/cpuinfo收集cpu體系結構信息,命令的輸出比較易讀 命令輸出的信息包含cpu數量,線程,核數,套接字和Nom-Uniform Memeor Access(NUMA),緩存等 不是所有的列都支持所有的架構,如果指定了不支持的列,那么lscpu將打印列,但不顯示數據
語法:
lscpu [-a|-b|-c] [-x] [-s directory] [-e [=list]|-p [=list]]
lscpu -h|-V
參數選項:
-a, –all: 包含上線和下線的cpu的數量,此選項只能與選項e或-p一起指定 -b, –online: 只顯示出上線的cpu數量,此選項只能與選項e或者-p一起指定 -c, –offline: 只顯示出離線的cpu數量,此選項只能與選項e或者-p一起指定 -e, –extended [=list]: 以人性化的格式顯示cpu信息,如果list參數省略,輸出所有可用數據的列,在指定了list參數時,選項的字符串、等號(=)和列表必須不包含任何空格或其他空白。比如:’-e=cpu,node’ or ’–extended=cpu,node’ -h, –help:幫助 -p, –parse [=list]: 優化命令輸出,便於分析.如果省略list,則命令的輸出與早期版本的lscpu兼容,兼容格式以兩個逗號用於分隔cpu緩存列,如果沒有發現cpu緩存,則省略緩存列,如果使用list參數,則緩存列以冒號(:)分隔。在指定了list參數時,選項的字符串、等號(=)和列表必須不包含空格或者其它空白。比如:’-e=cpu,node’ or ’–extended=cpu,node’ -s, –sysroot directory: 為一個Linux實例收集CPU數據,而不是發出lscpu命令的實例。指定的目錄是要檢查Linux實例的系統根 -x, –hex:使用十六進制來表示cpu集合,默認情況是打印列表格式的集合(例如:0,1)
顯示格式:
Architecture: #架構 CPU(s): #邏輯cpu顆數 Thread(s) per core: #每個核心線程 Core(s) per socket: #每個cpu插槽核數/每顆物理cpu核數 CPU socket(s): #cpu插槽數 Vendor ID: #cpu廠商ID CPU family: #cpu系列 Model: #型號 Stepping: #步進 CPU MHz: #cpu主頻 Virtualization: #cpu支持的虛擬化技術 L1d cache: #一級緩存(google了下,這具體表示表示cpu的L1數據緩存) L1i cache: #一級緩存(具體為L1指令緩存) L2 cache: #二級緩存
以下幾個概念
* processor 條目包括這一邏輯處理器的唯一標識符。 * physical id 條目包括每個物理封裝的唯一標識符。 * core id 條目保存每個內核的唯一標識符。 * siblings 條目列出了位於相同物理封裝中的邏輯處理器的數量。 * cpu cores 條目包含位於相同物理封裝中的內核數量。 * 如果處理器為英特爾處理器,則 vendor id 條目中的字符串是 GenuineIntel。
socket:物理CPU的插槽
Core per Socket:每一個插槽對應的物理CPU上有多少個核
Thread per Core:每個核上有多少個線程
命令執行結果:
i2000:~ # lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 2 Core(s) per socket: 1 Socket(s): 4 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 62 Stepping: 4 CPU MHz: 2499.998 BogoMIPS: 4999.99 Hypervisor vendor: KVM Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 4096K NUMA node0 CPU(s): 0-7
socket就是主板上插cpu的槽的數目,也就是可以插入的物理CPU的個數。
core就是我們平時說的“核“,每個物理CPU可以雙核,四核等等。
thread就是每個core的硬件線程數,即超線程
輸入命令cat /proc/cpuinfo 查看physical id有幾個,上述結果顯示只有0,所以只有一個物理cpu;查看processor有幾個,上述結果顯示有0和1兩個,所以有兩個邏輯cpu。
(一)概念
① 物理CPU
實際Server中插槽上的CPU個數
物理cpu數量,可以數不重復的 physical id 有幾個
② 邏輯CPU
/proc/cpuinfo 用來存儲cpu硬件信息的
信息內容分別列出了processor 0 –processor n 的規格。這里需要注意,n是邏輯cpu數
一般情況,我們認為一顆cpu可以有多核,加上intel的超線程技術(HT), 可以在邏輯上再分一倍數量的cpu core出來
邏輯CPU數量=物理cpu數量 x cpu cores 這個規格值 x 2(如果支持並開啟ht)
備注一下:Linux下top查看的CPU也是邏輯CPU個數
③ CPU核數
一塊CPU上面能處理數據的芯片組的數量、比如現在的i5 760,是雙核心四線程的CPU、而 i5 2250 是四核心四線程的CPU
一般來說,物理CPU個數×每顆核數就應該等於邏輯CPU的個數,如果不相等的話,則表示服務器的CPU支持超線程技術
㈡ 查看CPU信息
當我們 cat /proc/cpuinfo 時、
具有相同core id的CPU是同一個core的超線程
具有相同physical id的CPU是同一個CPU封裝的線程或核心
㈢ 下面舉例說明
① 查看物理CPU的個數
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 2
② 查看邏輯CPU的個數
#cat /proc/cpuinfo |grep "processor"|wc -l 24
③ 查看CPU是幾核
#cat /proc/cpuinfo |grep "cores"|uniq 6
我這里應該是2個Cpu,每個Cpu有6個core,應該是Intel的U,支持超線程,所以顯示24
scpu
顯示 CPU 的架構信息
lscpu
從 sysfs
和 proc/cpuinfo
中收集信息。這個命令的輸出是規范的可以用來解析,或者給人來閱讀。該命令顯示的信息包括,CPU 的數量,線程 (thread),核心 (core),Socket 還有 Non-Uniform Memory Access (NUMA) 節點數。
Socket 具體是指的主板上 CPU 的插槽數量,一般筆記本只有一個,而服務器可能會有多個。如果有兩個插槽,通常稱為兩路
Core 具體是指 CPU 的核心,也就是平常說的幾核,比如八核之類
thread 是指的每個 Core 的硬件線程數,超線程
舉例來說,如果某個服務器”2 路 4 核超線程”,也就是 2 個插槽,4 核心,默認為 2 thread,也就是 242 是 16 邏輯 CPU。對操作系統來說,邏輯 CPU 的數量就是 Socket * Core * Thread。
比如下面我的台式機,1 Sockets, 4 Cores,2 Threads,那么就是 4 核 8 線程。
如下示例:
Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 8 On-line CPU(s) list: 0-7 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1 NUMA node(s): 1
CPU 文件存放在 /sys/devices/system/cpu/
將指定的CPU關閉
cd /sys/devices/system/cpu/ # 進入CPU目錄 pwd /sys/devices/system/cpu ls -Al |grep 'cpu[0-9]' # 正規則查詢 CPU目錄下 所有CPU drwxr-xr-x. 6 root root 0 2月 5 2018 cpu0 drwxr-xr-x. 6 root root 0 2月 5 2018 cpu1 cat ./cpu[0-9]/online # 查看所有CPU的 online 值 1 1 echo 0 > ./cpu1/online # 將CPU0 關閉 cat ./cpu[0-9]/online 1 0 lscpu |grep -Ei 'on-line|off-line' # 查看所有CPU的 online 值,可以看到 CPU1 已經被關閉 On-line CPU(s) list: 1 Off-line CPU(s) list: 0
參考:https://www.cnblogs.com/machangwei-8/p/10398902.html
https://www.cnblogs.com/vinter/p/9712404.html