Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlinで実装するCPU/GPU 「協調的」パフォーマンス管理

Avatar for matuyuhi matuyuhi
November 01, 2025

Kotlinで実装するCPU/GPU 「協調的」パフォーマンス管理

2025/11/01 kotlin fest 2025の資料です

https://2025.kotlinfest.dev/timetable/1719033600_b/

Avatar for matuyuhi

matuyuhi

November 01, 2025
Tweet

Other Decks in Programming

Transcript

  1. OS OS (DVFS/scheduling) App (目標ms/実測ms) ADPF(Android Dynamic Performance Framework)とは •

    ゲーム等の高負荷アプリが熱暴走せず安定動作するよう性能と熱を動的制御 • Android 15から作業時間を報告し、 OSが両者の周波数を同時に調整し最適化 • 従来のOS任せのDVFSに対し、ADPFはアプリから追加情報を渡し最適化を支援 https://developer.android.com/games/optimize/adpf https://source.android.com/docs/core/power/performance
  2. イベント種別ごとの戦略 • 状態 最新だけ必要? → conflate() 常に最新1件のみ保持 • トレンド ざっくり傾向?

    → sample(推奨間隔) 定期サンプリング • 高頻度 量が多い? → buffer(..., DROP_OLDEST) 古いデータを破棄し遅延防止
  3. • 登録/解除は厳密に:awaitClose { removeListener() } • コールバック実行スレッド(MainExecutor) → 処理はで別スレッドへ •

    必要に応じて buffer / conflate / sample / mapLatest を適用 • 演算子は意味で選ぶ ⚬ 最新のみ?間引き? 最新優先? • → Kotlin側で collect { … } するだけでデバイス状態をリアクティブに監視可能に Flow化の設計 (callbackFlow活用パターン)
  4. thermalStatusFlow の実装 状態は最新だけで十分 → .distinctUntilChanged().conflate() で連続重複や古い値を除去 リーク対策: awaitClose { remove…

    } でリスナー登録を確実に解除 ↓ 温度が警告レベル以上になったら setPreferPowerEfficiency(true) で 省電力モードに切替えなど
  5. DSL設計 API android.os.PerformanceHintManager アプリ⇄OSのヒント用チャネル ADPFの管理API • Session(作る→使う→閉じる) ⚬ 対象スレッド(TID)と目標時間(target)を束ねたハンドル ⚬

    WorkDurationで測定結果を送信 • 主な操作 ⚬ updateTargetWorkDuration(...) / setPreferPowerEfficiency(...) ⚬ reportActualWorkDuration(WorkDuration)(1サイクル1回) ⚬ preferredUpdateRateNanos()(送信の上限目安)
  6. • 時刻の混入:SystemClock.elapsedRealtimeNanos() vs System.nanoTime() • 必須の踏み忘れ:WorkDuration( )〜 の設定漏れがコンパイルで見えない • フェーズ混在:測定記述の中から目標時間(target)更新を呼べてしまう

    • TID誤り:Thread.currentThread( ).id を渡すなど、Linux TID 以外を指定しがち • 過剰送信:preferredUpdateRateNanos を無視して連打(意味がない/無駄に電力) • ライフサイクル:close( ) 漏れ/複数スレッドからの呼び出しで非スレッドセーフ 現状の問題点
  7. 参考 • Performance Hint API https://developer.android.com/games/optimize/adpf/performance-hint-api • PerformanceHintManager.Session https://developer.android.com/reference/android/os/PerformanceHintManager.Session •

    WorkDuration https://developer.android.com/reference/android/os/WorkDuration • Thermal API https://developer.android.com/games/optimize/adpf/thermal • Kotlin Flow https://developer.android.com/kotlin/flow • Type-Safe Builders https://kotlinlang.org/docs/type-safe-builders.html Thanks!