ソフトウェアのエネルギー使用量を測る: 実践ガイド
ソフトウェアのエネルギーフットプリントを見積もる効果的な方法を学ぼう。
― 1 分で読む
目次
ソフトウェア自体は直接的にエネルギーを使わないんだ。代わりに、スマホやコンピュータ、サーバーみたいなデバイスで動いてて、これらのデバイスが動くときにエネルギーを使う。ソフトウェアを動かしてるときに消費されるエネルギーは、ソフトウェアのエネルギーフットプリントとかエネルギー使用量って呼ばれるんだ。このエネルギーフットプリントについて話すには、デバイスのエネルギー使用に影響を与える他の要因が制御されてるか管理されてるって仮定しないといけない。
ソフトウェアのエネルギーフットプリントを測ることは基本的なアクティビティなんだ。タスクが終わるのにどれくらい時間がかかるか測れるように、エネルギーの使い方も測れるんだ。例えば、あるソフトウェアシステムが1時間でモバイルデバイスのバッテリーの5%以上使っちゃいけないって分かってたら、その制限内に収まってるかを追跡できる。
このガイドでは、具体的なツールよりも、ソフトウェアのエネルギーフットプリントを推定するための一般的なアイデアや方法に焦点を当ててる。ここでは、エネルギー測定を理解しやすくするための重要な概念を分解するよ。
測定とモデリング
ソフトウェアのエネルギーフットプリントを推定するには、主に2つの方法がある:測定とモデリング。それぞれ精度や侵襲性について独自の特徴があるんだ。
測定
測定は、デバイスがソフトウェアを動かしてるときにどれくらいエネルギーを使ってるかを追跡するためにツールを使うことだ。デバイス全体やプロセッサやメモリといった特定の部分でエネルギー使用を測れるよ。
測定の利点は、エネルギー使用に関する直接的な数値を得られること。パワーメーターみたいな測定ツールはソフトウェアの動作に干渉しないから、この方法は非侵襲的なんだ。でも、エネルギー結果を特定のソフトウェアの部分に結びつけるのが難しいこともある。
もう一つの欠点は、測定するためにはソフトウェアの動作するバージョンが必要なこと。測定ツールがデータを取得する頻度、いわゆるサンプリングレートに基づいて、測定の精度に限界があることもある。
プログラムが速く動くときは、低いサンプリングレートだと重要なエネルギー使用の瞬間を見逃すかもしれない。短時間で実行されるプログラムの場合、低いサンプリングレートを使うと不正確な読み取りになることがある。でも、実行に数分かかるような場合には、十分な読み取りが集まるからまだ役立つよ。
モデリング
一方で、モデリングは、仮定や以前の観察データに基づいてエネルギーの使い方を表現するものなんだ。この方法は専門的な機器を必要としないから、メリットがある。それに、ソフトウェアがまだ作られてない状況やアクセスが難しい環境でも機能する。
モデルは、特定のソフトウェア要素、例えば関数やデータ構造のエネルギー使用を推定するのに使える。ただし、単純化の仮定に頼ってるから、常に正確なデータを提供するわけじゃない。モデルを作るには、モデリングされてるシステムについての専門知識が必要になることが多い。
一部のモデルは、推定をサポートするために測定値を使うこともある。実行時間は、特にCPUを多く使うアプリケーションにとってエネルギー使用の代理として機能することがある。しかし、これは全ての状況には信頼できないんだ。ソフトウェアのパフォーマンスにはエネルギー使用と直接相関しない要素がたくさんあるからね。
例:エネルギー使用の推定
ソフトウェアのエネルギー使用を推定する方法を示すために、Fannkuch Reduxっていう簡単なベンチマークを考えてみよう。このベンチマークは、異なるプログラミング言語のパフォーマンスを比較するウェブサイトの一部なんだ。
特定のコンピュータでFannkuch Reduxがどれくらいエネルギーを使うか知りたい。信頼性を確保するために、実験の条件を注意深く記録する必要がある。このベンチマークは異なるパラメータで実行できて、そのワークロードに影響を与える。テストでは、デフォルトのワークロードで実行するよ。
実験環境
実験はApple M1チップ搭載のMacBook Airで行うよ。再現性のために、一貫した特定のハードウェアとソフトウェアの構成が必要なんだ。実験中は、コンピュータがバッテリー電源で動いてる時だけエネルギーを測りたいから、電源には繋がないよ。
正確なエネルギーデータを集めることは重要なんだ。Macシステムには、CPUやGPUの電力使用情報を提供するコマンドラインツールpowermetrics
がある。このコマンドを実行して、デバイスがアイドル状態のときの基準データを集めるよ。
エネルギーデータの収集
アイドル時の電力データを集めたら、ベンチマークを実行する。正確なエネルギー消費データを得るためには、測定をベンチマークの実行と同期させる必要がある。これには、ベンチマークが実行される直前にエネルギー測定を開始して、終了した後に止めるシェルスクリプトを使うことができるよ。
この例では、信頼できる平均値を得るためにFannkuch Reduxベンチマークを10回実行するよ。何度も実行することで、オペレーティングシステムや実行中のランダムなイベントによる変動を和らげることができる。
ベンチマークを実行した後、どれくらい時間がかかったかと、どれくらいエネルギーが消費されたかを分析できる。例えば、ベンチマークが42秒かかって、平均電力使用量が約15ワットだと分かったら、消費した総エネルギーを計算できる。
ベンチマークの実行中に消費されたエネルギーとアイドル時の電力使用を比べることで、ソフトウェアがエネルギー消費にどんな影響を与えるかがわかるよ。
エネルギー使用を推定するアプローチ
エネルギー測定とモデリングの方法を考慮した上で、ソフトウェアのエネルギー消費を推定するための具体的なアプローチを見てみよう。
ハードウェアパフォーマンスカウンター
このアプローチは、エネルギー消費に関するデータを記録するハードウェアパフォーマンスカウンターと、このデータを読み取れるソフトウェアを組み合わせるものだ。パフォーマンスカウンターは、プロセッサやRAMなどの異なるコンポーネントのエネルギー使用を追跡できる。
多くのモダンなプロセッサでは、メーカーがこれらのパフォーマンスカウンターを提供してるんだ。例えば、IntelのRAPLはエネルギー消費データにアクセスできて、最小限のオーバーヘッドで正確な読み取りを提供するよ。このデータを使うことで、さまざまなソフトウェアソリューションのエネルギー影響を明確に把握できるんだ。
専門的な測定機器
専用の測定ツールを使用すると、正確なエネルギー読み取りが得られるよ。これらのツールは、ソフトウェアに干渉せずに電力使用を追跡するためにデバイスに接続できる。でも、パフォーマンスカウンターよりも設定が複雑になることがある。
バッテリー駆動のデバイスを測定する場合、充電行動による誤解を避けるために、バッテリーを取り外す必要があるかもしれない。それに、測定プロセスをベンチマークの実行と同期させるのが難しいこともある。
分析モデル
モデルを使ってエネルギー使用を効果的に推定することもできるんだ。複雑さが異なるけど、たいていソフトウェア開発者がエネルギー消費を具体的なエネルギー値に焦点を当てずに比較できるようにする。
一般的な方法では、ソフトウェアが特定の操作をどれくらいの頻度で行っているかを追跡するモデルと、その操作によって消費されるエネルギーを推定するモデルの2つを使う。これにより、開発者は特定のエネルギー値にこだわらずに、さまざまなプログラミング手法とそのエネルギー影響を分析できる。
結論
ソフトウェアのエネルギー使用を推定することは、今のソフトウェア開発において重要な側面なんだ。適切な測定技術、モデリング方法、ソフトウェアのエネルギー消費を評価するためのさまざまなアプローチを使うことで、開発者はエネルギー効率の高いソフトウェアソリューションにつながる情報に基づいた意思決定ができるようになる。
エネルギー効率がコストや環境理由でますます重要になってきてるから、ソフトウェアがハードウェアとどうやってエネルギーを消費するのかを理解することは、今後の技術開発にとって重要になるだろう。エネルギー使用の測定と推定を積極的に行うことで、開発者はより持続可能なソフトウェアの実践に貢献できるんだ。
タイトル: Estimating the Energy Footprint of Software Systems: a Primer
概要: In Green Software Development, quantifying the energy footprint of a software system is one of the most basic activities. This documents provides a high-level overview of how the energy footprint of a software system can be estimated to support Green Software Development. We introduce basic concepts in the area, highlight methodological issues that must be accounted for when conducting experiments, discuss trade-offs associated with different estimation approaches, and make some practical considerations. This document aims to be a starting point for researchers who want to begin conducting work in this area.
著者: Fernando Castor
最終更新: 2024-07-17 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2407.11611
ソースPDF: https://arxiv.org/pdf/2407.11611
ライセンス: https://creativecommons.org/licenses/by-nc-sa/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。
参照リンク
- https://tqrg.github.io/physalia/monsoon_tutorial
- https://luiscruz.github.io/2021/07/20/measuring-energy.html
- https://www.green-coding.io/case-studies/cpu-utilization-usefulness/
- https://www.brendangregg.com/blog/2017-05-09/cpu-utilization-is-wrong.html
- https://www.green-coding.io/projects/eco-ci/
- https://www.green-coding.io/projects/cloud-energy/
- https://www.green-coding.io/case-studies/rapl-and-sgx/
- https://www.brendangregg.com/flamegraphs.html
- https://www.msoon.com/high-voltage-power-monitor
- https://www.ni.com/docs/en-US/bundle/usb-6003-specs/resource/374372a.pdf
- https://benchmarksgame-team.pages.debian.net/benchmarksgame/
- https://benchmarksgame-team.pages.debian.net/benchmarksgame/description/fannkuchredux.html
- https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/fannkuchredux-java-1.html
- https://docs.kernel.org/admin-guide/pm/cpufreq.html
- https://docs.oracle.com/en/java/javase/21/docs/specs/man/java.html
- https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
- https://wiki.ubuntu.com/RecoveryMode
- https://www.unix.com/man-page/osx/1/powermetrics/
- https://developer.nvidia.com/system-management-interface
- https://developer.nvidia.com/management-library-nvml
- https://pypi.org/project/pynvml/
- https://github.com/intel/pcm
- https://www.intel.com/content/dam/doc/white-paper/resources-xeon-measuring-processor-power-paper.pdf
- https://github.com/hubblo-org/scaphandre
- https://www.intel.com/content/www/us/en/developer/tools/software-guard-extensions/overview.html
- https://github.com/amd/amd_energy
- https://developer.android.com/studio/profile/power-profiler
- https://www.nvidia.com/en-us/geforce/graphics-cards/40-series/rtx-4080-family/
- https://www.qualcomm.com/developer/software/snapdragon-profiler
- https://www.green-coding.io/