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_CPUCONFIG_SYS_SUPPORTS_HOTPLUG_CPUこれは、SMPが設定されている場合、この2つのスレッドが常に存在することを意味します!

したがって、この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を無効にすることはできますが、一部のドライバは依存関係をうまく処理できないため、後でカーネルを構築できるかどうか疑問に思うかもしれません(しかしうまくいくようです)。

おすすめ記事