如何在 Linux-5.10.24 中禁用 CPU 热插拔功能(和内核线程)

如何在 Linux-5.10.24 中禁用 CPU 热插拔功能(和内核线程)

我正在开发一个嵌入式 Linux 系统,该系统使用 kernel-5.10.24。
由于系统资源是有限的,所以我想尽量减少CPU/内存/存储的使用。
ps -ax我发现2个内核线程如下,

   14 root      0:00 [cpuhp/0]
   15 root      0:00 [cpuhp/1]

我认为它们用于 CPU 热插拔,并且该系统中没有 CPU 热插拔用例,因此我想禁用该功能并且不创建这 2 个内核线程。
我尝试强制禁用此配置(select SYS_SUPPORTS_HOTPLUG_CPU从 arch/ARM/Kconfig 等中删除)。

但是部署新内核后,这2个内核线程仍然存在。
通过检查代码,似乎这2个线程的创建与 和 无关CONFIG_HOTPLUG_CPUCONFIG_SYS_SUPPORTS_HOTPLUG_CPU这意味着当配置SMP时,这2个线程始终存在!

所以我不确定是否有办法禁用这两个内核线程的创建。如果不是,我必须忍受它们,假设它们不会占用太多的 CPU 和内存来运行。

根据 dhanushka 的评论更新了内核菜单配置

                                                                                                                                         
   Symbol: HOTPLUG_CPU [=y]                                                                                                                

   Type  : bool                                                                                                                            

   Defined at arch/mips/Kconfig:2942                                                                                                       
     Prompt: Support for hot-pluggable CPUs                                                                                                
     Depends on: SMP [=y] && SYS_SUPPORTS_HOTPLUG_CPU [=y]                                                                                 
     Location:                                                                                                                             
       -> Kernel type                                                                                                                      
   (2)   -> Multi-Processing support (SMP [=y])                                                                                            
   Selected by [y]:                                                                                                                        
     - PM_SLEEP_SMP [=y] && SMP [=y] && (ARCH_SUSPEND_POSSIBLE [=y] || ARCH_HIBERNATION_POSSIBLE [=y]) && PM_SLEEP [=y]

与 dhanushka 的评论相同。
我会尝试禁用它并更新这个问题。
正如我所说,cpuhp0/1似乎无法禁用。

答案1

并不是真正的答案,但想添加一些东西。您一定已经尝试过这些,但请参阅下文以防万一您错过了。

如果你有top(1),你可以检查他们的资源使用情况。或者您可以使用 /proc/[pid]/status 等来检查它们。无论哪种方式,您都会看到它们并不消耗资源,并且大多处于睡眠(S)状态。

您还可以从内核文档和配置中看到它与电源管理(SMP 挂起/恢复)相关,因此请考虑您的电源管理要求以及禁用 CPU 热插拔会对它们产生怎样的影响。

内核配置:

内核文档说需要启用 CONFIG_HOTPLUG_CPU 才能使 CPU 热插拔工作。

  • 你是否从menuconfig中禁用了?
  • 如果没有,您是否检查了 menuconfig 以查看更改后它是否已被禁用?

如果您尝试从 menuconfig 禁用它,您首先必须禁用一系列其他配置,并在禁用它们后能够成功构建内核。例如,这是 menuconfig 在我的平台上显示的内容:

  CONFIG_HOTPLUG_CPU:
  
  Say Y here to experiment with turning CPUs off and on.  CPUs
  can be controlled through /sys/devices/system/cpu.
  
  Symbol: HOTPLUG_CPU [=y]
  Type  : bool
  Defined at arch/arm64/Kconfig:985
    Prompt: Support for hot-pluggable CPUs
    Location:
      -> Kernel Features
  Selects: GENERIC_IRQ_MIGRATION [=y]
  Selected by [y]:
    - PM_SLEEP_SMP [=y] && SMP [=y] && (ARCH_SUSPEND_POSSIBLE [=y] || ARCH_HIBERNATION_POSSIBLE [=y]) && PM_SLEEP [=y]

因此,我根本无法从 menuconfig 中禁用它,除非我解决了

  Selected by [y]:
    - PM_SLEEP_SMP [=y] && SMP [=y] && (ARCH_SUSPEND_POSSIBLE [=y] || ARCH_HIBERNATION_POSSIBLE [=y]) && PM_SLEEP [=y]

这使得它成为可能。

你也会有类似的限制。您可以尝试解决它们并最终禁用 CONFIG_HOTPLUG_CPU,但我怀疑您之后是否能够构建内核,因为某些驱动程序不能很好地处理依赖项(但看起来对您有用)。

相关内容