一部のサービスで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の記事。