SlideShare uma empresa Scribd logo
1 de 56
Baixar para ler offline
モバイルにおける電力最適化のための
1プラクティス
於保 俊(Ohoooo) KLab EM部
DroidKaigi (2015/04/25)発表資料
自己紹介
● 於保 俊(おほ すぐる) 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
● 十分とは言いがたい稼働時間
よりシビアな条件で電力消費と戦わなくてはいけない
課題
ではどうやってアプリの電力消費を最適化するか?
計測できなきゃ手が出せない
● 一般的なパフォーマンスチューニングでも
○ プロファイラを使って時間がかかっているところやメモリ
の消費などを計測します
○ 計測して問題個所を特定し、改善していきます
● つまり、どこで「電力」を消費しているかを計測で
きなきゃチューニングのしようがない
計測可能なら、計測・変更を繰り返すことでチュー
ニングできる
先行事例
いくつかありますが、
今回参考にさせていただいたものを紹介します。
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
株式会社ブリリアントサービス様
電力測定キット「パワースカウター」
● ダミーバッテリーを使って、電力を計測
● 本格的な計測が廉価(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
回路構成
100kΩ抵抗
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);
}
ロガープログラム&計測風景
https://github.com/oho-sugu/powermeter-java
計測条件
● デバイスにUSBで給電できること
● バッテリーが満充電状態であること
この装置の利点と欠点
● 利点
○ 安い、簡単に作れる
○ デバイスにUSB給電するだけ、手軽に使える
○ USB給電に対応する機器なら何でも対応可能
○ それなりに細かく消費電力のモニタリングが可能
● 欠点
○ 精度は専門の機器に比べると劣る
○ 電力がバッテリーの充電に使われる場合、さらに精度が
悪化する
○ 時間解像度は数msくらいが限界→メソッド単位とかでは
さすがに電力計測できない
実例1
あの有名アプリの電力消費
※注 計測対象・条件
Nexus5 Android5.1 ディスプレイ明るさ最高
通信環境 Wifiのみ
以降の計測結果は、あくまで発表者の環境での結
果です。
傾向をきちんと裏付ける回数の試行を行うことはで
きなかったので、あくまでも参考としてとらえてくだ
さい。
また個別のアプリについての批判や良否の判断の
意図はありません。
端末起動時~何もしない状態~スタンバイ
最大7W超
画面OFF
スタンバイ時
0.2Wくらい
通常時
何もしない状態
1Wくらい
画面輝度最低と
最大
0.5Wくらい違う
ブラウザ(Chrome)使用 平均2.7W
Youtube動画再生 平均2.0W
GoogleMap使用時 平均3.7W 意外と電気食う
ここまでの結果まとめ
● 意外とGoogleMapが電気食い
● 動画再生が消費電力が少ない
○ これはデコード専用回路のおかげだと推測
● ブラウザも比較的大食い
○ 特に瞬間最大消費電力が多い
○ スクロール時など、画面変更時に目立つ
まずは、当社アプリから
お知らせ(WebView)の表示
平均4.51W
ゲームプレイ中
平均2.32W
データダウンロード
平均2.81W
真・戦国バスター 平均2.59W
https://play.google.com/store/apps/details?id=jp.klab.senbus.android
ユニティちゃんのホームランスタジアム
                  平均2.83W
https://play.google.com/store/apps/details?id=com.klab.
ここまでの結果まとめ
音ゲー Playgroundゲームエンジン WebViewはとても消費電力が多い
ゲームのコア部分であるライブでの消費電力はかな
り少ない 下限もおよそ 2Wくらいと低い
真・戦国バスター Androidの標準UIコンポーネント
ベースで作成
増減が激しい
ユニティちゃんの
ホームラン競争
Unity 4 消費電力下限が約2.5Wと高い
シーンやオブジェクトの激しい変更がなければ電力消
費は落ち着いている
その他のゲームでも調べてみましたが
● WebViewはアニメーションやスクロール時の電力消費が激しい
● 通信時、特に連続してファイルのDLをするときは電力を消費
なぞって消すパズルのゲーム
平均2.38W
ひっぱるゲーム 平均2.37W
白い動物のRPG 平均2.46W
3Dレースゲーム 平均2.56W
本格オンラインRPG 平均2.60W
ここまでのまとめ
消費電力は
● ゆるい傾向として2D<3D
● シーンや画面の切り替えは多いほど消費電力大
● 同じゲームエンジンを使っていても違う傾向
● 頻繁な通信は大きな電力消費
● さらに調査が必要
とはいえ、いわゆるパフォーマンスチューニングは省電力にも貢献
すると思われます
※何をすれば省電力かという体系的なノウハウは今後調査と検証
が必要です
実例2
AndroidWear端末で電力最適化
※注 計測対象・条件
Sumsung Gear Live 275C Android5.0.1
ディスプレイ明るさ最低
以降の計測結果は、あくまで発表者の環境での結
果です。
傾向をきちんと裏付ける回数の試行を行うことはで
きなかったので、あくまでも参考としてとらえてくだ
さい。
AndroidWearのWatchFaceの
消費電力測定
● まず、AndroidWearSDKのサンプルのいくつか
のWatchFaceの消費電力を見ます
● そして、自作WatchFaceの消費電力チューニン
グを試みてみます
参考:公式ドキュメント
https://developer.android.com/training/wearables/watch-faces/performance.html
Sample Analog 平均0.36W
一秒ごとに針が
動くアナログ時計
Sample Sweep 平均0.52W
連続的に針が動
くアナログ時計
Sample Tilt 平均0.53W
OpenGLで描画さ
れるふよふよする
時計
Sample Digital 平均0.35W デジタル時計
自作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);
自作WatchFace初期Ver 平均0.62W
気付いたこと
● 操作をやめて10秒後くらいから消費電力がガク
ンと下がる
○ →CPUのパワーステートの切り替え?
● 処理が継続して重ければ、消費電力の高い状
態が維持される
チューニング
ということは、
当たり前だけど、sleepなどを入れて処理の間隔を
あければよい?
Sleepを32ms≒30FPS 平均0.49W
Sleep100ms≒10FPS 平均0.52W
減ったけど思った結果にはならなかった
● Sleep100msの時の挙動がよくわからない
● とはいえ、計測しながらチューニングできるのは
可能性を感じる
● 単純な図形なら、画像ではなく、直接描画した
方がいいのではないか→今後確かめたい
まとめ1
ここまで、今回は平均消費電力を一つの指標にし
ているが、適切ではないとやっていて思った
→様々な要因によって消費電力は変化するので、
操作ごとのポイントで評価した方がいい
→この手法は、ミクロなチューニングとして使うべき
で、アプリ全体の電池のもちを評価する長期間の
テストと併用するべき
とはいえ、ピンポイントでチューニングの参考にと
てもなります
まとめ2
● 簡単な装置で、比較的簡単に電力測定できる
● プログラムの工夫で消費電力は抑えられる
● 見えてくるエンジンやOSやハードウェアの特性
● 計測可能だし、消費電力を気にしてみてもいい
のでは?
● あと、ハードウェア楽しいよ!
ご清聴ありがとうございました

