freebsd:tuning_power_consumption

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
freebsd:tuning_power_consumption [2019-11-29 13:09]
Decomo
freebsd:tuning_power_consumption [2019-12-01 19:16] (現在)
Decomo
行 1: 行 1:
 ====== FreeBSD WikiのTuningPowerConsumptionの日本語訳 ====== ====== FreeBSD WikiのTuningPowerConsumptionの日本語訳 ======
 +
 +家鯖の消費電力を下げるべく情報を集めていたところ、FreeBSD Wikiの[[https://wiki.freebsd.org/TuningPowerConsumption|TuningPowerConsumption]]記事が非常に参考になったので日本語訳してみた。
  
 ===== 消費電力チューニング ===== ===== 消費電力チューニング =====
  
-Alexandar Motin 記す:+Alexandar Motin 記す
  
 FreeBSDでの消費電力削減に関して私の知るところをまとめ、FreeBSD 8.x/9.xで実装されたいくつかの新しい事柄を説明しようと思います。このストーリーの主人公は、C2D T7700 2.4GHz CPU、965GMチップセット、SATA HDDを搭載した私の12インチAcer TravelMate 6292ラップトップです。 FreeBSDでの消費電力削減に関して私の知るところをまとめ、FreeBSD 8.x/9.xで実装されたいくつかの新しい事柄を説明しようと思います。このストーリーの主人公は、C2D T7700 2.4GHz CPU、965GMチップセット、SATA HDDを搭載した私の12インチAcer TravelMate 6292ラップトップです。
行 10: 行 12:
  
  
-ここから順にみていきます+ここから順にみていきます: 
  
 ==== 1. CPU ==== ==== 1. CPU ====
  
-CPUはシステムで最も消費する部分です。 +CPUはシステムで最も電力を消費する部分です。 
-フル稼働下ではそれだけで40W以上の電力を消費しますが、実際のラップトップ利用最も重要なのはアイドル消費電力です。 +最大負荷時では、CPUだけで40W以上を消費するでしょうが、実際のラップトップ利用において最も重要なのはアイドル消費電力です。 
-Core2Duo T7700 CPUは2つのコアを持ち、2.4GHzで動し、2400200016001200800MHzの段階のPステートを使うEISTテクノロジーをサポートし、C1C2C3の待機Cステート加えスロットリングをサポートします。 +Core2Duo T7700 CPUは2つのコアを持ち、2.4GHzで動し、2400/2000/1600/1200/800MHzのPステートからなるEISTテクノロジに対応し、C1/C2/C3の待機Cステート加えスロットリングをサポートします。 
-ではどうやってそれを使のでしょうか:+ではどのよそれを使えばいいのでしょうか
  
 === Pステートとスロットリング === === Pステートとスロットリング ===
  
-powerdを有効にするとCPU負荷に応じCPU周波数/電圧を効率的制御出来るうになます。 +''powerd(8)''を有効にシステム負荷に応じCPU周波数の調整により消費電力を抑えます。
-最近のシステムではpowerdがそれらを完全に透過的に扱うことが可能です。 +
-デフォルトでは、周波数はEISTとスロットリングテクノロジーの絡み合いを通じて制御されます。 +
-前者はコア周波数と電圧の両方を制御し、後者はコア周波数のみを制御します。 +
-両テクノロジーは確かな省電力効果生みます。 +
-しかし、スロットリングの効果は小さく、またC2ステートを使うことで完全に隠れてしまいます。そんなわけで、スロットリング制御を無効化するために''/boot/loader.conf''への設定追加をオススメします:+
  
-<code conf>+r265329以前では、周波数はEISTとスロットリング技術を混合して制御されていました。 
 +前者がコア周波数と電圧の両方を制御し、後者はコア周波数のみを制御します。 
 +両技術は電力削減に良い影響をもたらしますが、スロットリングの効果は小さく、C2ステートを使うことで完全に隠れてしまうでしょう。 
 +そんなわけで、''/boot/loader.conf''に設定を追加しスロットリング制御を無効化することをお勧めします: 
 + 
 +<conf code>
 hint.p4tcc.0.disabled=1 hint.p4tcc.0.disabled=1
 hint.acpi_throttle.0.disabled=1 hint.acpi_throttle.0.disabled=1
 </code> </code>
  
-''sysctl''はEIST周波数だけ報告します:+れ以''sysctl''はEIST周波数のみ表示します:
  
 <code> <code>
行 39: 行 42:
 </code> </code>
  
-Intel Turbo Boost機能の制御のため、ACPIは公称クロック周波数より1MHzい追加の性能レベルを報告するかもしれません。 +新規インストールにおいて、ACPIとP4TCCスロットリングは、今やデフォルトで無効になっています。 
-例えばCore i7-870では下のようなレポートをることができるでしょう:+ 
 +Intel TurboBoost動作の制御のため、ACPIは公称周波数より1MHzい追加の性能レベルを表示するかもしれません。 
 +例えばCore i7-870では下のようるでしょう: 
  
 <code> <code>
行 46: 行 52:
 </code> </code>
  
-ここで2933は2.93GHzを意味しますが、2934はシチュエーションに依存し3.2~3.6GHzをします。+値の2933は2.93GHzを意味しますが、2934は状況に依存し3.2~3.6GHzを意味します。 
 + 
 +私のケースでは、周波数/電圧制御により約5Wのアイドル電力を削減しました
  
-私のケースでは、周波数/電圧制御はアイドル電力を約5W節約します。 
  
 === Cステート === === Cステート ===
  
-C1は非アクィブの間、CPUコアのつかの部分のクロックを止ます。 +C1ートはCPUが活動していない間、コアのいくつかの部分のクロックをます。 
-これは安全で安上がりであり長いことCPUサポートされてした。 +これは安全で、性能へのインパクトも少なく、昔からCPUサポートされて。 
-システムは標準でC1ステートを使用します。+システムは標準でC1ステートを使ます。
  
-C2は待機時に全コアクロックの停止をCPU許可します。 +C2ステートは待機時にCPUの全コアクロックの停止を可能にします。 
-これもまた安ですが、使用にACPI-チップセット-CPUの正確な協調動作が求められます。 +これもまた安上がりですが、用にあたりACPI/チップセット/CPUの正確な協調動作が求められます。 
-C2ステートの使用は''/etc/rc.conf''に追加することで有効にできます:+C2ステートの有効化は''/etc/rc.conf''以下の記述を追加ます:
  
-<code>+<code conf>
 performance_cx_lowest="Cmax" performance_cx_lowest="Cmax"
 economy_cx_lowest="Cmax" economy_cx_lowest="Cmax"
 </code> </code>
  
-''powerd''が使われている時は、このステートの影響はそれほど大きくありませんが、依然として注目に値します。+''powerd''の利用時は、ステートの影響はそれほど大きくありませんが、依然として注目に値します。
  
-C3ステートは、CPUての内部クロックを完全に停止、電圧を下げ、システムバスからの切り離しを可します。 +C3ステートは、CPUの完内部クロック停止、電圧の削減そしてシステムバスからの切り離しを可能にします。 
-このステートは更なる省エネ効果をもたらしま、安はなくトレードオフを必要とします。 +このステートは更なる省エネ効果をもたらすものの、安上がりではなくトレードオフが求められます。 
-C3ステートでCPUが完全に止まると同時に、FreeBSDがSMP環境でイベントタイマーとして使用する各CPUコア内のローカルAPICタイマーは機能しなくなります。 +C3ステートでCPUが完全に止まるや否や、FreeBSDがSMP環境でイベントとして用する各CPUコア内のローカルAPICタイマーは機能しなくなります。システムタイムがまり、スケジューリングを破壊し、これはシステムを死へと誘います。 
-それはシステムタイマーを、スケジューリングを破壊し、システムを死へと誘います。 +この問題に対する唯一の解決策は、いくつかの外部タイマを使うです。
-この問題に対する唯一の解決策はつかの外部タイマを使うことです。+
  
-C1Eとして知られる似ステートもあります。 +C1Eとして知られる似ステートもあります。 
-これはCステート対応のないOSで、モダンなCPUがより上手く動くための次善策です。 +これは、現代的なCPUとCステート対応のOSがよりく動くための次善策です。 
-BIOSで有効にすると、OSによってC1ステート要求された際、CPUが幾つかのより深いCステートに入る可能にします。+BIOSで有効にすると、OSからC1ステート要求された際、CPUより深いCステートに入ようになります。 
 + 
 +典型的にAMD CPUとBIOSは実際のCステートOS見せませんが、かわりにC1Eメカニズムを用いるのみです。 
 +例えば次のように働くでょう:OSがいくつかのCPUコアにC1を要求するとコアはC2に入りますが、CPUパッケージの全コアがC2である時は、パッケージの全てがC3になるという具合です。 
 +あいにく、この働きはOSから完全に隠蔽されています。
  
-通常、AMDのCPUとBIOSは実際のCステートをOSに見せませんが、代わりにC1Eメカニズムだけを使います。 
-例えば、それはこのように動くかもしれません:OSが幾つかのCPUコアにC1を要求した時、コアはC2に入りますが、幾つかのCPUパッケージの全コアがC2の時は、そのパッケージ全体がC3に入ります。 
-あいにく、この動きはOSから完全に隠蔽されています。 
  
 == FreeBSD 8.x == == FreeBSD 8.x ==
  
-当初、SMP時代前、FreeBSDはi8254(周波数用)とRTC(ステー用)チップセットタイマを使いました。 +もともと、SMP時代前、FreeBSDはi8254(周波数用)とRTC(ステータス用)チップセットタイマを使っていました。 
-FreeBSD 8.2れらをSMPシステム用に蘇らせま。 +FreeBSD 8.xれらをSMPシステム用に復活させました。 
-れらを使うために、''/boot/loader.conf''を編集しローカルAPICタイマを無効化できます:+れらを使うために、''/boot/loader.conf''ローカルAPICタイマを無効化することができます:
  
-<code>+<code conf>
 hint.apic.0.clock=0 hint.apic.0.clock=0
 </code> </code>
  
-同様に、C3における電圧昇降のために、CPUは時間を必要とします(私のシステムでは57us)。 +C3電圧昇降にもちろんCPUは時間を必要とします(私のシステムでは57マイクロ秒)。 
-これはシステムがしばしば目覚める場合、C3ステート効率的に利用されない事を意味します。 +これはつまり、頻繁にアクティブになるシステムにおいて、C3ステート効率的に利用されないというす。 
-非アクティブ期間を増加させるには、''loader.conf''に設定を追加ることで割り込みレートを可能な限り削減するべきです:+非アクティブ期間を増ため、可能な限り割り込みレートを下げるべきです。''loader.conf''に以下を追加します:
  
-<code>+<code conf>
 kern.hz=100 kern.hz=100
 </code> </code>
  
-これによりシステム応答時間がかに増加するかもしれませんが、ラップトップにとって要なことではありません。 +システム応答時間がわずかに増るかもしれませんが、ラップトップでは大事ではありません。 
-別の新規オプションを追加することで、RTCの代わりに静的コレクション用途のi8254タイマを用いて、スケジューリング精度のコストよる1コア秒間128回の追加割込みをともできるでょう+同様に、RTCクロックの代わりに静的コレクション用途のi8254タイマを用いて、スケジューリング精度に必要な1コアあたり秒間128回の追加割込みを避るとよいかもしれませんそのためには別の新規オプションを追加します:
  
-<code>+<code conf>
 hint.atrtc.0.clock=0 hint.atrtc.0.clock=0
 </code> </code>
  
-結果として、システムはコア毎に100割り込みを持つだけとなり、CPUは効率C3を使っています:+結果として、システムはコアあたり100回の割り込みで済み、CPUは効率的にC3を使っています:
  
 <code> <code>
行 118: 行 125:
 </code> </code>
  
-的なC3ステート使用の結果、C2+powerdと比較して約2Wの削減です。+的なC3使用の結果、C2+powerdと比て約2Wの削減です。 
 + 
 +AMD CPUにおいてC1Eステートへの突入は、予期せぬ制御不能なC3ステートへ突入しているかもしれず、ローカルAPICタイマーの停止を引き起こす可能性があるため、FreeBSD 8.xはC1E機能を完全にブロックします。
  
-AMD CPUにおいてC1Eステートへの突入は、予測不能で制御不能なC3ステートへの落下を引き起こし、ひいてはローカルAPICタイマの停止に繋がる可能性があるため、FreeBSD 8.xではC1E機能を完全にブロックします。 
  
 == FreeBSD 9.x == == FreeBSD 9.x ==
  
-FreeBSD 9.xは新しいイベントタイマーサブシステム''eventtimers(4)''持ち、現代的なチップセットの殆どに存在しCPU電源管理に左右されない、HPETを含む更なる種類のタイマーハードウェアのサポートを可能にします。 +FreeBSD 9.xは新イベントタイマーサブシステム''eventtimers(4)''含みます。これは殆どの現代的なチップセットに存在しCPU電源管理のための不変のHPETを含む、より多くの種類のタイマーハードウェアに対応ています。 
-システムは最適と思われるタイマーを自動的に選択しますが、''sysctl''を通してタイマー確認動的変更することも可能です。+システムは最適と思われるタイマーを自動的に選択しますが、''sysctl''を通してタイマー確認動的変更可能です。
  
-また''eventtimers(4)''はワンショットタイマー操作モード対応を追加し、それは何か行う事がある時だけ割り込みを生成します。 +また''eventtimers(4)''、何かする必要が出た時にだけ割り込みを生成する、ワンショットタイマー制御モード対応します。 
-これにより''kern.hz''を減らさずに済み、マルチコアシステムでさえアイドル時の合計割込み数がたった50~100回で済みます。 +これにより''kern.hz''変数値を減らす必要がなくなり、マルチコアシステムでさえアイドル時の秒間合計割込み数がたった50~100回程度になります。 
-それでもなお''kern.hz''の削減は、いくつかの電源効率を考ずに作られたアプリケーションに対して有効です。+それでもなお''kern.hz''の削減は、いくつかの電源効率を考慮せずに作られたアプリケーションに対して有効です。
  
-FreeBSD 9.x adds check whether it safe to use specific C-state with present event timer and may automatically block C2/C3 states, making it mostly safe.  +FreeBSD 9.xでは具体的なCステートと現在のイベントタイマが安全に使えるかどうかのチェックが追加され、場合によってはより安全となるようC2/C3が自動的にブロックされます。 
-れでなおある種作業負荷において性能低下の原因となるため、Cステートの使用は今も標準では有効になっておらず、手動で有効にしなければなりません。 +うはいっても、いくつかワークロードにおいて性能低下の可能性があるため、Cステートの用は現在デフォルトでは有効になっておらず、手動で有効にしなければなりません。 
-と同時に新しいCPUではより深いCステート有効はTurboBoostテクノロジーの利用を可能し、これによりシングルスレッドアプリケーション性能が増加るでしょう+それと同時に、より新しいCPUにおいて、深いCステート有効にすることはTurboBoost技術の利用を可能し、これシングルスレッドアプリケーション性能向上につなります。
  
-AMD CPUでは、FreeBSD 9.xはローカルAPICタイマが使われている時に限りC1Eをブロックします。 +AMD CPUの場合、FreeBSD 9.xはローカルAPICタイマが使われている場合のみC1Eステートをブロックします。 
-もし起動時からずっとそのローカルAPICタイマが使われていた場合、次再起動までC1Eはブロックされます。 +起動の時点でローカルAPICタイマが使われていた場合、次再起動までC1Eはブロックされるでしょう。 
-C1E動作を許可するために、強制的にその他のタイマーを使うよいかもしれません。+C1E動作を許可するに、他のタイマ使われるよ強制する必要あるかもしれません。
  
-==== 2. 画面 / ビデオカード ====+==== 2. 画面/ビデオ ====
  
-画面のバックライトはくの電力を消費する可能性があります。+画面のバックライトは、そこそこ電気を食います。 
 +私のラップトップでは、明るさによって最小1.5W~最大4Wでした。 
 +したがって、明るさを(ハード的またはソフト的に)制御する方法を見つけ、状況に応じて最小限のレベルに合わせるのが良いでしょう。 
 +私の場合、それはハードウェアのボタンで制御されます。 
 +他のいつかのラップトップでは、明るさ制御を''acpi_video(4)''でサポートされる''sysctl''の''hw.acpi.video.lcd0.brightness''を通して制御できます。 
 +グラフィックチップは使うドライバやその設定に応じて、著しい量の電力を消費する可能性があります。
  
-私のラップトップでは最低輝度の1.5Wから最大輝度の4Wでした。 
-従って、(ハードウェアやソフトウェアで)輝度を制御する方法を見つけ、状況に応じた最低輝度レベルの調整を行うべきです。 
-私の場合、ハードウェアのボタンで制御しました。 
-''acpi_video(4)''がサポートする''sysctl''の''hw.acpi.video.lcd0.brightness''経由で制御できるラップトップもあります。 
-グラフィックチップはかなりの量の電力を消費する可能性があり、それは使用するドライバとその設定によって決まるかもしれません。 
  
-=== Intel GPUs ===+=== Intel GPU ===
  
-SandyBridge/IvyBridge CPUを持つラップトップにいて、新しいKMSースの"intel"ドライバを使うグラフィック、その"vesa"ドライバと比較し3Wの消費電力増加を招きます。 +SandyBridge/IvyBridge CPUラップトップのグラフィックスいて、新しいKMSースの"intel"ドライバは"vesa"ドライバと比て消費電力が3W増加するかもしれません。 
-''/boot/loader.conf''の行を追加して下さい+''/boot/loader.conf''以下の行を追加します
  
 <code conf> <code conf>
行 158: 行 166:
 </code> </code>
  
-GPUの電力節約待機ステートの使用を有効し、消費電力を削減します。+電力を抑えるGPUの待機ステートの使用を有効し、消費電力を削減します。 
 + 
 +<note warning>このヒントは最近のシステムには時代遅れかもしれません。''sysctl -d -a | grep rc6''を実行し、変数名が変わってないか確認してください。</note> 
 + 
 +参考: 
 +  * [[https://lists.freebsd.org/pipermail/freebsd-x11/2015-February/016066.html|Intel i915 support for RC6 (freebsd-x11 mailing list archives, 2015.2.6)]] 
 +  * [[https://github.com/FreeBSDDesktop/kms-drm|https://github.com/FreeBSDDesktop/kms-drm]] 
 +    * ''i915_params.c''を探してください
  
 === NVIDIA Optimus === === NVIDIA Optimus ===
  
-If you have a Laptop with an NVIDIA Optimus GPU where you cannot switch off either GPU off in the Laptop'BIOS, there is a handy script that will probe all known ACPI calls used to disable the dedicated NVIDIA GPU:+NVIDIA Optimus対応GPU搭載のラップトップを持っており、BIOSでGPUオフができなければ、単体NVIDIA GPUの無効化に使われる全ての基地のACPIコールを調査するお手製スクリプトがあります:
  
 +<code>
 % fetch https://people.freebsd.org/~xmj/turn_off_gpu.sh % fetch https://people.freebsd.org/~xmj/turn_off_gpu.sh
 % make -C /usr/ports/sysutils/acpi_call install clean % make -C /usr/ports/sysutils/acpi_call install clean
 % vim turn_off_gpu.sh  # read it before executing! % vim turn_off_gpu.sh  # read it before executing!
 % sh turn_off_gpu.sh   # as root user % sh turn_off_gpu.sh   # as root user
 +</code>
  
-Once successful, it will store the succeeded call in+成功したACPIコールは、以下に格納されます。
  
 +<code>
 /root/.gpu_method /root/.gpu_method
 +</code>
 +
 +そして後続の処理で使用されます。
 +ASUSのウルトラブックにおいて、これは6~8Wを節約し、バッテリー駆動時間を少なくとも3時間延ばします。
 +起動時にGPUを無効化するために、''rc.local''あるいは他のカスタムrc.dスクリプトに入れることができます。
 +上述のIntel GPUセクションに加えて''/boot/loader.conf''で利用することもできます。
  
-and use it on subsequent tries. On an ASUS UltraBook, this saves about 6-8W and raises battery lifetime by a third at least. It can be put into rc.local or other custom rc.d scripts to disable the GPU on boot. It can be used in addition to the /boot/loader.conf line mentioned above in the Intel GPU section. 
  
 ==== 3. メモリ ==== ==== 3. メモリ ====
  
-このラップトップは2枚の1GB DDR2-667 SODIMMメモリモジュールが取り付けられています。 +このラップトップは2枚の1GB DDR2-667 SODIMMメモリモジュールが組み込まれています。 
-そのうち1枚を外すと約1Wの節、2枚の1GBモジュールを1枚の2GBモジュールに置き換えると0.5Wの節です。+そのうち1枚を取るこ約1Wの節、2枚の1GBモジュールを1枚の2GBモジュールに置き換えるでも約0.5Wの節です。
  
-==== 4. PCIデバイス ==== 
  
-PCIバスはデバイス電力を制御する仕組みを提供します。 +==== 4. PCIデバイス ====  
-えば、私はFireWireコントローラは全く使用せず、殆どの時間におEHCI USBコントローラも同様です。 + 
-れらを無効する3Wの電が可能です。 +PCIバスはデバイス源管理手法を提供します。 
-不要な全てのPCIデバイスの無効化に、それらのドライバを抜いてカーネルをビルドしなければなりません。そして''loader.conf''に追加します:+たとえば、私は全く使わないFireWireコントローラ殆ど使うことがないEHCI USBコントローラを持っています。 
 +れらを無効することで3Wの電力削減ができます。 
 +全ての不要なPCIデバイスの無効化のために、それらのドライバを外したカーネルをビルドし''loader.conf''以下の行を追加するべきです:
  
 <code conf> <code conf>
行 191: 行 215:
 </code> </code>
  
-デバイス再有効ためにければならない事は、それらのドライバをモジュールとしてただ読み込むだけです。 +デバイス有効化するために必要ことは、それらのドライバをモジュールとして単に読み込むだけです。 
-8.xの新しいEHCI USBドライバは以前のものより少ない電力を消費します。+8.xの新しいEHCI USBドライバは以前のものよりも消費電力が少なくなっています。
  
-==== 5. 無線 ==== 
  
-WiFiとBluetoothのアダプタは、使用時(当方の''iwm(4)''のWiFiがつながっている時は最大2W)ないし有効にしただけ(0.5W)で有意に電力を消費します。+==== 5無線 ==== 
  
-いくつかのWiFiアダプタ(当方の''iwm(4)''のよう)は、未使用時無線回路を無効にするとった、省電力モードに対応します。 +WiFiとBluetoothアダプタは、使用時場合''iwn(4)'' WiFiが接続されている時で最大2W)いし単効にしただけ(0.5W)でも無視できない電力を消費します
-これ有効にするには、以下のオプションを''ifconfig''インタフェースに設定します+
  
-<code>+ある種のWiFiアダプタ(私の''iwm(4)''のように)は省エネモードに対応し、非アクティブ時に無線通信を停止します。 
 +これは 
 +<code conf>
 powersave powersave
 </code> </code>
 +オプションを''ifconfig''インタフェースを追加することで有効になります。
 +わずかな接続レイテンシの増加と引き換えに、大幅なWiFi消費電力を削減するでしょう。
  
-この有意義なWiFi消費電力の削減は、リンク遅延の若干の増加と引き換えに行われる可能性があります。 
  
-==== 6. HDAモデム ====+==== 6. HDAモデム ==== 
  
-私は驚いたのですが、内蔵HDAモデムは使用時でさえ約1Wの電力を消費していました。 +私は驚いたのですが、内蔵HDAモデムは使用していなくとも約1Wの電力を消費していました。 
-私は最も過激な解決策を用いました─物理的にソケットから外したのです。 +私は最も過激な解決策、すなわちソケットから物理的に取りす選択をしました。 
-その場所にあたケース表面温度が以前より下がりました。+モデムが場所のケース表面温度下がりました。
  
-==== 7. HDAサウンド ====+==== 7. HDAサウンド ==== 
  
-サウンド生成割り込み数を減らすため、私は''loader.conf''に追加しました:+サウンド生成する割り込み数を減らすため、''loader.conf''以下を追加しました:
  
 <code conf> <code conf>
行 221: 行 246:
 </code> </code>
  
-2012-03-10以前のFreeBSD 9-STABLEでは、最大バッファサイズを増やすも有益かもしれません:+2012-03-10のFreeBSD 9-STABLE以前では、最大バッファサイズを増やすことも有益かもしれません:
  
 <code conf> <code conf>
行 228: 行 253:
 </code> </code>
  
-==== 8. HDD ====+==== 8. HDD ==== 
  
-First common recommendation is use tmpfs for temporary files. RAM is cheap, fast and anyway with you. Also you may try to setup automatic idle drive spin-down, but if it is the only system drive you should be careful, as every spin-up reduces drive's life time. For several months (until I have bought SATA SSD) I have successfully used SDHC card in built-in PCI sdhci card reader as main file system. On random read requests it is much faster then HDD, but it is very slow on random write. Same time it consumes almost nothing. USB drives could also be used, but effect is much less as EHCI USB controller consumes much power. Spinning-down my 2.5" Hitachi SATA HDD saves about 1W of power. Removing it completely saves 2W.+まず、よくある推奨方法は一時ファイル用に''tmpfs''を使う事です。 
 +RAMは消費電力への影響が少なく、速くanyway with you。 
 +待機ドライブの自動スピンダウン設定を試したくなるかもしれませんが、システムドライブしかないのであれば注意すべきです。スピンアップはドライブの寿命を縮めます。 
 +SATA SSDを買うまでの)数ヵ月間、私は内蔵のPCI ''sdhci''カードリーダをメインファイルシステムとして使う事に成功しました。 
 +ランダムリード要求についてはHDDより高速ですが、ランダムライトは非常に低速です。 
 +加えて、SDカードは殆ど電力を食いません。 
 +USBフラッシュドライブを使う事も可能ですが、EHCI USBコントローラの消費電力に比べれば効果は限定的です。 
 +私の2.5インチ日立製SATA HDDをスピンダウンすると、約1Wの削減です。 
 +完全に取り外すと2Wの削減です。
  
-==== 9. SATA ==== 
  
 +==== 9. SATA ==== 
  
-Comparing to PATASATA interface uses differential signaling for data transfer. To work properly it has to transmit pseudo-random scrambled sequence even when idle. As you understand, that requires power. But SATA implements two power saving modes: PARTIAL and SLUMBER. These modes could be activated by either host or device if both sides support them. PARTIAL mode just stops scrambling, but keeps neutral link state, resume time is 50-100us. SLUMBER mode powers down interface completely, but respective resume time is 3-10ms.+PATAと比べると、SATAインタフェースはデータ転送に差動シグナルを用います。 
 +正常動作のため、アイドル時でも疑似的なランダムスクランブルシーケンスを転送しなければなりません。 
 +お察しの通り、これは電力を要求します。 
 +しかしSATAは2つの省エネモードを実装しています:PARTIALSLUMBERです。 
 +これらモードは、ホストとデバイの両方が対応していれば、どちらからでも有効にできます。 
 +PARTIALモードはスクランブル化を止めるだけで、ニュートラルなリンク状態を保ち、復帰時間は50~100マイクロ秒です。 
 +SLUMBERモードはインタフェースの電源を完全に落とし、各復帰時間は3~10ミリ秒です。
  
-The ata(4) driver has support for the SATA power management. There are hint.ata.X.pm_level loader tunables can be used to control it. Setting it to allows drive itself to initiate power saving, when it wish. Values and make AHCI-compatible controller to initiate PARTIAL and SLUMBER transitions after every command completion. New ahci(4) driver also has hint.ahcich.X.pm_level tunable. It also support modes and for minimal performance degradation. Note that SATA power saving complicates drive hot-swap, as controller may be unable to detect drive presence when link is powered-down.+''ata(4)''ドライバはSATA電源管理に対応しています。 
 +''hint.ata.X.pm_level''チューニング変数で制御することができます。 
 +1にするとドライブ自身の省エネ状態が開始されます。 
 +23で、AHCI互換コントローラが毎コマンド完了後にPARTIAL/SLUMBERへの遷移を許可します。 
 +新しい''ahci(4)''ドライバは''hint.ahcich.X.pm_level''チューニング変数も持っています。 
 +これは45のモードもサポートし、性能劣化を最小化するモードです。 
 +SATA省エネモードはドライブのホットスワップを困難にすることに留意してください。なぜなら、リンクの電源が落ちている時、コントローラはドライブの存在を検出することが不可能だろうからです。
  
-In my case PARTIAL mode saves 0.5W and SLUMBER 0.8W of power.+私の場合、PARTIALモードは0.5WSLUMBER0.8Wの削減です。
  
-==== 10. USB ====+==== 10. USB ==== 
  
 +以下のコマンドを実行することで、USBデバイスは個々に省エネモードの切り替えができます:
  
-USB devices can individually be switched to and from power save mode by running the following commands: +<code> 
- +このコマンドはデータトラフィックがない間のUSBデバイスの自動サスペンドを有効にします
-This command will enable automatic suspend of the USB device when no data traffic is pending.+
 usbconfig -d X.Y power_save usbconfig -d X.Y power_save
 +</code>
  
-This command will disable USB power save for the given device.+<code> 
 +このコマンドは与USBデバイスの省エネモードを無効にします
 usbconfig -d X.Y power_on usbconfig -d X.Y power_on
 +</code>
  
-The default for all devices except USB HUBs is power on. You should check the configuration descriptor of your device, that the "bmAttributes" field indicates that the device supports remote wakeup before enabling power save on a random USB device. It is not recommended to set the system timer tick rate below 250 HZ and enable USB power save, due to some USB suspend and resume delays which must comply to the USB specification. The power save feature also applies in the same way to USB device/gadget mode.+USBハブを除く全てのデバイスのデフォルト値は"power on"です。 
 +USBデバイスの省エネモードを有効にする前に、デバイスのコンフィギュレーションでスクリプタ、すなわち"bmAttributes"フィールドがデバイスが遠隔起動に対応しているかを確認すべきです。 
 +USBのサスペンド/レジューム遅延を規格に適合させるため、システムタイマーのティック間隔が250Hz未満でUSB省エネモードを有効にするのは非推奨です。 
 +省エネ機能は同様にUSBデバイス/ガジェットモードにも適用可能です。
  
-==== 結果==== 
  
-So what have I got? To monitor real system power consumption I am using information provided by ACPI battery via acpiconf -i0 command:+==== 結果 ====
  
-Original system:+私は何を得たでしょうか? 
 +実際のシステム消費電力をモニタするため、''acpiconf -i0''コマンドでACPIバッテリが提供する情報を見てみましょう:
  
 +元のシステム:
 +<code>
 Design capacity:        4800 mAh Design capacity:        4800 mAh
 Last full capacity:     4190 mAh Last full capacity:     4190 mAh
行 277: 行 330:
 Present rate:           1621 mA Present rate:           1621 mA
 Voltage:                12033 mV Voltage:                12033 mV
 +</code>
  
-Tuned system: +チューニングしたシステム: 
 +<code>
 %acpiconf -i0 %acpiconf -i0
 Design capacity:        4800 mAh Design capacity:        4800 mAh
行 298: 行 352:
 Present rate:           826 mA Present rate:           826 mA
 Voltage:                12231 mV Voltage:                12231 mV
 +</code>
  
-So I have really doubled my on-battery time by this tuning - 4:47 hours instead of 2:24 with default settings. Cooling fan, previously running all the time, now idle most of time, when system is idle. Preinstalled vendor-tuned Windows XP on the same system, provides maximum 3:20 hours.+このチューニングにより、なんとバッテリー駆動時間が2倍、デフォルト設定の2時間24分から4時間47分になりました。 
 +冷却ファンは以前は常に動いていましたが、今ではシステムがアイドル時は殆ど待機状態です、 
 +同じシステムのメーカーチューニングされたプリインストールのWindows XPでは、最大3時間20分ということでした。
  
 -- Alexander Motin  -- Alexander Motin 
 +
 +===== 翻訳履歴 =====
 +
 +  * 2019-12-01 [[https://wiki.freebsd.org/action/recall/TuningPowerConsumption?action=recall&rev=29|原文Rev.#29]]で翻訳しなおし
 +  * 2015-03-23 翻訳開始
 +
  • freebsd/tuning_power_consumption.1575000569.txt.gz
  • 最終更新: 2019-11-29 13:09
  • by Decomo