【问题标题】:Memory Overhead of Android BindersAndroid Binder 的内存开销
【发布时间】:2016-09-19 20:52:40
【问题描述】:

虽然我对 Binder 用于跨进程通信的进程有点熟悉,但我想知道它们必须与内核上的 Binder 驱动程序交互这一事实是否显着增加了创建对象的内存开销。

此外,即使事务数量没有增加,创建大量 Binder 是否会限制现有 Binder 的事务速度?

【问题讨论】:

    标签: android performance ipc


    【解决方案1】:

    您必须深入研究 libbinder 代码以及内核驱动程序代码才能真正分析内存消耗。但是,开销可能不是很大,因为在内部,活页夹驱动程序具有其驱动程序对象,然后链接到调用进程所拥有的实际活页夹。它还限制了调用进程可以用来处理并发事务的线程数。

    就性能而言,主要限制因素将是通过给定绑定器的事务数据的大小。每个活页夹都有一个固定大小的缓冲区 (1MB) 来处理该活页夹的所有事务。因此,如果针对特定绑定器同时进行多个事务,则所有事务使用的总数据将计入此限制。由于发生的异常(Java 级别)不指示它是事务的 send 部分还是 receive 部分,因此很难排除故障或优雅地处理这可能非常棘手。经验法则是跨绑定器移动的数据需要很小,例如消息传递。它不太适合流数据之类的东西。 Android 使用 ashmem 驱动程序支持来更好地处理这个问题,以及在活页夹之间共享文件描述符的能力。

    活页夹本身在 btree 中进行跟踪,因此查找速度应该非常快。如果对给定进程以及系统中的活页夹总数达到高水平,有一些关于此的统计数据会很有趣,但我不知道有任何此类数据。

    【讨论】:

      猜你喜欢
      • 2011-11-16
      • 2011-02-12
      • 2020-12-13
      • 2012-09-12
      • 2017-08-30
      • 2019-12-06
      • 1970-01-01
      • 2014-10-03
      • 2015-10-11
      相关资源
      最近更新 更多