Mais conteúdo relacionado

Destaque

Java web application testing
Java web application testingJava web application testing
Java web application testingTokuhiro Matsuno
 
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてあなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてShinichi Kozake
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素Takahiro YAMADA
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)Yoshitaka Kawashima
 
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Yuki Anzai
 
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]YUKI YAMAGUCHI
 
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]bitter_fox
 

Destaque (7)

Java web application testing
Java web application testingJava web application testing
Java web application testing
 
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情についてあなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
 
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]
 
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
 

Semelhante a Droid kaigiプレゼン

アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜MicroAd, Inc.(Engineer)
 
(Ja) A unified feature disentangler for multi domain image translation and ma...
(Ja) A unified feature disentangler for multi domain image translation and ma...(Ja) A unified feature disentangler for multi domain image translation and ma...
(Ja) A unified feature disentangler for multi domain image translation and ma...Yamato OKAMOTO
 
アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜MicroAd, Inc.(Engineer)
 
20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdfKazuaki Ishizaki
 
KLabの社内勉強会紹介
KLabの社内勉強会紹介KLabの社内勉強会紹介
KLabの社内勉強会紹介KLab Inc. / Tech
 
Eclipse modeling 勉強会 はじめに
Eclipse modeling 勉強会 はじめにEclipse modeling 勉強会 はじめに
Eclipse modeling 勉強会 はじめにAkira Tanaka
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Modelscvpaper. challenge
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話y-uti
 
【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...
【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...
【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...Deep Learning JP
 
実務でGo使い始めました
実務でGo使い始めました実務でGo使い始めました
実務でGo使い始めましたYuki Kikuchi
 
オープンデータアプリの作り方
オープンデータアプリの作り方オープンデータアプリの作り方
オープンデータアプリの作り方Hirokazu Tokuno
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
KaggleのテクニックYasunori Ozaki
 
Ict委員会の開発力について
Ict委員会の開発力についてIct委員会の開発力について
Ict委員会の開発力についてYuta Hinokuma
 

Semelhante a Droid kaigiプレゼン (13)

アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜
 
(Ja) A unified feature disentangler for multi domain image translation and ma...
(Ja) A unified feature disentangler for multi domain image translation and ma...(Ja) A unified feature disentangler for multi domain image translation and ma...
(Ja) A unified feature disentangler for multi domain image translation and ma...
 
アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜アドテクを支える技術 〜1日40億リクエストを捌くには〜
アドテクを支える技術 〜1日40億リクエストを捌くには〜
 
20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf20230105_TITECH_lecture_ishizaki_public.pdf
20230105_TITECH_lecture_ishizaki_public.pdf
 
KLabの社内勉強会紹介
KLabの社内勉強会紹介KLabの社内勉強会紹介
KLabの社内勉強会紹介
 
Eclipse modeling 勉強会 はじめに
Eclipse modeling 勉強会 はじめにEclipse modeling 勉強会 はじめに
Eclipse modeling 勉強会 はじめに
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話
 
【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...
【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...
【DL輪読会】Bridge-Prompt: Toward Ordinal Action Understanding in Instructional Vi...
 
実務でGo使い始めました
実務でGo使い始めました実務でGo使い始めました
実務でGo使い始めました
 
オープンデータアプリの作り方
オープンデータアプリの作り方オープンデータアプリの作り方
オープンデータアプリの作り方
 
Kaggleのテクニック
KaggleのテクニックKaggleのテクニック
Kaggleのテクニック
 
Ict委員会の開発力について
Ict委員会の開発力についてIct委員会の開発力について
Ict委員会の開発力について
 

Droid kaigiプレゼン