将 android binder 的性能与 unix-socket 进行比较

Posted

技术标签:

【中文标题】将 android binder 的性能与 unix-socket 进行比较【英文标题】:compare android binder's performance with unix-socket 【发布时间】:2019-08-19 11:39:32 【问题描述】:

我使用域套接字和 protobuf 编写了一个 IPC 框架。我在我的 x86 ubuntu 和 anbox 中将 binder 与我的 IPC 框架进行了比较。 当数据大小在 8 byte ~ 4K 之间时,性能没有区别。当数据大小大于 32K 时,我的 IPC Framework 比 binder 好。我认为bidner 传输数据只复制一次,而 domain socket 复制它两次。我该如何解释结果?(anbox应该不会带来性能损失)

【问题讨论】:

您检查了哪个 Binder? Framework Binder 需要编组/解组数据,而 Hardware Binder 不需要。 我选择的Framework binder,虽然需要使用parcel进行marshall和unmarshall数据,但我觉得性能应该不会这样 【参考方案1】:

带有AIDL 的Binder 将在复制数据之前对其进行编组和解组。如果您的 IPC 不需要该步骤并复制原始数据,您将获得明显的速度优势。因此,在 android 中复制大量数据通常不通过 Binder 完成。

如果您使用HIDL 和Fast Message Queues 切换到Hardware Binder,情况可能会有所不同。但是,您不能在 Framework Binder 中使用 HIDL。所以这可能不是你的选择。

【讨论】:

以上是关于将 android binder 的性能与 unix-socket 进行比较的主要内容,如果未能解决你的问题,请参考以下文章

Android Bander设计与实现 - 设计

Android Binder,AIDL跨进程通讯详解与实现,看一遍就懂

Android Binder实现浅析-Binder驱动

Android进程间通信机制Binder学习

Android之Binder通信篇

Binder简介