Linux-5.10.24에서 CPU 핫플러그 기능(및 커널 스레드)을 비활성화하는 방법

Linux-5.10.24에서 CPU 핫플러그 기능(및 커널 스레드)을 비활성화하는 방법

저는 kernel-5.10.24를 사용하여 임베디드 Linux 시스템을 개발 중입니다.
시스템 리소스가 제한되어 있으므로 CPU/메모리/스토리지 사용량을 최소화하고 싶습니다. 내가 찾은 2개의 커널 스레드는 다음과 같습니다
.ps -ax

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

나는 이것이 CPU 핫 플러깅을 위한 것이라고 생각하며 이 시스템에는 CPU 핫 플러깅을 위한 사용 사례가 없으므로 해당 기능을 비활성화하고 이 2개의 커널 스레드를 생성하지 않기를 원합니다.
이 구성을 강제로 비활성화하려고 했습니다( select SYS_SUPPORTS_HOTPLUG_CPUarch/ARM/Kconfig 등에서 제거).

그러나 새 커널을 배포한 후에도 이 2개의 커널 스레드는 여전히 존재합니다.
코드를 조사해 보면 이 2개의 스레드 생성은 및 와 아무 관련이 없는 것으로 보입니다 CONFIG_HOTPLUG_CPU. CONFIG_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 등을 사용하여 확인할 수 있습니다. 어느 쪽이든 리소스를 소비하지 않으며 대부분 절전 상태에 있다는 것을 알 수 있습니다.

또한 커널 문서 및 구성에서 전원 관리(SMP 일시 중지/재개)와 관련되어 있음을 확인할 수 있으므로 전원 관리 요구 사항과 CPU 핫플러그 비활성화가 이에 미치는 영향을 고려하십시오.

커널 구성:

커널 문서에는 CPU 핫 플러깅이 작동하려면 CONFIG_HOTPLUG_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를 비활성화할 수는 있지만 일부 드라이버는 종속성을 잘 처리하지 못하기 때문에 나중에 커널을 빌드할 수 있을지 의문입니다(하지만 작동할 것 같습니다).

관련 정보