Upload
suguru-oho
View
8.600
Download
1
Embed Size (px)
Citation preview
自己紹介
● 於保 俊(おほ すぐる) Tw:@ohomagic● 環境学修士・・・● 六本木のクラブKLabでエンジニアリングマネージャー
やってます● 仕事は、「何でも屋?」
○ 広く浅く様々な技術課題解決をしています○ KLabのEM部の工作担当です
○ N88BASIC(大昔)→Java(大学)→PHP(KLab)→最近
は、Python、C#、C・・・色々・・・Android(うっ● 最近子供が生まれて、いつか一緒にコード書く
ことを夢見ています
今日のお話
● はじめに○ なぜ消費電力が重要なのか?○ 電力最適化の課題○ 電力最適化の先行事例等
● 電力計測の仕組み○ 電力はどうやって測るか?○ 今回の装置の紹介
● 実例として○ いろんなアプリを測ってみた 何が電気を食うのか?○ AndroidWearのWatchFaceの消費電力を減らしてみた
● まとめ
なぜ消費電力が重要なのか?
● 電気は有限● 電池のもちが悪いとユーザー
がアクティブになってくれる時間が短くなる
● 電池のもちが悪いとネガティブなユーザー体験につながる
● 場合によってはアンインストールの理由にもなる
画像:Wikipediaより引用
さらに 「ウェアラブルの台頭」
● AndroidWear / Apple Watch …● バッテリー容量はさらに小さい● モバイルSoCがメインで最適化がまだ進んでない
後藤弘茂のWeekly海外ニュース「スマートウォッチの電池と価格の呪縛を解き放つSoC設計と実装」
http://pc.watch.impress.co.jp/docs/column/kaigai/20141030_673678.html
● 十分とは言いがたい稼働時間
よりシビアな条件で電力消費と戦わなくてはいけない
計測できなきゃ手が出せない
● 一般的なパフォーマンスチューニングでも○ プロファイラを使って時間がかかっているところやメモリ
の消費などを計測します○ 計測して問題個所を特定し、改善していきます
● つまり、どこで「電力」を消費しているかを計測できなきゃチューニングのしようがない
計測可能なら、計測・変更を繰り返すことでチューニングできる
GoogleProject Volta&Battery Historian
● Project Volta○ Android5.0で導入されたバッテリーのもちをよくするた
めの各種仕組みとAPI群https://developer.android.com/about/versions/android-5.0.html#Power
● Battery Historian○ Project Voltaで導入された電源関連の統計情報を取得
し、整形して分析しやすくするツールhttps://github.com/google/battery-historian
株式会社ブリリアントサービス様
電力測定キット「パワースカウター」
● ダミーバッテリーを使って、電力を計測● 本格的な計測が廉価(2~3万円)にできるそうです
http://www.brilliantservice.co.jp/works/power_kit.html
● 今回の発表は、ここからヒントを得て、○ 自分もやってみたい!○ もっと安く簡単にできないか?○ バッテリーが取り外しできない最近の機種に対応するには
を考えて、実験したものです
電力とは?
● 電圧×電流
● 電圧は回路に並列に、電流は回路に直列につないで計測する
● 電圧計と電流計があれば、電力は分かる
● 端末にUSB給電するとき「バッテリーが満充電」であれば、電力はバイパスされて端末を動かすのに「ほぼ」使われる
今回の装置の紹介
● INA226 I2Cディジタル電流・電圧・電力計モジュール
● ArduinoUno● USB充電器● USBケーブル(高速充電対応)
● 計測用スケッチ(Arduino用プログラム)● ファイル保存+グラフ描画用自作プログラム
INA226 I2Cディジタル電流・電圧・電力計モジュールとは
● I2Cでつながるデジタル電力計
● ストロベリー・リナックス通販で購入
● 1000円!● 計測レンジ ±20A 36V● 精度1.25mA 1.25mV● 小さい● キャリブレーションいらな
くて簡単
下記商品URLから引用https://strawberry-linux.com/catalog/items?code=12031
Arduino Uno
● 便利なマイコン基板● 簡単にPCと外部入
出力をつなげられて重宝します
● 3000円くらい
下記URLから引用http://www.arduino.cc/en/Main/ArduinoBoardUno
Arduino用スケッチ(抜粋)
INA226との通信は
オレ工房様のスケッチを利用http://ore-kb.net/archives/150
シリアル出力部分を、受け側プログラムに合わせて改変して使用させていただきました。
約5msごとにデータ取得しますhttps://github.com/oho-sugu/powermeter
void setup(){ Wire.begin(); Serial.begin(115200); setupRegister();}
char buf[64];unsigned short voltage; // Bus Voltage (mV)unsigned short current; // Current (mA)unsigned short power; // Power (uW)unsigned long time; // time (ms)
void loop(){ voltage = (unsigned short)readRegister(INA226_REG_BUS_VOLTAGE); current = (unsigned short)readRegister(INA226_REG_CURRENT); power = (unsigned short)readRegister(INA226_REG_POWER); time = millis(); snprintf(buf, NELEMS(buf) , "T%lxV%xI%xP%x\n" , time , voltage , current , power ); Serial.print(buf); delay(5);}
この装置の利点と欠点
● 利点○ 安い、簡単に作れる○ デバイスにUSB給電するだけ、手軽に使える○ USB給電に対応する機器なら何でも対応可能○ それなりに細かく消費電力のモニタリングが可能
● 欠点○ 精度は専門の機器に比べると劣る
○ 電力がバッテリーの充電に使われる場合、さらに精度が
悪化する
○ 時間解像度は数msくらいが限界→メソッド単位とかでは
さすがに電力計測できない
※注 計測対象・条件
Nexus5 Android5.1 ディスプレイ明るさ最高
通信環境 Wifiのみ
以降の計測結果は、あくまで発表者の環境での結果です。
傾向をきちんと裏付ける回数の試行を行うことはできなかったので、あくまでも参考としてとらえてください。
また個別のアプリについての批判や良否の判断の意図はありません。
ここまでの結果まとめ
● 意外とGoogleMapが電気食い● 動画再生が消費電力が少ない
○ これはデコード専用回路のおかげだと推測
● ブラウザも比較的大食い○ 特に瞬間最大消費電力が多い○ スクロール時など、画面変更時に目立つ
ここまでの結果まとめ
音ゲー Playgroundゲームエンジン WebViewはとても消費電力が多いゲームのコア部分であるライブでの消費電力はかなり少ない 下限もおよそ 2Wくらいと低い
真・戦国バスター Androidの標準UIコンポーネントベースで作成
増減が激しい
ユニティちゃんのホームラン競争
Unity 4 消費電力下限が約2.5Wと高いシーンやオブジェクトの激しい変更がなければ電力消費は落ち着いている
その他のゲームでも調べてみましたが
● WebViewはアニメーションやスクロール時の電力消費が激しい● 通信時、特に連続してファイルのDLをするときは電力を消費
ここまでのまとめ
消費電力は
● ゆるい傾向として2D<3D● シーンや画面の切り替えは多いほど消費電力大● 同じゲームエンジンを使っていても違う傾向● 頻繁な通信は大きな電力消費● さらに調査が必要
とはいえ、いわゆるパフォーマンスチューニングは省電力にも貢献すると思われます
※何をすれば省電力かという体系的なノウハウは今後調査と検証が必要です
※注 計測対象・条件
Sumsung Gear Live 275C Android5.0.1ディスプレイ明るさ最低
以降の計測結果は、あくまで発表者の環境での結果です。
傾向をきちんと裏付ける回数の試行を行うことはできなかったので、あくまでも参考としてとらえてください。
AndroidWearのWatchFaceの消費電力測定
● まず、AndroidWearSDKのサンプルのいくつかのWatchFaceの消費電力を見ます
● そして、自作WatchFaceの消費電力チューニングを試みてみます
参考:公式ドキュメントhttps://developer.android.com/training/wearables/watch-faces/performance.html
自作WatchFaceを作ってみます
● 画像をぐるぐる回しています○ 秒針と分針に対応する画像をAnalog Sweepのサンプ
ルを参考になめらかに回転させながら合成して、描画し
ています
参考https://developer.android.com/samples/WatchFace/Wearable/src/com.example.android.wearable.watchface/SweepWatchFaceService.html
secondMatrix.reset();secondMatrix.setRotate(((float)mTime.second + milliseconds / 1000.0f)*6.0f,centerX,centerY);secondMatrix.postTranslate(-(float)width/7,-(float)height/7);if(mSecondScaledBitmap!=null) canvas.drawBitmap(mSecondScaledBitmap, secondMatrix,null);
減ったけど思った結果にはならなかった
● Sleep100msの時の挙動がよくわからない● とはいえ、計測しながらチューニングできるのは
可能性を感じる● 単純な図形なら、画像ではなく、直接描画した
方がいいのではないか→今後確かめたい
まとめ1
ここまで、今回は平均消費電力を一つの指標にしているが、適切ではないとやっていて思った
→様々な要因によって消費電力は変化するので、操作ごとのポイントで評価した方がいい
→この手法は、ミクロなチューニングとして使うべきで、アプリ全体の電池のもちを評価する長期間のテストと併用するべき
とはいえ、ピンポイントでチューニングの参考にとてもなります
まとめ2
● 簡単な装置で、比較的簡単に電力測定できる● プログラムの工夫で消費電力は抑えられる● 見えてくるエンジンやOSやハードウェアの特性● 計測可能だし、消費電力を気にしてみてもいい
のでは?
● あと、ハードウェア楽しいよ!