電力管理ガイド
Red Hat Enterprise Linux 7 での電力消費量の管理
概要
第1章 概要
1.1. 電力管理の重要性
- コスト削減のための全体的な消費電力量の抑制
- サーバーおよびコンピューティングセンターの熱の抑制
- 冷却、空間、ケーブル、発電機、無停電電源装置 (UPS) などにかかる 2 次コストの削減
- ノートパソコンのバッテリー寿命の延長
- 二酸化炭素排出量の低減
- エナジースター (Energy Star) などグリーン IT に関する政府規則または法的要件の準拠
- 新システムにおける企業のガイドラインの準拠
- 問: マシンを最適化すべきですか?
- 問: どの程度、最適化する必要がありますか?
- 問: 最適化によりシステムパフォーマンスが許容範囲を下回るレベルに低下しませんか?
- 問: システムの最適化に費やす時間とリソースの負担が、得られる効果を上回りませんか?
1.2. 電力管理の基礎
Red Hat Enterprise Linux 6 以降、カーネルは、ティックレス (tickless) で実行されます。つまり、以前の定期タイマーの割り込みが、オンデマンド型の割り込みに置き換えられました。したがって、アイドル状態の CPU を、新しいタスクが処理のためにキューに格納されるまでアイドル状態に維持し、低電力の状態にある CPU をより長くその状態に維持することができます。ただし、システムのアプリケーションが不必要なタイマーイベントを作成する場合は、この機能の利点が打ち消されることがあります。このようなイベントの例としては、ボリュームの変更またはマウスの移動のチェックなどのポーリングイベントがあります。
これは、可動パーツを持つデバイス (たとえば、ハードディスク) の場合に特に当てはまります。また、一部のアプリケーションでは、使用していないが有効なデバイスが「オープン」な状態のままになることがあります。この状況では、カーネルはデバイスが使用中であると見なし、デバイスが省電力状態になることが阻止される場合があります。
ただし多くの場合、これは最新のハードウェアと正しい BIOS 設定に依存します。現在 Red Hat Enterprise Linux 7 でサポートされる新しい機能の一部は、多くの場合、従来のシステムコンポーネントではサポートされません。システムに最新の公式ファームウェアが使用されていることと、BIOS の電力管理またはデバイス設定のセクションで電力管理の機能が有効になっていることを確認してください。確認する機能は以下のとおりです。
- SpeedStep
- PowerNow!
- Cool'n'Quiet
- ACPI (C 状態)
- Smart
ACPI (電力制御インタフェース: Advanced Configuration and Power Interface) を使用する最新の CPU は、以下の 3 つの電力状態を提供します。
- Sleep (C 状態)
- Frequency and voltage (P 状態)P 状態はプロセッサーの周波数および電圧動作点を表し、共に P 状態が増加すると変動します。
- Heat output (T 状態または「温度状態」)
当たり前かもしれませんが、実際に節電を行う最善策の 1 つは、システムの電源をオフにすることです。たとえば、「グリーン IT」を意識する企業文化を育み、昼休みや帰宅時にマシンの電源をオフにするガイドラインを策定します。また、数台の物理サーバーを大きなサーバー 1 台に統合し、Red Hat Enterprise Linux 7 に同梱される仮想化技術を使用して仮想化することもできます。
第2章 電力管理の監査と分析
2.1. 監査および分析の概要
2.2. PowerTOP
root で以下のコマンドを実行します。
yum install powertoproot で以下のコマンドを実行します。
powertoproot で以下のコマンドを実行します。
powertop --calibratesystemctl disable servicename.serviceroot で以下のコマンドを実行します。
ps -awux | grep processnamestrace -p processid
C4 の方が C3 よりも高い)。これは、CPU 使用率がどの程度うまく最適化されているかを示す指標になります。システムのアイドル中の理想状態は、最高の C または P 状態が 90% 以上を維持していることです。

