Advertisement
Advertisement

More Related Content

Advertisement

Droid kaigiプレゼン

  1. モバイルにおける電力最適化のための 1プラクティス 於保 俊(Ohoooo) KLab EM部 DroidKaigi (2015/04/25)発表資料
  2. 自己紹介 ● 於保 俊(おほ すぐる) Tw:@ohomagic ● 環境学修士・・・ ● 六本木のクラブKLabでエンジニアリングマネージャー やってます ● 仕事は、「何でも屋?」 ○ 広く浅く様々な技術課題解決をしています ○ KLabのEM部の工作担当です ○ N88BASIC(大昔)→Java(大学)→PHP(KLab)→最近 は、Python、C#、C・・・色々・・・Android(うっ ● 最近子供が生まれて、いつか一緒にコード書く ことを夢見ています
  3. ネタスライド 一応ソフトウェアのエンジニアです
  4. 今日のお話 ● はじめに ○ なぜ消費電力が重要なのか? ○ 電力最適化の課題 ○ 電力最適化の先行事例等 ● 電力計測の仕組み ○ 電力はどうやって測るか? ○ 今回の装置の紹介 ● 実例として ○ いろんなアプリを測ってみた 何が電気を食うのか? ○ AndroidWearのWatchFaceの消費電力を減らしてみた ● まとめ
  5. はじめに
  6. なぜ消費電力が重要なのか? ● 電気は有限 ● 電池のもちが悪いとユーザー がアクティブになってくれる時 間が短くなる ● 電池のもちが悪いとネガティ ブなユーザー体験につながる ● 場合によってはアンインストー ルの理由にもなる 画像:Wikipediaより引用
  7. さらに 「ウェアラブルの台頭」 ● AndroidWear / Apple Watch … ● バッテリー容量はさらに小さい ● モバイルSoCがメインで最適化がまだ進んでない 後藤弘茂のWeekly海外ニュース「スマートウォッチの電池と価格の呪縛を解き放つSoC設計と実装」 http://pc.watch.impress.co.jp/docs/column/kaigai/20141030_673678.html ● 十分とは言いがたい稼働時間 よりシビアな条件で電力消費と戦わなくてはいけない
  8. 課題 ではどうやってアプリの電力消費を最適化するか?
  9. 計測できなきゃ手が出せない ● 一般的なパフォーマンスチューニングでも ○ プロファイラを使って時間がかかっているところやメモリ の消費などを計測します ○ 計測して問題個所を特定し、改善していきます ● つまり、どこで「電力」を消費しているかを計測で きなきゃチューニングのしようがない 計測可能なら、計測・変更を繰り返すことでチュー ニングできる
  10. 先行事例 いくつかありますが、 今回参考にさせていただいたものを紹介します。
  11. Google Project 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
  12. 株式会社ブリリアントサービス様 電力測定キット「パワースカウター」 ● ダミーバッテリーを使って、電力を計測 ● 本格的な計測が廉価(2~3万円)にできるそうです http://www.brilliantservice.co.jp/works/power_kit.html ● 今回の発表は、ここからヒントを得て、 ○ 自分もやってみたい! ○ もっと安く簡単にできないか? ○ バッテリーが取り外しできない最近の機種に対応するには   を考えて、実験したものです
  13. 電力計測の仕組み
  14. 電力とは? ● 電圧×電流 ● 電圧は回路に並列に、電流は回路に直列につ ないで計測する ● 電圧計と電流計があれば、電力は分かる ● 端末にUSB給電するとき「バッテリーが満充電」 であれば、電力はバイパスされて端末を動かす のに「ほぼ」使われる
  15. 今回の装置の紹介 ● INA226 I2Cディジタル電流・電圧・電力計モ ジュール ● ArduinoUno ● USB充電器 ● USBケーブル(高速充電対応) ● 計測用スケッチ(Arduino用プログラム) ● ファイル保存+グラフ描画用自作プログラム
  16. INA226 I2Cディジタル電流・電圧・電力計モジュールとは ● I2Cでつながるデジタル 電力計 ● ストロベリー・リナックス 通販で購入 ● 1000円! ● 計測レンジ ±20A 36V ● 精度1.25mA 1.25mV ● 小さい ● キャリブレーションいらな くて簡単 下記商品URLから引用 https://strawberry-linux. com/catalog/items?code=12031
  17. Arduino Uno ● 便利なマイコン基板 ● 簡単にPCと外部入 出力をつなげられて 重宝します ● 3000円くらい 下記URLから引用 http://www.arduino.cc/en/Main/ArduinoBoardUno
  18. 回路構成 100kΩ抵抗
  19. 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_VOLTAG current = (unsigned short)readRegister(INA226_REG_CURRENT); power = (unsigned short)readRegister(INA226_REG_POWER); time = millis(); snprintf(buf, NELEMS(buf) , "T%lxV%xI%xP%xn" , time , voltage , current , power ); Serial.print(buf); delay(5); }
  20. ロガープログラム&計測風景 https://github.com/oho-sugu/powermeter-java
  21. 計測条件 ● デバイスにUSBで給電できること ● バッテリーが満充電状態であること
  22. この装置の利点と欠点 ● 利点 ○ 安い、簡単に作れる ○ デバイスにUSB給電するだけ、手軽に使える ○ USB給電に対応する機器なら何でも対応可能 ○ それなりに細かく消費電力のモニタリングが可能 ● 欠点 ○ 精度は専門の機器に比べると劣る ○ 電力がバッテリーの充電に使われる場合、さらに精度が 悪化する ○ 時間解像度は数msくらいが限界→メソッド単位とかでは さすがに電力計測できない
  23. 実例1 あの有名アプリの電力消費
  24. ※注 計測対象・条件 Nexus5 Android5.1 ディスプレイ明るさ最高 通信環境 Wifiのみ 以降の計測結果は、あくまで発表者の環境での結 果です。 傾向をきちんと裏付ける回数の試行を行うことはで きなかったので、あくまでも参考としてとらえてくだ さい。 また個別のアプリについての批判や良否の判断の 意図はありません。
  25. 端末起動時~何もしない状態~スタンバイ 最大7W超 画面OFF スタンバイ時 0.2Wくらい 通常時 何もしない状態 1Wくらい 画面輝度最低と 最大 0.5Wくらい違う
  26. ブラウザ(Chrome)使用 平均2.7W
  27. Youtube動画再生 平均2.0W
  28. GoogleMap使用時 平均3.7W 意外と電気食う
  29. ここまでの結果まとめ ● 意外とGoogleMapが電気食い ● 動画再生が消費電力が少ない ○ これはデコード専用回路のおかげだと推測 ● ブラウザも比較的大食い ○ 特に瞬間最大消費電力が多い ○ スクロール時など、画面変更時に目立つ
  30. まずは、当社アプリから お知らせ(WebView)の表示 平均4.51W ゲームプレイ中 平均2.32W データダウンロード 平均2.81W
  31. 真・戦国バスター 平均2.59W https://play.google.com/store/apps/details?id=jp.klab.senbus.android
  32. ユニティちゃんのホームランスタジアム                   平均2.83W https://play.google.com/store/apps/details?id=com.klab.
  33. ここまでの結果まとめ 音ゲー Playgroundゲームエンジン WebViewはとても消費電力が多い ゲームのコア部分であるライブでの消費電力はかな り少ない 下限もおよそ 2Wくらいと低い 真・戦国バスター Androidの標準UIコンポーネント ベースで作成 増減が激しい ユニティちゃんの ホームラン競争 Unity 4 消費電力下限が約2.5Wと高い シーンやオブジェクトの激しい変更がなければ電力消 費は落ち着いている その他のゲームでも調べてみましたが ● WebViewはアニメーションやスクロール時の電力消費が激しい ● 通信時、特に連続してファイルのDLをするときは電力を消費
  34. なぞって消すパズルのゲーム 平均2.38W
  35. ひっぱるゲーム 平均2.37W
  36. 白い動物のRPG 平均2.46W
  37. 3Dレースゲーム 平均2.56W
  38. 本格オンラインRPG 平均2.60W
  39. ここまでのまとめ 消費電力は ● ゆるい傾向として2D<3D ● シーンや画面の切り替えは多いほど消費電力大 ● 同じゲームエンジンを使っていても違う傾向 ● 頻繁な通信は大きな電力消費 ● さらに調査が必要 とはいえ、いわゆるパフォーマンスチューニングは省電力にも貢献 すると思われます ※何をすれば省電力かという体系的なノウハウは今後調査と検証 が必要です
  40. 実例2 AndroidWear端末で電力最適化
  41. ※注 計測対象・条件 Sumsung Gear Live 275C Android5.0.1 ディスプレイ明るさ最低 以降の計測結果は、あくまで発表者の環境での結 果です。 傾向をきちんと裏付ける回数の試行を行うことはで きなかったので、あくまでも参考としてとらえてくだ さい。
  42. AndroidWearのWatchFaceの 消費電力測定 ● まず、AndroidWearSDKのサンプルのいくつか のWatchFaceの消費電力を見ます ● そして、自作WatchFaceの消費電力チューニン グを試みてみます 参考:公式ドキュメント https://developer.android.com/training/wearables/watch-faces/performance.html
  43. Sample Analog 平均0.36W 一秒ごとに針が 動くアナログ時計
  44. Sample Sweep 平均0.52W 連続的に針が動 くアナログ時計
  45. Sample Tilt 平均0.53W OpenGLで描画さ れるふよふよする 時計
  46. Sample Digital 平均0.35W デジタル時計
  47. 自作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);
  48. 自作WatchFace初期Ver 平均0.62W
  49. 気付いたこと ● 操作をやめて10秒後くらいから消費電力がガク ンと下がる ○ →CPUのパワーステートの切り替え? ● 処理が継続して重ければ、消費電力の高い状 態が維持される
  50. チューニング ということは、 当たり前だけど、sleepなどを入れて処理の間隔を あければよい?
  51. Sleepを32ms≒30FPS 平均0.49W
  52. Sleep100ms≒10FPS 平均0.52W
  53. 減ったけど思った結果にはならなかった ● Sleep100msの時の挙動がよくわからない ● とはいえ、計測しながらチューニングできるのは 可能性を感じる ● 単純な図形なら、画像ではなく、直接描画した 方がいいのではないか→今後確かめたい
  54. まとめ1 ここまで、今回は平均消費電力を一つの指標にし ているが、適切ではないとやっていて思った →様々な要因によって消費電力は変化するので、 操作ごとのポイントで評価した方がいい →この手法は、ミクロなチューニングとして使うべき で、アプリ全体の電池のもちを評価する長期間の テストと併用するべき とはいえ、ピンポイントでチューニングの参考にと てもなります
  55. まとめ2 ● 簡単な装置で、比較的簡単に電力測定できる ● プログラムの工夫で消費電力は抑えられる ● 見えてくるエンジンやOSやハードウェアの特性 ● 計測可能だし、消費電力を気にしてみてもいい のでは? ● あと、ハードウェア楽しいよ!
  56. ご清聴ありがとうございました
Advertisement