如何检查 Linux 中是否支持内核特性

LinuxLinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在这个实验中,你将学习如何检查 Linux 中是否支持某个内核特性。这涉及探索不同的方法来识别 CPU 特性并验证内核配置。

首先,你将使用 cat /proc/cpuinfo 命令来查看 CPU 的详细信息,包括其型号、速度和支持的特性(这些特性以标志的形式列出)。接下来,你将学习如何使用 zcat /proc/config.gz 验证内核配置。最后,你将检查 dmesg 中的特性日志。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/CompressionandArchivingGroup(["Compression and Archiving"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/TextProcessingGroup(["Text Processing"]) linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/TextProcessingGroup -.-> linux/grep("Pattern Searching") linux/CompressionandArchivingGroup -.-> linux/gzip("Gzip") subgraph Lab Skills linux/cat -.-> lab-558863{{"如何检查 Linux 中是否支持内核特性"}} linux/grep -.-> lab-558863{{"如何检查 Linux 中是否支持内核特性"}} linux/gzip -.-> lab-558863{{"如何检查 Linux 中是否支持内核特性"}} end

使用 cat /proc/cpuinfo 检查 CPU 特性

在这一步中,我们将探讨如何使用 cat /proc/cpuinfo 命令检查你的 CPU 特性。该命令会显示系统中每个 CPU 核心的详细信息,包括其型号、速度和支持的特性。

/proc 目录是一个虚拟文件系统,它提供有关系统进程和硬件的信息。/proc/cpuinfo 文件包含了 CPU 的相关信息。

要查看 CPU 信息,请打开你的终端。你可以在桌面左侧找到 Xfce Terminal 图标。

现在,输入以下命令并按回车键:

cat /proc/cpuinfo

这个命令会输出大量信息。下面我们来分析一些关键字段:

  • processor:这是逻辑处理器编号。在多核系统中,每个核心都有自己的处理器编号。
  • vendor_id:这用于标识 CPU 制造商(例如,GenuineIntelAuthenticAMD)。
  • cpu family:这表示 CPU 系列。
  • model name:这提供了更详细的 CPU 型号描述。例如:Intel(R) Core(TM) i7 - 8700K CPU @ 3.70GHz
  • cpu MHz:这显示了 CPU 的时钟速度,单位为兆赫兹(MHz)。
  • cache size:这表示 CPU 缓存的大小。
  • flags:这是一个 CPU 特性列表,如 fpuvmedesse2avx2 等等。这些标志表示 CPU 支持的指令集和功能。

输出结果大致如下(具体细节会因你的 CPU 而异):

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz
stepping        : 10
microcode       : 0xca
cpu MHz         : 3696.062
cache size      : 12288 KB
physical id     : 0
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
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 cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm_syscall invpcid_single pti ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts md_clear flush_l1d
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa
bogomips        : 7392.12
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual

你可以滚动输出内容以查看所有细节。

这些信息对于排查性能问题、识别硬件限制或只是了解系统的功能很有帮助。

使用 zcat /proc/config.gz 验证内核配置

在这一步中,我们将学习如何使用 zcat /proc/config.gz 命令来验证内核配置。内核配置决定了哪些特性和模块被编译进内核。

/proc/config.gz 文件包含了内核配置信息,但它通常使用 gzip 进行压缩。我们将使用 zcat 来解压缩并查看该文件的内容。

要查看内核配置,请打开你的终端。

现在,输入以下命令并按回车键:

zcat /proc/config.gz

这个命令将输出内核配置信息。这是一个很长的选项列表,每个选项都以 CONFIG_ 开头。

输出结果大致如下(具体细节会因你的内核配置而异):

#
## Automatically generated file; DO NOT EDIT.
## Linux/x86_64 5.15.0-76-generic Kernel Configuration
#
CONFIG_64=y
CONFIG_X86_64=y
CONFIG_X86=y
CONFIG_MMU=y
CONFIG_FIRMWARE_MEMMAP=y
CONFIG_PPC_MM_NATIVE=n
CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
CONFIG_ARCH_FORTIFY_SOURCE_STRIPPED=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_ARCH_SPINLOCK=y
CONFIG_HAVE_ARCH_SPINLOCK_UNLOCKED=y
CONFIG_HAVE_ARCH_RWLOCK=y
CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_HAVE_ARCH_EFFICIENT_UNALIGNED=y
CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
CONFIG_HAVE_ARCH_USERFAULTFD_WP=y
CONFIG_HAVE_ARCH_USERFAULTFD_MINOR=y
CONFIG_HAVE_ARCH_SELECT_MEMORY_MODEL=y
CONFIG_HAVE_MIN_ALIGNMENT=y
CONFIG_CC_IS_Clang=n
CONFIG_IRQ_WORK=y
CONFIG_BUILDTIME_TABLE_SORT=y
CONFIG_THREAD_INFO_IN_TASK=y

... (more configuration options) ...

你可以使用 grep 来搜索特定的选项。例如,要检查 CONFIG_EXT4_FS 选项是否已启用,你可以使用以下命令:

zcat /proc/config.gz | grep CONFIG_EXT4_FS

如果该选项已启用,你会看到类似这样的一行:

CONFIG_EXT4_FS=y

如果该选项已禁用,你可能会看到类似这样的一行:

## CONFIG_EXT4_FS is not set

这些信息有助于你了解内核的配置方式,并排查与特定内核特性相关的问题。

使用 dmesg 检查特性日志

在这一步中,我们将学习如何使用 dmesg 命令检查特性日志。dmesg 会显示内核的消息缓冲区,其中包含有关硬件检测、驱动程序初始化和其他系统事件的信息。它是排查与硬件相关问题的重要工具。

要查看内核消息缓冲区,请打开你的终端。

现在,输入以下命令并按回车键:

dmesg

这个命令会输出大量信息。输出内容是按时间顺序排列的内核消息日志。

输出结果大致如下(具体细节会因你的系统而异):

[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 5.15.0-76-generic (buildd@lcy02-amd64-078) (gcc (Ubuntu 9.4.0-1ubuntu1) 9.4.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #83-Ubuntu SMP Thu Jun 15 19:16:42 UTC 2023
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.15.0-76-generic root=UUID=... ro
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Hygon HygonGenuine
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: Supporting XSAVE feature 0x1: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x2: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x4: 'AVX registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0xd: 'AVX-512 opmask, upper bytes of ZMM0-ZMM15, EVEX encoded data ZMM0-ZMM15'
[    0.000000] x86/fpu: Supporting XSAVE feature 0xe: 'AVX-512 hi256 zmm, opmask registers ZMM16-ZMM31'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x12: 'Tile registers'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  832
[    0.000000] x86/fpu: xstate_offset[d]: 1408, xstate_sizes[d]:  512
[    0.000000] x86/fpu: xstate_offset[e]: 1920, xstate_sizes[e]:  512
[    0.000000] x86/fpu: xstate_offset[12]: 2432, xstate_sizes[12]: 1664
[    0.000000] x86/fpu: Enabled xstate features 0x13, context size is 4096 bytes, using 'compacted' format.
[    0.000000] signal: max sigframe size: 9216
[    0.000000] BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d7ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d800-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
...

你可以使用 grep 过滤输出,以搜索特定的关键字。例如,要搜索与 USB 设备相关的消息,你可以使用以下命令:

dmesg | grep USB

这将只显示包含 "USB" 这个词的行。

你还可以使用 dmesg 来检查错误消息。例如,要搜索包含 "error" 这个词的消息,你可以使用以下命令:

dmesg | grep error

通过检查 dmesg 的输出,你可以深入了解系统的硬件和驱动程序的运行情况。

总结

在本次实验中,我们学习了如何使用 cat /proc/cpuinfo 命令来检查 CPU 特性。该命令通过访问 /proc 目录下的虚拟文件 /proc/cpuinfo,显示每个 CPU 核心的详细信息,包括其制造商、型号名称、时钟速度、缓存大小以及支持的特性。

通过查看 cat /proc/cpuinfo 的输出,特别是 flags 字段,我们可以识别 CPU 支持的指令集和功能,例如 fpuvmedesse2avx2。这使我们能够确定特定的 CPU 特性是否存在并已启用。