図2.1 実行中の PowerTOP
--html オプションで実行すると、HTML レポートを生成することもできます。htmlfile.html パラメーターを希望する出力ファイル名に置き換えます。
powertop --html=htmlfile.html--time オプションを使うとこれを変更することもできます。
powertop --html=htmlfile.html --time=secondsturbostat(8) man ページまたは『パフォーマンスチューニングガイド』を参照してください。
2.3. Diskdevstat と netdevstat
root で以下のコマンドを実行します。
yum install tuned-utils-systemtap kernel-debuginfodiskdevstatnetdevstatdiskdevstat update_interval total_duration display_histogram
netdevstat update_interval total_duration display_histogram
- update_interval
- 表示が更新される秒単位の間隔。デフォルト値:
5 - total_duration
- 実行完了にかかる秒単位の時間。デフォルト値:
86400(1 日) - display_histogram
- 実行完了時に全収集データで度数分布図 (柱状グラフ) を作成するかどうかを指定するフラグ。
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 5494 0 sda1 0 0.000 0.000 0.000 758 0.000 0.012 0.000 0logwatch 5520 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 5549 0 sda1 0 0.000 0.000 0.000 140 0.000 0.009 0.000 perl 5585 0 sda1 0 0.000 0.000 0.000 108 0.001 0.002 0.000 perl 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 5429 0 sda1 0 0.000 0.000 0.000 62 0.009 0.009 0.000 crond 5379 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5473 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5415 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5433 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5425 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 5375 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5477 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 5469 0 sda1 0 0.000 0.000 0.000 62 0.007 0.007 0.000 crond 5419 0 sda1 0 0.000 0.000 0.000 62 0.008 0.008 0.000 crond 5481 0 sda1 0 0.000 0.000 0.000 61 0.000 0.001 0.000 crond 5355 0 sda1 0 0.000 0.000 0.000 37 0.000 0.014 0.001 laptop_mode 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd 5575 0 sda1 0 0.000 0.000 0.000 16 0.000 0.000 0.000 cat 5581 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 5582 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 5579 0 sda1 0 0.000 0.000 0.000 12 0.000 0.001 0.000 perl 5580 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 5354 0 sda1 0 0.000 0.000 0.000 12 0.000 0.170 0.014 s h 5584 0 sda1 0 0.000 0.000 0.000 12 0.001 0.002 0.000 perl 5548 0 sda1 0 0.000 0.000 0.000 12 0.001 0.014 0.001 perl 5577 0 sda1 0 0.000 0.000 0.000 12 0.001 0.003 0.000 perl 5519 0 sda1 0 0.000 0.000 0.000 12 0.001 0.005 0.000 perl 5578 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 5583 0 sda1 0 0.000 0.000 0.000 12 0.001 0.001 0.000 perl 5547 0 sda1 0 0.000 0.000 0.000 11 0.000 0.002 0.000 perl 5576 0 sda1 0 0.000 0.000 0.000 11 0.001 0.001 0.000 perl 5518 0 sda1 0 0.000 0.000 0.000 11 0.000 0.001 0.000 perl 5354 0 sda1 0 0.000 0.000 0.000 10 0.053 0.053 0.005 lm_lid.sh
- PID
- アプリケーションのプロセス ID
- UID
- アプリケーションの実行元となるユーザー ID
- DEV
- I/O が発生したデバイス
- WRITE_CNT
- 書き込み操作の合計数
- WRITE_MIN
- 2 回の連続書き込みに要した最短時間 (秒単位)
- WRITE_MAX
- 2 回の連続書き込みに要した最長時間 (秒単位)
- WRITE_AVG
- 2 回の連続書き込みに要した平均時間 (秒単位)
- READ_CNT
- 読み込み操作の合計数
- READ_MIN
- 2 回の連続読み込みに要した最短時間 (秒単位)
- READ_MAX
- 2 回の連続読み込みに要した最長時間 (秒単位)
- READ_AVG
- 2 回の連続読み込みに要した平均時間 (秒単位)
- COMMAND
- プロセスの名前
PID UID DEV WRITE_CNT WRITE_MIN WRITE_MAX WRITE_AVG READ_CNT READ_MIN READ_MAX READ_AVG COMMAND 2789 2903 sda1 854 0.000 120.000 39.836 0 0.000 0.000 0.000 plasma 2573 0 sda1 63 0.033 3600.015 515.226 0 0.000 0.000 0.000 auditd 2153 0 sda1 26 0.003 3600.029 1290.730 0 0.000 0.000 0.000 rsyslogd
WRITE_CNT が0 よりも大きいため、測定中になんらかの書き込みが実行されたことを意味します。その中でも、plasma は他と大差をつけて一番高い数値を示しています (最多の書き込み操作が実行されるため、当然書き込み間隔の平均時間は最短となります)。したがって、電力効率の悪いアプリケーションについて懸念がある場合は、Plasma が最有力候補になります。
strace -p 2789strace の出力には、ユーザーの KDE アイコンのキャッシュファイルを書き込みのため開き、直後にそのファイルを再び閉じるという動作が 45 秒毎に繰り返されるパターンが含まれていました。これにより、ファイルのメタデータ (特に変更時間) が変更されたため、必要な物理的な書き込みがハードディスクに行われました。最終的な修正では、アイコンに更新が加えられなかった場合に、こうした不要な呼び出しが発生しないようになりました。
2.4. Battery Life Tool Kit
-a を付けて起動すると、デスクトップコンピューターのパフォーマンスも報告できます。
office の作業負荷はテキストを書き込み、その中で修正を行います。同じ作業を表計算でも行います。BLTK を PowerTOP や他の監査または解析ツールなどと併用することで、マシンがアイドル状態の時だけでなく頻繁に使用されている時にも、実行した最適化に効果があるかどうかを検証できます。全く同じ作業負荷を異なる設定で複数回実行できるため、異なる設定の結果を比較することができます。
yum install bltkbltk workload optionsidle の作業負荷を 120 秒間実行するには、以下のコマンドを実行します。
bltk -I -T 120-I,--idle- システムがアイドル状態です。他の作業負荷と比較する場合に基準値として使用します。
-R,--reader- ドキュメントを読み込むシミュレートを行います (デフォルトでは、Firefox を使用)。
-P,--player- CD または DVD ドライブのマルチメディアファイルの視聴をシミュレートします (デフォルトでは mplayer を使用)。
-O,--office- OpenOffice.org スイートを使ったドキュメント編集のシミュレートを行います。
-a,--ac-ignore- AC 電源が使用可能かどうか無視します (デスクトップで必要)。
-T number_of_seconds,--time number_of_seconds- テストを実行する期間 (秒単位) ;
idle作業負荷を使用してこのオプションを使用します。 -F filename,--file filename- 特定の作業負荷で使用されるファイル (たとえば、CD または DVD ドライブにアクセスする代わりに、
playerの作業負荷で再生するファイル) を指定します。 -W application,--prog application- 特定の作業負荷で使用されるアプリケーション (たとえば、
readerの作業負荷向けの Firefox 以外のブラウザー) を指定します。
bltk man ページを参照してください。
/etc/bltk.conf 設定ファイルで指定されたディレクトリー (デフォルトでは ~/.bltk/workload.results.number/) に保存します。たとえば、~/.bltk/reader.results.002/ ディレクトリーには reader の作業負荷の 3 つ目のテスト結果が保持されます (1 つ目のテストは番号なし)。結果は複数のテキストファイルに分散されます。これらの結果を読み取りやすい形式にまとめるには、以下のコマンドを実行します。
bltk_report path_to_results_directoryReport という名前のテキストファイルに表示されます。代わりにターミナルエミュレーターで結果を閲覧するには、-o オプションを使用します。
bltk_report -o path_to_results_directory2.5. Tuned
udev デバイスマネージャーを使用して接続されたデバイスを監視し、システム設定の静的および動的チューニングの両方を可能にします。動的チューニングは実験的な機能で、Red Hat Enterprise Linux 7 のデフォルトでは無効になっています。
tuned-adm recommend コマンドを使用して、特定の製品に対する Red Hat の推奨最適プロファイルを確認することができます。推奨プロファイルがない場合は、balanced プロファイルが設定されます。
balanced はほとんどの負荷に適するプロファイルで、エネルギー消費、パフォーマンス、およびレイテンシーのバランスに優れます。balanced プロファイルにより、利用可能な最大限のコンピューティングリソースを使用して、素早くタスクを完了することができます。同じタスクを少ないコンピューティングリソースで長時間実施する場合に比べて、少ないエネルギーしか必要としないのが通常です。
powersave プロファイルを使用するとバッテリー寿命を延ばすことができます。エネルギー消費を抑える代わりに大きなレイテンシーが許容される場合、またはタスクを素早く完了する必要がない場合などが、その例として挙げられます。具体的には、IRC の使用、簡単な Web ページの閲覧、またはオーディオおよびビデオファイルの再生などです。
powertop2tuned の使用
powertop2tuned ユーティリティーにより、PowerTOP の提案からカスタム Tuned プロファイルを作成することができます。PowerTOP の詳細については、「PowerTOP」を参照してください。
powertop2tuned ユーティリティーをインストールするには、以下のコマンドを使用します。
#yum install tuned-utils
#powertop2tuned new_profile_name
powertop2tuned は現在選択されている Tuned プロファイルに基いて /etc/tuned/ ディレクトリーにプロファイルを作成します。安全上の理由から、初めは新しいプロファイルではすべての PowerTOP チューニングが無効になっています。チューニングを有効にするには、/etc/tuned/profile_name/tuned.conf ファイルでチューニングをアンコメントします。
--enable または -e オプションを使用して、PowerTOP の提案するほとんどのチューニングが有効な新しいプロファイルを生成することができます。USB 自動サスペンドなど問題となる可能性のある特定のチューニングは、デフォルトでは無効になっているので、手動でアンコメントする必要があります。
#tuned-adm profile new_profile_name
powertop2tuned がサポートする全オプションのリストを表示するには、以下のコマンドを使用します。
$powertop2tuned --help
2.6. UPower
upower コマンドと以下のオプションを使用します。
--enumerate,-e- システム上の電源デバイス用のオブジェクトパスを表示します。例えば以下のとおりです。
/org/freedesktop/UPower/devices/line_power_AC/org/freedesktop/UPower/devices/battery_BAT0 --dump,-d- システム上の全ての電源デバイス用のパラメータを表示します。
--wakeups,-w- システムの CPU のウェイクアップ を表示します。
--monitor,-m- AC 電源の接続や切断、あるいはバッテリーの低下などの電源デバイスの変化についてシステムを監視します。システムの監視を止めるには、Ctrl+C を押します。
--monitor-detail- AC 電源の接続や切断、あるいはバッテリーの低下などの電源デバイスの変化についてシステムを監視します。
--monitor-detailオプションでは、--monitorオプションよりも詳細を提供します。システムの監視を止めるには、Ctrl+C を押します。 --show-info object_path,-i object_path- 特定のオブジェクトパスに利用可能なすべての情報が表示されます。たとえば、オブジェクトパス
/org/freedesktop/UPower/devices/battery_BAT0で表されるシステムのバッテリーに関する情報を取得するには、以下のコマンドを実行します。upower -i /org/freedesktop/UPower/devices/battery_BAT0
2.7. GNOME の電源管理
2.8. 他の監査ツール
- vmstat
- vmstat はプロセス、メモリー、ページング、ブロック I/O、トラップ、および CPU 活動について詳細情報を提供します。システム全体で実行している動作やビジーな部分を詳しく見るために使用します。
- iostat
- iostat は vmstat と似ていますが、ブロックデバイスの I/O 専用です。詳細な出力と統計も提供します。
- blktrace
- blktrace は、非常に詳細に渡るブロック I/O のトレースプログラムです。情報をアプリケーションに関連した 1 つずつのブロックに分割します。diskdevstat と併せて使用すると大変役立ちます。
第3章 中核となるインフラストラクチャとメカニズム
重要
cpupower コマンドを使用する場合は、kernel-tools パッケージがインストールされていることを確認してください。
3.1. CPU のアイドル状態
- C0
- 稼働中または実行中の状態。この状態では、CPU は動作中であり、アイドル状態ではありません。
- C1, 停止
- プロセッサーが命令を実行していない状態ですが、一般的に電力が低い状態ではありません。CPU は実質的に遅延なく処理を継続できます。C 状態を提供するプロセッサーはすべて、この状態をサポートする必要があります。Pentium 4 プロセッサーは、実際には電力消費が低い状態の C1E と呼ばれる拡張 C1 状態をサポートします。
- C2, クロック停止
- このプロセッサーのクロックが停止している状態ですが、そのレジスターとキャッシュは完全な状態で保持されるため、クロックを再開させると直ちに処理を再開することができます。この状態はオプションです。
- C3, スリープ
- プロセッサーが実際にスリープ状態になり、キャッシュを更新する必要がない状態です。この状態からウェイクアップするには、C2 状態からのウェイクアップに比べ、かなり長い時間がかかります。この状態もオプションです。
cpupower idle-info3.2. CPUfreq
3.2.1. CPUfreq ドライバー
ACPI CPUfreq
Intel P-state
max_perf_pct: ドライバーから要求される最大の P 状態を制限します (利用可能なパフォーマンスのパーセンテージで定義)。利用可能な P 状態のパフォーマンスは、no_turbo 設定により低く抑えることができます (下記を参照)。min_perf_pct: ドライバーから要求される最小の P 状態を制限します (最大 (no-turbo) パフォーマンスレベルのパーセンテージで定義)。no_turbo: turbo 周波数範囲以下で P 状態を選択するようにドライバーを制限します。turbo_pct: turbo 範囲にあるハードウェアがサポートするトータルパフォーマンスのパーセンテージを表示します。turbo が無効になっているかどうかは、この数値に影響を与えません。num_pstates: ハードウェアがサポートする P 状態の数を表示します。turbo が無効になっているかどうかは、この数値に影響を与えません。
intel_pstate=disable
3.2.2. CPUfreq ガバナー
Performance ガバナーは、CPU が最高クロック周波数を使用するように強制します。この周波数は静的に設定され、変化しないため、このガバナーでは、節電する利点はありません。このガバナーは、何時間にも渡るような作業負荷が大きい時だけ、しかも CPU がアイドル状態になることがほとんどない (もしくはまったくならない) 時のみに適しています。
一方、Powersave ガバナーは、CPU が最低クロック周波数を使用するように強制します。この周波数は静的に設定され変化しないため、このガバナーでは最大の節電を実現しますが、CPU パフォーマンスが一番低く なってしまいます。
Ondemand ガバナーは動的なガバナーです。システム負荷が大きい時は、CPU は最高クロック周波数を実現し、システムがアイドル状態の時には、CPU は最低クロック周波数を実現します。これにより、システム負荷に対してシステムは電力消費量を適宜調節できますが、そうすることで 周波数変換の間の遅延 が発生してしまいます。そのため、システムがアイドル状態と高負荷の間で頻繁に替わりすぎると、遅延により Ondemand ガバナーが実現できるパフォーマンスおよび/または節電の利点が少なくなる恐れがあります。
Userspace ガバナーを使用すると、ユーザースペースプログラム (または、root で実行しているいずれのプロセス) が周波数を設定できます。Userspace ガバナーは、すべてのガバナーの中で最もカスタマイズ可能であり、設定によってはご使用のシステムでパフォーマンスと電力消費のバランスを最適化できます。
Ondemand ガバナーと同様に、Conservative ガバナーも使用量に応じてクロック周波数を調節します (Ondemand ガバナーと同様です)。ただし、Ondemand ガバナーがより積極的にクロック周波数を調節するのに対し (最高周波数から最低周波数、そして最高周波数に戻る)、Conservative ガバナーはもっとゆっくりと調節を行います。
注記
cron ジョブを使用してガバナーを有効にできます。これにより、1 日のある時間帯にあるガバナーを自動的に設定することができます。そのため、アイドル状態 (例えば終業後) の時には、低周波数のガバナーを指定し、高負荷となる時間帯には高周波数に戻るように設定できます。
3.2.3. CPUfreq のセットアップ
cpupower frequency-info --governorscpupower frequency-set --governor [governor]-c を使用します。たとえば、CPU 1〜3 および 5 の Userspace ガバナーを有効にするには、以下のコマンドを実行します。
cpupower -c 1-3,5 frequency-set --governor cpufreq_userspace3.2.4. CPUfreq ポリシーおよび速度のチューニング
cpupower frequency-info コマンドを使用して CPU 速度とポリシー情報を表示できます。さらに、cpupower frequency-set のオプションを使用して、各 CPU の速度をチューニングできます。
cpupower frequency-info には、以下のオプションを使用できます。
--freq: CPUfreq コアに基いて現在の CPU の速度を KHz 単位で表示します。--hwfreq: ハードウェアに基いて現在の CPU の速度を KHz 単位で表示します (root でのみ利用可能)。--driver: この CPU の周波数を設定するために使用する CPUfreq ドライバーを表示します。--governors: このカーネルで使用できる CPUfreq ガバナーを表示します。このファイルには表示されていない CPUfreq ガバナーを使用したい場合は、手順について「CPUfreq のセットアップ」を参照してください。--affected-cpus: 周波数調整ソフトウェアを必要とする CPU を一覧表示します。--policy: 現在の CPUfreq ポリシーの範囲 (KHz 単位) と現在アクティブなガバナーを表示します。--hwlimits: CPU に使用できる周波数 (KHz 単位) を一覧表示します。
cpupower frequency-set では、以下のオプションを使用することができます。
注記
/sys/devices/system/cpu/[cpuid]/cpufreq/ 内にあるチューニング可能値で確認できます。設定と値は、これらのチューニング可能値に書き込むことにより変更できます。たとえば、cpu0 の最小クロック速度を 360 KHz に設定する場合は、以下のコマンドを使用します。
echo 360000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
3.3. CPU 監視機能
cpupower-monitor の man ページを参照してください。
cpupower monitor コマンドとともに使用します。
-l: システムで使用できる全監視機能を一覧表示します。-m <monitor1>、<monitor2>: 特定の監視機能を表示します。その識別子は、-lを実行して確認できます。command: 特定コマンドに関するアイドル統計値と CPU 要求を表示します。
3.4. CPU 省電力ポリシー
cpupower set コマンドとともに使用します。
- --perf-bias <0-15>
- サポートされた Intel プロセッサーでソフトウェアがよりアクティブに最適なパフォーマンスと省電力とのバランスを決定できるようにします。このオプションは他の省電力ポリシーよりも優先されません。割り当てる値の範囲は 0〜15 です。ここで、0 は最適なパフォーマンスであり、15 は最適な電力効率です。デフォルトでは、このオプションはすべてのコアに適用されます。コア別に適用する場合は、
--cpu <cpulist>オプションを追加します。 - --sched-mc <0|1|2>
- 他の CPU パッケージが選ばれるまで、一つの CPU パッケージ内のコアに対するシステムプロセスによる電力使用を制限します。0 は制限なし、1 は最初に CPU パッケージを 1 つだけ採用、2 は 1 の内容に加えてタスクのウェイクアップを処理する場合にセミアイドル状態の CPU パッケージを優先します。
- --sched-smt <0|1|2>
- 他の コアが選ばれるまで、1 つの CPU コアの複数スレッドに対するシステムプロセスによる電力使用を制限します。0 は制限なし、1 は最初に CPU パッケージを 1 つだけ採用、2 は 1 の内容に加えてタスクのウェイクアップを処理する場合にセミアイドル状態の CPU パッケージを優先します。
3.5. サスペンドと復帰
3.6. 実行時デバイス電源管理
/sys/devices/device/power/ ディレクトリーになります。ここで、device は、特定のデバイスのディレクトリーのパスに置き換えます。
/sys/devices/system/cpu/power//sys/devices/device/power ディレクトリーには、以下の設定ファイルが含まれます。
control
control ファイルに属性の次の 2 つの値のいずれかが含まれます。
auto- すべてのデバイスのデフォルト値。ドライバーによって自動的な RDPM になる場合があります。
on- 実行時にドライバーがデバイスの電力状態を管理できないようにします。
autosuspend_delay_ms
/sys/devices/device/power/control ファイルの属性を on に設定するのと同じ効果があります。1000 よりも大きい値は最も近い秒に丸められます。
3.7. Active-State Power Management
- デフォルト
- システムのファームウェア (たとえば、BIOS) で指定されたデフォルト値に従って、PCIe リンクの電力状態を設定します。これは ASPM のデフォルト状態です。
- powersave
- パフォーマンスの低下に関係なく、できる限り電力を節約するように ASPM を設定します。
- performance
- PCIe リンクが最大パフォーマンスで稼働できるように ASPM を無効にします。
pcie_aspm カーネルパラメータで有効または無効にできます。pcie_aspm=off と指定すると、ASPM は無効になり、pcie_aspm=force と指定すると、ASPM は有効になります。ASPM に対応しないデバイス上でも使用できます。
/sys/module/pcie_aspm/parameters/policy で設定されますが、pcie_aspm.policy カーネルパラメーターを使って起動時に指定することも可能です。たとえば、pcie_aspm.policy=performance と指定用すると、ASPM パフォーマンスポリシーが設定されます。
警告
pcie_aspm=force が設定された場合、ASPM をサポートしないハードウェアでは、システムが反応しなくなることがあります。pcie_aspm=force を設定する前に、システム上のすべての PCIe ハードウェアが ASPM をサポートすることを確認してください。
3.8. Aggressive Link Power Management
このモードでは、ディスク上に I/O がない場合に、2 番目に電力が低い状態 (PARTIAL) にリンクが設定されます。このモードは、パフォーマンスへの影響を最小化するために、リンクの電力状態を切り替えることができるよう設計されています (たとえば、一時的に I/O が多くなるときや I/O がアイドル状態になるとき)。
medium_power モードでは、負荷に応じてリンクを PARTIAL の状態と最大電力 (「ACTIVE」) の状態の間で切り替えることができます。PARTIAL から SLUMBER に、そして再び PARTIAL にリンクを直接切り替えることはできません。このような場合は、どちらの電力状態も最初に ACTIVE 状態を経由せずに、他の状態に切り替わることはできません。
/sys/class/scsi_host/host*/link_power_management_policy ファイルが存在するかどうかを確認します。設定を変更するには、このセクションに記載された値をこのファイルに書き込むか、あるいはファイルを表示して現在の設定を確認します。
3.9. Relatime ドライブアクセス最適化
atime と呼ばれ、これを維持するにはストレージに常時書き込みをする動作が必要になります。これらの書き込みにより、ストレージデバイスとそのリンクに常に電源が投入され、ビジー状態になります。atime データを使用するアプリケーションは少ないため、このストレージデバイスの動作が電力を浪費していることになります。重要なことは、ストレージへの書き込みは、ファイルがストレージからではなくキャッシュから読み込まれた場合でも発生する点です。これまで、Linux カーネルでは mount 用の noatime オプションに対応してきたため、このオプションでマウントされたファイルシステムには atime データを書き込んでいませんでした。しかし、単純に atime データを使用しないことにも問題があります。一部のアプリケーションは atime データに依存しているため、これが利用できないと機能しないためです。
relatime に対応しています。Relatime では atime データを維持しますが、ファイルがアクセスされる度の書き込み動作はしません。このオプションを有効にすると、ファイルが変更された、つまり atime が更新された (mtime) 場合、またはファイルが最後にアクセスされてから一定以上の時間 (デフォルトでは 1 日) が経過している場合に限り、atime データがディスクに書き込まれます。
relatime が有効な状態ですべてのファイルシステムがマウントされるようになります。特定のファイルシステムに対してこのオプションを無効にしたい場合には、そのファイルシステムをマウントする際に norelatime オプションを使用します。
3.10. パワーキャッピング (Power Capping)
Dynamic Power Capping は、選ばれた ProLiant と BladeSystem のサーバーで利用できる機能であり、システム管理者が 1 つのサーバー、あるいはサーバーのグループの電力消費量を制限できるようにします。キャップとは、現時点の作業負荷に関係なく、サーバーが超過しない確実な上限のことです。キャップには、サーバーがその消費電力の上限に到達するまでは何の効果もありません。到達した時点で、管理プロセッサーは CPU P状態 とクロックスロットル (clock throttling) を調節して消費電力を制限します。
/dev/hpilo/dXccbN で管理プロセッサーにクエリできるようにします。カーネルには、パワーキャッピング機能をサポートするための hwmon sysfs インターフェースの拡張と、sysfs インターフェースを使用する ACPI 4.0 パワーメーター用の hwmon ドライバーが含まれています。これらの機能が一緒になって、オペレーティングシステムとユーザースペースのツールがパワーキャップ用に設定された値とシステムの現在の電力消費量を読み込めるようになります。
Intel Node Manager は、CPU パフォーマンス、ひいては電力消費量を制限するためにプロセッサーの P 状態と T 状態を使用して、システムにパワーキャップをかけます。電源管理ポリシーを設定することにより、管理者は、例えば夜間や週末などのシステムの負荷が低い時に電力消費が低くなるよう設定することができます。
3.11. 拡張グラフィックス電力管理
LVDS 低電圧差動信号 (Low-voltage differential signalling) とは、電子信号を銅線上で伝えるシステムです。このシステムが応用されている重要な例の1つは、ピクセル情報をノート PC の 液晶ディスプレイ (LCD) 画面に送信することです。すべてのディスプレイには リフレッシュレート があります。これはディスプレイがグラフィックコントローラから新しいデータを受け取り、画像を画面に再表示する頻度です。通常、画面は毎秒 60 回新しいデータを受信します (60 Hz の周波数)。画面とグラフィックコントローラが LVDS でリンクされている時は、LVDS システムはリフレッシュのたびに電力を使用します。アイドル状態の時、多くの LCD 画面のリフレッシュレートは、目立った変化なく 30 Hz まで低下することがあります (リフレッシュレートが低下すると特有のフリッカーが起こる ブラウン管 (CRT) モニターとは異なります)。Red Hat Enterprise Linux 7 のカーネルに組み込まれている Intel グラフィックスアダプタ用のドライバーは、自動的にこの ダウンクロック (downclocking) を実行し、画面がアイドル状態の時には約 0.5 W の節電をします。
SDRAM Synchronous dynamic random access memory: これは、グラフィックスアダプタのビデオメモリーに使用されます。毎秒何千回もリチャージされるため、個々のメモリーセルは保管されているデータを保持します。データはメモリーの内外へと移動するためそのデータを管理するその主要機能の他に、メモリーコントローラには通常これらのリフレッシュサイクルを開始する役割があります。一方、SDRAM には低電力の セルフリフレッシュ モードもあります。このモードでは、メモリーは内部タイマーを使用して、そのリフレッシュサイクルを生成します。これにより、現在メモリーに保存されているデータを危険にさらすことなく、システムはメモリーコントローラをシャットダウンできます。Red Hat Enterprise Linux 7 で使用されているカーネルは、アイドル状態の時に Intel グラフィックスアダプタのメモリーにセルフリフレッシュをさせることがあります。これにより約 0.8 W の節電ができます。
標準的なグラフィカルプロセッシングユニット (GPU) には、その内部回路の各種パーツを制御する内部クロックが含まれています。Red Hat Enterprise Linux 7 で使用されているカーネルは、Intel および ATI の GPU 内の内部クロックの一部の周波数を低くすることができます。GPU コンポーネントが所定時間内に実行するサイクル数を低減すると、それらが実行する必要がなかったサイクルで消費されていたであろう電力を節減します。GPU がアイドル状態の時には、カーネルは自動的にそうしたクロックの速度を遅くし、GPU の活動が増加すると速めます。GPU のクロックサイクルを低下させることで、最大で約 5 W の節電ができます。
Red Hat Enterprise Linux 7 の Intel と ATI グラフィックスドライバーは、アダプタにモニターが接続されていない時を検出できるため、GPU を完全にシャットダウンすることができます。この機能は、常時モニターを接続していないサーバーで特に重要です。
3.12. RFKill
/dev/rfkill にありますが、システムのすべての無線送信器の現在の状態が含まれています。各デバイスの現在の RFKill の状態は、sysfs に登録されています。また、RFKill は RFKill 対応のデバイス内の状態の変化について uevents を発行します。
rfkill list を使用すると、デバイスの一覧が取得できます。それぞれのデバイスにはそれに関連した 0 から始まるインデックス番号 があります。このインデックス番号を使用して rfkill に対してデバイスのブロックとブロック解除を指示します。例を示します。
rfkill block 0rfkill block wifirfkill block allrfkill block の代わりに rfkill unblock を実行します。rfkill がブロックできるデバイスカテゴリの全一覧を取得するには、rfkill help を実行してください。
第4章 使用例
4.1. 例: サーバー
ウェブサーバーにはネットワークとディスク I/O が必要です。外部の接続スピードによっては、100 Mbit/s で十分かも知れません。マシンがほとんど静的なページを使用する場合は、CPU のパフォーマンスはあまり重要ではないでしょう。以下のような電力管理の選択肢があります。
- tuned にはディスクまたはネットワークのプラグインなし。
- ALPM をオンにする
ondemandガバナーをオンにする- ネットワークカードは 100 Mbit/s に制限する
計算サーバーには主に CPU が必要です。以下のような電力管理の選択肢があります。
- ジョブとデータストレージが発生する場所に応じて、tuned のディスク、またはネットワークプラグイン。または バッチモードシステムには、完全にアクティブな tuned。
- 使用量によっては、
performanceガバナー。
メールサーバーには、多くの場合ディスク I/O と CPU が必要です。以下のような電力管理の選択肢があります。
ondemandガバナーはオン。CPU パフォーマンスの最後の数パーセントは重要でないためです。- tuned にはディスクまたはネットワークのプラグインなし。
- メールは内部で発生することが多く、1 Gbit/秒 か 10 Gbit/秒 のリンクから利用できるためネットワークスピードは制限しません。
ファイルサーバーの要件はメールサーバーの要件に似ています。しかし使用するプロトコル次第では、さらなる CPU パフォーマンスが必要になる可能性があります。一般的に Samba ベースのサーバーは、NFS よりも CPU を要求して、NFS は一般的に iSCSI よりも CPU を要求します。それでも、ondemand ガバナーを使用できるはずです。
ディレクトリーサーバーのディスク I/O の要件は、一般的に低いものです。十分な RAM がある場合は特にそうです。ネットワーク遅延は重要ですが、ネットワーク I/O はそれほどでもありません。リンクの速度が遅い遅延のネットワークのチューニングを考えられるかも知れませんが、これを特定のネットワークに注意深くテストするようにしてください。
4.2. 例: ノート PC
- システムの BIOS を使用しないすべてのハードウェアを無効にするように設定します。例えば、パラレルポートまたはシリアルポート、カードリーダー、Web カメラ、WiFi および Bluetooth などが可能です。
- スクリーンを見るために最高輝度が必要ない暗めの場所では、ディスプレイ輝度を低くします。そのためには、GNOME デスクトップでは、+ → と進みます。KDE デスクトップでは、+++ → と進みます。または、コマンドラインで gnome-power-manager か、xbacklight を実行するか、ノート PC でファンクションキーを使用します。
ondemandガバナーを使用します (Red Hat Enterprise Linux 7 ではデフォルトで有効です)。- AC97 オーディオ節電機能を有効にします (Red Hat Enterprise Linux 7 ではデフォルトで有効です)。
echo Y > /sys/module/snd_ac97_codec/parameters/power_save - USB 自動サスペンドを有効にします。
for i in /sys/bus/usb/devices/*/power/autosuspend; do echo 1 > $i; doneUSB 自動サスペンドはすべての USB デバイスで正常に機能するわけではありません。 - relatime を使用してファイルシステムをマウントします (Red Hat Enterprise Linux 7 ではデフォルトです)。
mount -o remount,relatime mountpoint - 画面の輝度を
50かそれ以下に下げます。例えば以下のとおりです。xbacklight -set 50 - スクリーンのアイドル状態に DPMS をアクティベートします。
xset +dpms; xset dpms 0 0 300 - Wi-Fi を非アクティブ化します。
echo 1 > /sys/bus/pci/devices/*/rf_kill
付録A 開発者へのヒント
- スレッドの使用。
- 不必要な CPU のウェイクアップとウェイクアップの非効率的な使用。ウェイクアップする必要がある場合は、すべての処理を一度にできるだけ迅速に実行します (すぐにアイドル状態になるように実行します)。
[f]sync()の不必要な使用。- 不必要なアクティブポーリングまたは短い通常のタイムアウトの使用 (代わりにイベントに反応する)。
- ウェイクアップの非効率的な使用。
- 非効率的なディスクアクセス。頻繁なディスクアクセスを回避するために大きなバッファを使用してください。一度に大きなブロックを書き込みます。
- タイマーの非効率的な使用。可能な場合は、アプリケーション群 (またはシステム群) でタイマーをグループ化します。
- 過度の I/O、電力消費、またはメモリー使用 (メモリーリークを含む)。
- 不必要な計算の実行。
A.1. スレッドの使用
Python は Global Lock Interpreter[1] を使用するため、スレッドは大規模な I/O 操作でのみ効果的です。Unladen-swallow[2] は、コードを最適化できる可能性がある Python の高速な実装です。
Perl のスレッドは、元々はフォークがないシステム (32 ビット Windows オペレーティングシステムのシステムなど) で実行するアプリケーション用に開発されました。Perl のスレッドでは、データはすべての単独スレッドに対してコピーされます (コピーオンライト)。ユーザーはデータ共有のレベルを定義できるため、データはデフォルトでは共有されません。データを共有するには、threads::shared モジュールを含める必要があります。ただし、データがコピーされるだけでなく (コピーオンライト)、モジュールによってデータの関連変数も作成されます (さらに時間がかかり、処理が遅くなります)[3]。
C のスレッドは同じメモリーを共有します。各スレッドは独自のスタックを持ち、カーネルは新しいファイル記述子を作成したり、新しいメモリースペースを割り当てたりする必要がありません。C はより多くのスレッドにより多くの CPU のサポートを実際に使用できます。したがって、スレッドのパフォーマンスを最大化するには、C や C++ などの低水準言語を使用します。スクリプト言語を使用する場合は、C バインディングを記述することを検討してください。プロファイラーを使用すると、適切に実行されていないコード部分を特定できます[4]。
A.2. ウェイクアップ
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/inotify.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int fd;
int wd;
int retval;
struct timeval tv;
fd = inotify_init();
/* checking modification of a file - writing into */
wd = inotify_add_watch(fd, "./myConfig", IN_MODIFY);
if (wd < 0) {
printf("inotify cannot be used\n");
/* switch back to previous checking */
}
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
tv.tv_sec = 5;
tv.tv_usec = 0;
retval = select(fd + 1, &rfds, NULL, NULL, &tv);
if (retval == -1)
perror("select()");
else if (retval) {
printf("file was modified\n");
}
else
printf("timeout\n");
return EXIT_SUCCESS;
}/proc/sys/fs/inotify/max_user_watches から取得できます。この数値を変更することは可能ですが、推薦されません。また、inotify が失敗すると、コードは別の確認方法にフォールバックする必要がありますが、これは通常ソースコードで #if #define を数多く使用することを意味します。
A.3. Fsync
Fsync は I/O コストが高い操作として知られていますが、実際にはそうでない場合もあります。
fsync を呼び出すときに、ファイルシステム設定 (主に data-ordered モードの ext3) が原因で、長い遅延が発生し、何も処理が行われませんでした。また、この場合は、同時に別のプロセスが大きなファイルをコピーしているときに、最大で 30 秒の時間がかかっていました。
fsync が全く使用されない別のケースでは、ext4 ファイルシステムへの切り替えで問題が発生していました。Ext3 は data-ordered モードに設定され、数秒毎にメモリーがフラッシュされ、その内容がディスクに保存されていました。ただし、ext4 と laptop_mode を使用する場合は、保存の間隔が長いため、システムの電源が予期せずにオフになったときにデータが消失することがありました。現在、ext4 にはパッチが適用されましたが、アプリケーションを慎重に設計し、適切に fsync を使用する必要があります。
/* open and read configuration file e.g. ./myconfig */
fd = open("./myconfig", O_RDONLY);
read(fd, myconfig_buf, sizeof(myconfig_buf));
close(fd);
...
fd = open("./myconfig", O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR);
write(fd, myconfig_buf, sizeof(myconfig_buf));
close(fd);/* open and read configuration file e.g. ./myconfig */
fd = open("./myconfig", O_RDONLY);
read(fd, myconfig_buf, sizeof(myconfig_buf));
close(fd);
...
fd = open("./myconfig.suffix", O_WRONLY | O_TRUNC | O_CREAT, S_IRUSR | S_IWUSR
write(fd, myconfig_buf, sizeof(myconfig_buf));
fsync(fd); /* paranoia - optional */
...
close(fd);
rename("./myconfig", "./myconfig~"); /* paranoia - optional */
rename("./myconfig.suffix", "./myconfig");付録B 改訂履歴
| 改訂履歴 | |||
|---|---|---|---|
| 改訂 2.2-6.1 | Sun Sep 24 2017 | ||
| |||
| 改訂 2.2-6 | Mon Jul 24 2017 | ||
| |||
| 改訂 2.2-5 | Tue Mar 21 2017 | ||
| |||
| 改訂 2.0-2 | Fri Oct 14 2016 | ||
| |||
| 改訂 2.0-1 | Wed 11 Nov 2015 | ||
| |||
| 改訂 1.0-9 | Tue Jun 9 2014 | ||
| |||
| 改訂 1-3 | Fri 19 Jun 2015 | ||
| |||
| 改訂 1-2 | Wed 18 Feb 2015 | ||
| |||
| 改訂 1-1 | Thu Dec 4 2014 | ||
| |||
| 改訂 0.9-1 | Fri May 9 2014 | ||
| |||
| 改訂 0.9-0 | Wed May 7 2014 | ||
| |||
| 改訂 0.1-1 | Thu Jan 17 2013 | ||
| |||
