【高级指南】使用CoreFreq检查Linux中的详细CPU信息

科技   2024-11-11 21:29   河北  

本文翻译自:https://itsfoss.com/know-cpu-linux-corefreq/


如何在Linux中检查CPU信息?如何知道CPU的真实速度?或者哪个进程当前被绑定到特定的核心上?下面就这些问题进行说明。

1.使用CoreFreq了解Linux系统中的CPU

CoreFreq是一个用于收集Linux系统上CPU性能数据的工具。它采用开源许可,由法国开发者CyrIng编写,源代码可在GitHub上获取。

尽管CoreFreq看似稳定,但仍应被视为实验性工具。截至目前,它仅可在Arch软件仓库中获得,尚未为其他发行版打包。因此,如果想尝试使用它,可能需要自行编译。

最后,CoreFreq与其他类似工具的不同之处在于,它旨在收集高精度数据。为实现这一目标,CoreFreq需要尽可能接近硬件地监控CPU。现在,让我们来看看它如何在Linux机器上获取CPU信息。

# CoreFreq是如何工作的?

CoreFreq由三部分组成:一个内核模块、一个守护进程和一个用户空间命令行界面(CLI)。

  • 按定义,内核模块将完全访问主机。它的职责是收集底层数据。

  • 然后,这些数据由用户空间的守护进程收集。守护进程必须以root身份运行。

  • 最后,CoreFreq附带了一个终端界面,以易于阅读的人类可读格式报告数据。该CLI工具是一个普通进程,最终用户可以使用它。

2.编译和运行CoreFreq

在运行CoreFreq之前,必须先对其进行编译。这意味着,将程序员编写的源代码转换成计算机能够理解的形式。

编译CoreFreq所需的步骤对于所有Linux发行版来说大致相同,只是安装所需软件包的部分有所不同。在这里,给出CentOS/Red HatDebian的指令。

对于Red Hat/CentOS,所需的工具是“开发工具”组的一部分,因此只需安装该组即可:

 # specific to Red Hat, CentOS
 sudo yum group install "Development Tools"

对于Debian及其基于Debian的发行版,需要安装几个单独的软件包:

 # specific to Debian-based distributions
 sudo apt-get install dkms git libpthread-stubs0-dev
  • dkms是一个从源代码构建内核模块的工具。由于CoreFreq是作为内核模块实现的,以便尽可能接近硬件地收集数据,因此它是必需的;

  • git是一个用于分布式开发的工具。在这里,我们仅使用它来下载最新CoreFreq开发树的副本。

  • libpthread-stubs0-dev是构建CoreFreq所需的库(实际上,在Linux上,它只包含pkg-config数据)

系统上安装了所需的工具,接下来就可以下载CoreFreq的源代码了:

 # Distribution-agnostic part
 git clone https://github.com/cyring/CoreFreq.git

请注意,git将下载源代码的最新版本以及项目的所有修改历史记录。对于普通用户来说,这并无用处。

下面开始编译:

 cd CoreFreq/
 make && echo Done

几秒钟后,终端窗口中应该会出现Done字样,表示编译成功。

此时,CoreFreq的三个部分已经编译完成,准备启动。之前说过,该软件由三个部分组成——因此,实际上有三个软件可以启动来运行CoreFreq

2.1安装内核模块

由于技术原因,CoreFreq使用相同的低级计数器,应该首先禁用NMI看门狗。

Debian系统上,可以通过编辑/etc/default/grub文件来添加nmi_watchdog=0内核命令行参数,然后运行update-grub来完成此操作:

 sudoedit /etc/default/grub
 update-grub

这里需要重新启动计算机以使新的内核参数生效。

为了安装内核模块,我们将使用标准的Linux工具insmod。它将模块加载到内核中并启动它:

 sudo insmod corefreqk.ko

可以使用lsmod命令来检查CoreFreq是否已安装:

 lsmod | grep corefreq
 corefreqk              45056  0

最后,可以通过检查dmesg命令的输出,来确认CoreFreq是否已识别出系统折处理器:

 sudo dmesg | grep CoreFreq
 [57413.945720] CoreFreq: Processor [06_1E] Architecture [Nehalem/Lynnfield] CPU [8/8]

2.2启动守护进程daemon

启动守护进程,它的目的是收集内核模块收集的数据(因为在内核中尽可能少地执行操作是一个良好的设计原则):

 sudo ./corefreqd -i

此命令在守护进程运行时不会返回。因此,如果看到终端似乎挂起了,请不要惊讶,它并没有挂起:守护进程只是在运行,准备接受客户端请求。上面使用了-i标志,它是为了让守护进程在终端上显示更多关于当前情况的信息。

2.3启动客户端

打开一个新的终端,并导航到CoreFreq目录。然后执行:

 cd CoreFreq
 ./corefreq-cli

3.在Linux中探究您的CPU

除了处理器的静态特性(如型号名称或其功能)之外,一旦CoreFreq运行起来,就可以开始实时探究CPU的动态行为。例如,在上面的屏幕截图中,可以看到我的处理器的各个内核在138MHz334MHz之间运行。(非常小的)负载在其间均匀分布。

此外,还可以看到每个内核在各种处理器C状态(总和应为100%)中花费的时间,以及在Turbo Boost模式下花费的时间。要了解这些概念,可以从这里看到这些精彩解释:https://haypo.github.io/intel-cpus.html。

下面,为了演示起见,在一个终端中启动了一个无限循环,以希望能够占用一个核心的100%的负载:

 # infinite loop
 # eats 100% of the CPU--really?
 while truedo : ; done

这里我们可以清楚地看到运行无限循环的shell当前绑定到了哪个核心。这可以通过查看corefreq-cli任务监视器来确认。

键显示菜单,并选择查看>任务监视器:

在上面的图片中看不到这一点,但如果运行它,会发现任务在几秒钟后从一个核心跳到另一个核心。

4.停止CoreFreq

要停止CoreFreq,只需按启动时的相反顺序退出软件的三个部分。

  • 在客户端终端中按F4CTRL-C退出客户端。

  • 在守护进程终端中按CTRL-C退出守护进程。

  • 使用命令sudo rmmod corefreqk卸载内核模块。

5.最后补充

在某些方面,CoreFreq提供了在Linux中可以使用tophtopsensorslscpu和其他一些工具收集的CPU信息。但是,使用CoreFreq,不仅可以在一个界面中获取所有信息,而且由于数据收集的方式,还可以获得更高的准确性。最后,据我所知,有些数据在其他任何工具中都无法获得(例如C状态比率?每周期指令数?)。

可能会发现这个工具主要面向的是试图微调计算密集型算法的开发人员,或者是急于检查通过超频硬件获得多少增益的游戏玩家。

但我必须承认,我个人总是觉得这类工具很有趣,因为它们让我们能够“触摸”到现代硬件的现实——这通常比我们通常想象的要复杂得多。例如,你们中有多少人知道CPU的各个内核可能会以不同的速度运行——或者可能处于不同的C模式?

无论如何,我确信你们中的一些人会发现这个工具的巧妙用途,或者会对自己的硬件做出有趣的发现。


Python运维实践
Python运维实践,专注于互联网技术的总结与交流,内容涉及Python自动化运维、Django框架、园区网络技术、linux云计算、系统架构及网络空间安全等知识的实践与分享。
 最新文章