独立コアに割り当てられたサービスにはCPU統計は適用されません。

独立コアに割り当てられたサービスにはCPU統計は適用されません。

一部のサービスでCPU統計を設定しているうちに、一部のサービスがCPU使用率を正しく報告していないことがわかりました。使用量を報告しないようなサービスは、CPUAffinityカーネルパラメータを使用してカーネルレベルで分離されたコアでのみ実行されるサービスですisolcpus

以下は、これらのサービス状態の例です。

    Drop-In: /etc/systemd/system.control/gnss.service.d
             └─50-CPUAccounting.conf, 50-MemoryAccounting.conf
     Active: active (running) since Fri 2023-12-15 22:31:10 UTC; 2 days ago
   Main PID: 1233 (quectel_lg69t_g)
      Tasks: 4 (limit: 8479)
     Memory: 3.7M
        CPU: 0
     CGroup: /system.slice/gnss.service

また、同じシステムの他のサービスが使用量を正しく報告しています。

    Drop-In: /etc/systemd/system.control/cameras.service.d
             └─50-CPUAccounting.conf, 50-MemoryAccounting.conf
     Active: active (running) since Mon 2023-12-18 17:29:43 UTC; 1s ago
   Main PID: 3253648 (cameras)
      Tasks: 1 (limit: 8479)
     Memory: 3.7M
        CPU: 27ms
     CGroup: /system.slice/cameras.service

でCPUを使用しているサービスを見ることができるので、htop単にアイドル/凍結されているのではなく、実際にCPUを使用しないことが確実です。

これがコア分離の副作用のためだと思いますが、どこから始めるべきかわかりません。おそらく、systemdは割り当てられたタスクのCPU時間使用量を追跡するために別のコアで何かを実行する必要がありますか?

isolcpusこの問題の調査中に使用されなくなる可能性があるため、代わりに使用する必要があるという事実も発見されましたcpuset。試してみますがcpuset、隔離されたコアでスケジューラを有効にするように聞こえます。可能。

ベストアンサー1

結局、試行錯誤でこれがうまくいかない理由を見つけました。

問題の実際の原因は、隔離されたサービスがリアルタイムfifoスケジューラを使用しているため、そのスケジューラを使用してサービスのsystemd CPU統計を有効にすることができないようです。より具体的には、有効になっているように見えますが、実際にはサービスが間違った状態になっても機能しません。再起動しようとすると、特に次のエラーが発生します。このRed Hatの記事。

おすすめ記事