Linux で tick_sched_timer が大量の電力を消費する理由

Linux で tick_sched_timer が大量の電力を消費する理由

私の powertop (5.3.1 カーネル) によると:

Power est.              Usage       Events/s    Category       Description
 ...
  3.85 W      7,7 ms/s     437,0        Timer          tick_sched_timer

ラップトップで 3.85W というのは非常に大きな値で、6W に達することもあります。以前のカーネル (5.0.x) ではこのようなことは見たことがありませんが、この電力消費を抑える方法をご存知の方はいませんか?

答え1

tick_sched_timerLinux カーネルの CPU スケジューラの一部です。 この場合、システム上の多くのcontext switchesことを示している可能性があります。cpu-wakeups

大量の電力が消費されている場合は、システム上の何かが大量のcontext switchesおよび/または を引き起こしている可能性cpu-wakeupsがあります。これは、GPU ドライバー、Bluetooth、Wi-Fi などのドライバーに関連している可能性があります。ドライバーの更新間隔がかなり長いか、ドライバーが多くのハードウェア割り込みを発生させている可能性があります... ただし、一部のユーザー スペース ソフトウェアによっても発生している可能性があります... powertop でもこれらの数値が多少歪むことがあります。

使用していないドライバー(Bluetooth など)を無効にする(または使用していない場合は完全にブラックリストに登録する)ことで、ある程度の効果があるかもしれません。または、CPU ガバナーを変更したり、さまざまな省電力方法/戦略を使用したりすることでも、ある程度の効果があるかもしれません。カーネルの構成によっては、タイマー ティックを減らすことでも電力を節約できる可能性があります。たとえば、一部のカーネルは でビルドされCONFIG_HZ_1000=y、他のカーネルは でビルドされる可能性がありますCONFIG_HZ_250=y。後者は電力をいくらか節約できるはずです。

Powertop は原因を示すかもしれませんが、それはtick_sched_timerバッテリー消耗の根本的な原因ではありません (単なる症状です)。カーネル内またはユーザー空間内の他のスレッド、タスク、またはプロセスである可能性があります。

答え2

少し遅くなりましたが、 で設定を調整することで、使用量を平均 2W 以上から 1W 未満に減らすことができましたtlpui

プロセッサに移動し、SCHED_POWERSAVE オプションをオンにします。このカテゴリでは、さまざまな CPU 調整を試すこともできます。

Intel CPU の場合: グラフィックスに移動し、INTEL_GPU_FREQ を低い値に調整します。sudo tlp-stat -g事前に使用して何が使用可能かを確認してください。

AMD CPU の場合: グラフィックスに移動し、RADEON_POWER_PROFILE_ON_BAT と RADEON_DPM_STATE をそれぞれ低とバッテリーに設定します。

Bluetoothを無効にすることも効果があるようです。

パフォーマンスがかなり低下するため、これは理想的ではありませんが、パフォーマンスよりもバッテリー寿命を重視する場合は、これを選択してください。

関連情報