我想知道我的系统有多少个内核,所以我在谷歌搜索了同样的问题。我得到了一些命令,例如lscpu命令。当我尝试这个命令时,它给了我以下结果:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 1
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 23
Stepping: 10
CPU MHz: 1998.000
BogoMIPS: 5302.48
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 2048K
NUMA node0 CPU(s): 0-3
Run Code Online (Sandbox Code Playgroud)
特别是,此输出显示:
其中哪些表示 Linux 系统的核心?
有没有其他命令可以告诉核心数,还是我认为它完全错误?
如何判断我的处理器是否具有特定功能?(64 位指令集、硬件辅助虚拟化、加密加速器等)我知道该文件/proc/cpuinfo包含这些信息flags,但所有这些神秘的缩写是什么意思?
例如,给出以下摘录/proc/cpuinfo,我是否有 64 位 CPU?我有硬件虚拟化吗?
model name : Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz
…
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 lm constant_tsc arch_perfmon pebs bts rep_good aperfmperf pni dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm tpr_shadow vnmi flexpriority
Run Code Online (Sandbox Code Playgroud) 当我top在 Linux 中发出时,我得到类似这样的结果:

其中一行具有 CPU 使用率信息,如下所示:
Cpu(s): 87.3%us, 1.2%sy, 0.0%ni, 27.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Run Code Online (Sandbox Code Playgroud)
虽然我知道每个任务的定义(远在下面),但我不明白这些任务的确切含义。
hi - 服务硬件中断是什么意思?si - 服务软件中断是什么意思?st - 他们说这是“当管理程序为另一个处理器提供服务时,虚拟 CPU 非自愿等待的 CPU 时间(或从虚拟机窃取的 CPU 时间百分比”)。但它实际上意味着什么?有人可以更清楚吗?
我列出的所有的us,sy,ni,等,因为它可以帮助别人寻找相同。此信息不在手册页中。
us: user cpu time (or) % CPU time spent in user space
sy: system cpu time (or) % CPU time spent in kernel space
ni: user nice cpu time (or) % CPU time spent on low priority processes
id: …Run Code Online (Sandbox Code Playgroud) 我试图了解%CPU运行时的含义top。
我看到%CPU我的应用程序400或500大部分时间。
有谁知道这是什么意思?
什么数字是高数?
19080 大卫 20 0 27.9g 24g 12m S 400 19.7 382:31.81 paper_client
lscpu 给我以下输出:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 32
On-line CPU(s) list: 0-31
Thread(s) per core: 2
Core(s) per socket: 8
Socket(s): 2
NUMA node(s): 2
Vendor ID: GenuineIntel
CPU family: 6
Model: 45
Stepping: 7
CPU MHz: 2599.928
BogoMIPS: 5199.94
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K …Run Code Online (Sandbox Code Playgroud) 如何将进程限制为一个 CPU 内核?
类似于ulimit或cpulimit会很好的东西。(只是为了确保:我不想限制使用百分比或执行时间。我想强制应用程序(包括所有子进程、进程(线程))使用一个 cpu 核心(或“n”个 cpu 核心))。
查看strace我的来源,发现使用了克隆标志CLONE_IDLETASK,在那里描述为:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
Run Code Online (Sandbox Code Playgroud)
在深入研究之后,我发现,虽然该标志并未包含在man clone其中,但内核在引导过程中实际使用它为机器上的每个 CPU 创建空闲进程(所有这些进程都应该具有 PID 0)。即具有 8 个 CPU 的机器将至少有 7 个(见下面的问题)这样的进程“运行”(注意引号)。
现在,这让我想到了几个关于“空闲”过程实际上做了什么的问题。我的假设是它会持续执行 NOP 操作,直到它的时间范围结束并且内核分配一个真正的进程来运行或再次分配空闲进程(如果 CPU 没有被使用)。然而,这完全是猜测。所以:
在一台有 8 个 CPU 的机器上,会创建 7 个这样的空闲进程吗?(一个 CPU 将由内核本身持有,而没有执行用户空间工作?)
空闲进程真的只是一个无限的 NOP 操作流吗?(或执行相同操作的循环)。
CPU 使用率(比如说uptime)是否简单地通过空闲进程在 CPU 上的时间以及在特定时间段内不存在的时间来计算?
PS 这个问题的很大一部分很可能是由于我不完全了解 CPU 的工作原理。即我了解程序集、时间范围和中断,但我不知道如何,例如,CPU 可能会根据执行的内容使用更多或更少的能量。如果有人也能启发我,我将不胜感激。
如何使用 perl 脚本检查 Linux 机器上是否启用了超线程?
我正在尝试以下方式:
dmidecode -t processor | grep HTT
Run Code Online (Sandbox Code Playgroud)
让我知道我是否在正确的轨道上。
我在谷歌上搜索如何找到一台机器中的 CPU 数量,我找到了一些帖子,但我很困惑,因为有些人提到你获得逻辑内核与物理内核等。
那么逻辑内核和物理内核之间有什么区别,是有没有办法只获得物理内核?或者在我们的计数中包括逻辑核心是否有意义?
这与这个问题有关。
当我运行时,top我得到以下结果:

pid3038使用 18% cpu,但是在运行时

结果是 5.5%。而且这个数字似乎没有随时间变化(即稍后运行相同的命令时)......
该ps命令是否以某种方式平均 CPU 使用率?
我想尽可能快地编译。去搞清楚。并想自动选择-j选项后面的数字。如何以编程方式选择该值,例如在 shell 脚本中?
输出是否nproc等于我可用于编译的线程数?
make -j1
make -j16