Android Perfetto 系列 10 - Binder 调度与锁竞争

Android Perfetto 系列 10 - Binder 调度与锁竞争

💡 原文中文,约15500字,阅读约需37分钟。
📝

内容提要

本文介绍了 Android 中 Binder 的跨进程通信机制,分析了性能瓶颈及优化方法。开发者可通过 Perfetto 工具可视化 Binder 调用,定位耗时、线程池压力和锁竞争等问题,从而提升系统性能。

🎯

关键要点

  • 本文介绍了 Android 中 Binder 的跨进程通信机制。
  • Binder 是 Android 的主要 IPC 机制,承载系统服务与应用的交互。
  • 开发者可以使用 Perfetto 工具可视化 Binder 调用,帮助定位性能瓶颈。
  • Binder 的核心组件包括 Client、Service、Binder Driver 和 Thread Pool。
  • Binder 提供身份与权限校验、同步与异步调用、优先级继承等关键能力。
  • Perfetto 观测准备需要配置数据源与 Trace,使用 linux.ftrace 和 linux.process_stats。
  • 分析 Binder 调用的步骤包括定位事务耗时、评估线程池与 Oneway 队列、排查锁竞争。
  • Binder 线程池按需增长,普通应用进程的最大线程数通常为 15,system_server 的上限可达 31。
  • 性能分析中需关注 Binder 线程池是否满载、事务的 dispatch_dur 是否显著大于 server_dur。
  • 锁竞争是 SystemServer 中常见的性能瓶颈,需通过 Perfetto 观察锁竞争情况。
  • 最新平台特性如 Binder Freeze 和 Frozen-callee 回调策略可影响 Binder 调用的性能。
  • 开发者应避免在 UI 线程调用耗时的 Binder 服务,建议使用后台线程处理。
  • Perfetto 是分析 Binder 问题的高效工具,结合多种信号可快速定位性能问题。

延伸问答

什么是 Android 中的 Binder?

Binder 是 Android 的主要跨进程通信机制,负责系统服务与应用之间的交互。

如何使用 Perfetto 工具分析 Binder 性能问题?

开发者可以通过 Perfetto 可视化 Binder 调用,定位耗时、线程池压力和锁竞争等问题。

Binder 的核心组件有哪些?

Binder 的核心组件包括 Client、Service、Binder Driver 和 Thread Pool。

在分析 Binder 调用时,如何定位事务耗时?

可以通过 Perfetto 中的 Transactions 轨道找到相关的 App 进程,并查看 client_dur 和 server_dur 的耗时。

Binder 线程池的最大线程数是多少?

普通应用进程的 Binder 线程池最大线程数通常为 15,而 system_server 的上限可达 31。

锁竞争在 Binder 性能分析中有什么影响?

锁竞争是 SystemServer 中常见的性能瓶颈,可能导致请求处理延迟,需要通过 Perfetto 观察锁竞争情况。

➡️

继续阅读