此命令用来显示cpu的相关信息
lscpu从sysfs和/proc/cpuinfo收集cpu体系结构信息,命令的输出比较易读!
命令输出的信息包含cpu数量,线程(thread),核数(core),套接字和Nom-Uniform Memeor Access(NUMA)节点数,缓存等!
不是所有的列都支持所有的架构,如果指定了不支持的列,那么lscpu将打印列,但不显示数据!
• Socket 具体是指的主板上 CPU 的插槽数量,一般笔记本只有一个,而服务器可能会有多个。如果有两个插槽,通常称为两路
• Core 具体是指 CPU 的核心,也就是平常说的几核,比如八核之类
• thread 是指的每个 Core 的硬件线程数,超线程
命令格式:
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)
可用的列:
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 //最小频率
显示格式:
[root@master ~]# lscpu
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主频
BogoMIPS: # 估算MIPS, MIPS是每秒百万条指令
Hypervisor vendor: # 虚拟化技术的提供商
Virtualization: # cpu支持的虚拟化技术
L1d cache: # 一级缓存(google了下,这具体表示表示cpu的L1数据缓存)
L1i cache: # 一级缓存(具体为L1指令缓存)
L2 cache: # 二级缓存
NUMA node0 CPU(s): 0-3 # 四个cpu在同一个numa节点node0上
Flags # cpu支持的技术特征
Linux 上的 /proc是一个虚拟文件系统,在系统启动后挂载在 /proc 上,/proc 包含了很多内核和系统信息用来展示 Linux 内核是如何展示硬件的,比如在 /proc/cpuinfo 里可以看到一些关于 CPU 的信息,其中的 flags 包含了很多用来表示 CPU 特征的参数:
具体每个 flag 缩写代表什么意思呢?关于 Linux 的最权威答案永远来自源代码,VPSee 在内核源代码里找到了每个 flag 的相关注释,通过这些注释可以很方便我们理解这些 flags 缩写
...
/* Intel-defined CPU features, CPUID level 0x00000001 (edx), word 0 */
#define X86_FEATURE_FPU (0*32+ 0) /* Onboard FPU */
#define X86_FEATURE_VME (0*32+ 1) /* Virtual Mode Extensions */
#define X86_FEATURE_DE (0*32+ 2) /* Debugging Extensions */
#define X86_FEATURE_PSE (0*32+ 3) /* Page Size Extensions */
#define X86_FEATURE_TSC (0*32+ 4) /* Time Stamp Counter */
#define X86_FEATURE_MSR (0*32+ 5) /* Model-Specific Registers */
#define X86_FEATURE_PAE (0*32+ 6) /* Physical Address Extensions */
#define X86_FEATURE_MCE (0*32+ 7) /* Machine Check Exception */
#define X86_FEATURE_CX8 (0*32+ 8) /* CMPXCHG8 instruction */
#define X86_FEATURE_APIC (0*32+ 9) /* Onboard APIC */
#define X86_FEATURE_SEP (0*32+11) /* SYSENTER/SYSEXIT */
#define X86_FEATURE_MTRR (0*32+12) /* Memory Type Range Registers */
#define X86_FEATURE_PGE (0*32+13) /* Page Global Enable */
#define X86_FEATURE_MCA (0*32+14) /* Machine Check Architecture */
#define X86_FEATURE_CMOV (0*32+15) /* CMOV instructions */
/* (plus FCMOVcc, FCOMI with FPU) */
#define X86_FEATURE_PAT (0*32+16) /* Page Attribute Table */
#define X86_FEATURE_PSE36 (0*32+17) /* 36-bit PSEs */
#define X86_FEATURE_PN (0*32+18) /* Processor serial number */
#define X86_FEATURE_CLFLSH (0*32+19) /* "clflush" CLFLUSH instruction */
#define X86_FEATURE_DS (0*32+21) /* "dts" Debug Store */
#define X86_FEATURE_ACPI (0*32+22) /* ACPI via MSR */
#define X86_FEATURE_MMX (0*32+23) /* Multimedia Extensions */
#define X86_FEATURE_FXSR (0*32+24) /* FXSAVE/FXRSTOR, CR4.OSFXSR */
#define X86_FEATURE_XMM (0*32+25) /* "sse" */
#define X86_FEATURE_XMM2 (0*32+26) /* "sse2" */
#define X86_FEATURE_SELFSNOOP (0*32+27) /* "ss" CPU self snoop */
#define X86_FEATURE_HT (0*32+28) /* Hyper-Threading */
#define X86_FEATURE_ACC (0*32+29) /* "tm" Automatic clock control */
#define X86_FEATURE_IA64 (0*32+30) /* IA-64 processor */
#define X86_FEATURE_PBE (0*32+31) /* Pending Break Enable */
/* AMD-defined CPU features, CPUID level 0x80000001, word 1 */
/* Don't duplicate feature flags which are redundant with Intel! */
#define X86_FEATURE_SYSCALL (1*32+11) /* SYSCALL/SYSRET */
#define X86_FEATURE_MP (1*32+19) /* MP Capable. */
#define X86_FEATURE_NX (1*32+20) /* Execute Disable */
#define X86_FEATURE_MMXEXT (1*32+22) /* AMD MMX extensions */
#define X86_FEATURE_FXSR_OPT (1*32+25) /* FXSAVE/FXRSTOR optimizations */
#define X86_FEATURE_GBPAGES (1*32+26) /* "pdpe1gb" GB pages */
#define X86_FEATURE_RDTSCP (1*32+27) /* RDTSCP */
#define X86_FEATURE_LM (1*32+29) /* Long Mode (x86-64) */
#define X86_FEATURE_3DNOWEXT (1*32+30) /* AMD 3DNow! extensions */
#define X86_FEATURE_3DNOW (1*32+31) /* 3DNow! */
...
/* Intel-defined CPU features, CPUID level 0x00000001 (ecx), word 4 */
...
/* VIA/Cyrix/Centaur-defined CPU features, CPUID level 0xC0000001, word 5 */
...
/* More extended AMD flags: CPUID level 0x80000001, ecx, word 6 */
bug
关于CPU系列、型号等的基本概述。始终仅基于第一个CPU。有时在Xen Dom0中,内核会报告错误的数据!在虚拟硬件上,每个插槽的内核数量等。可能是错的。
举例说明
举例来说,如果某个服务器"2路4核超线程",也就是 2 个插槽,4 核心,默认为 2 thread,也就是 2x4x2 是 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
If you shed tears when you miss the sun, you also miss the stars