C状態とS状態の違いは何ですか?

C状態とS状態の違いは何ですか?

Linuxの電源管理文書を見ていますが、CとSの状態が混乱しています。

  • C状態はに定義されています/sys/devices/system/cpux/cpuidle/。私が理解したのは、アイドルレベルに応じてCPUを別のスリープ状態に切り替えるために使用されます。
  • Sステータスインターフェイスはステータスであり、/sys/power/stateストップ、スタンバイ、メモリなどのさまざまなスリープ状態を表示できます。説明を読んで、彼らはC状態でやろうとしているのと同じことをしようとします。

これは私の質問を懇願します:それらの違いは何ですか?システムがアイドル状態になるのを防ぐには、どのパラメータを設定する必要がありますか? Cステータスの無効化パラメータを設定しましたが/sys/devices/system/cpux/cpuidle/(観察のため)、携帯電話がアイドル状態になるのを観察し続けることができますsystrace

答え1

S状態はグローバルACPIステータス:システム全体の電源状態を説明します。このタイプの状態の変更は通常、ユーザーが要求したり、少なくともユーザーが構成したりできます(例えばタイムアウト、バッテリー不足待機など)。

C状態はプロセッサの状態:個々のCPUパッケージ(またはコア)の電源状態を説明します。このタイプの状態の変更は通常自動的に行われ、システムの全体的な状態には影響しません。 CPUは、システムの残りの部分を介さずに省電力モードに入り、再び目を覚ます可能性があります。

ほとんどの場合(特に携帯電話の場合)、C状態遷移を無効にするのが便利かどうかはわかりません。 S状態遷移を無効にすることもできます。 「アイドル」状態はソフトウェアで実装正式な ACPI 状態ではなく、ハードウェア制御が見つかりません。 S状態遷移はソフトウェアによって制御されます。例えば、システム制御システムではそこで睡眠を無効にする;携帯電話でスリープモードを無効にする方法がわかりません。

答え2

凍結、待機などがある場合、これはほぼ常に手動コマンドです。ラップトップは蓋を閉めるように接続することができ、これは最終的に自発的な行為です。

echo mem > /sys/power/state

これが私のシステム(カバーなしのミニPC)をS3に接続した方法です。ワットが3.5から1.2に変更されました。 (電源をオフにしても消費電力はまだ0.7Wです。)デフォルトのxorgタイムリミットソフトスリープを使用すると、消費電力は2.5Wです。 S1またはS2でなければなりません。

]# cat /sys/power/mem_sleep 
s2idle [deep]

これはあなたが望む睡眠の種類を調整することです。

ただし、ディストリビューション/カーネルはハードウェアをサポートする必要がありますが、それは簡単ではありません。私のディストリビューションに「echo mem」がある場合は、すぐに再生を停止しました。 (携帯電話についてはよくわかりません。) 私はこのようなものがうまく機能するので、そのディストリビューションを選択しました。


サポートされている場合、S状態は、時間の経過とともに、または低エネルギーで発生するだけでなく、ユーザーコマンドのように機能します。

C状態は、主にG0「作業」状態のCPU内部の問題です。マルチコアCPUが慎重に配置されています。いくつかのコアすぐに再アクティブ化できるように、いくつかのC状態に切り替えます。 Wikiリンクの定義はやや暫定的です。 「C10」プロンプトを見ると、これはHaswellの専門分野ではありません。これは、「現代の」CPUが低エネルギー消費と高性能を組み合わせる方法です。

「ラムの一時停止」が良い例です。特別な最小RAM接続維持状態を除いて、CPUはディープスリープモードに入り、システムは完全にシャットダウンされる。 CPUが回復するのにしばらく時間がかかっても大丈夫です。

ただし、システム負荷が低く(アイドル状態で実行中のシステム)、1つ以上のコアが自動的にスリープ状態になる場合は、非常に迅速に再度有効にする必要があります。


関連情報