Sysmem 是一种 FIDL 服务,用于为 Cloud Storage 中的 由多个应用和硬件块使用。本文档介绍了 主要功能及其为系统提供的功能概览。
设计初衷
现代系统都有专用硬件块, 数据。下面列举了一些此类块:
- 使用 GPU 渲染计算机图形。
- 使用硬件编解码器对视频进行编码或解码。
- 使用相机和 DSP 拍摄高品质照片。
- 使用显示控制器的叠加层将图像合成到显示屏 引擎。
- 使用 TPU 评估神经网络。
通常,我们需要创建流水线,在它们之间传递数据, 硬件块。请参见以下示例:
- 使用硬件编解码器解码视频并将其合成到显示屏 以及呈现在 GPU 上的界面内容
- 将神经网络应用于实时摄像头画面。
为了高效地完成这些操作并避免复制,驱动程序和应用必须同意 以及数据在内存中的位置。这个 一个单位的输出可以直接用于下一个单位。 硬件单元对这些属性有严格的限制,而且 确定哪种数据布局可实现最佳效果。
Sysmem 是一项全球性服务 分配缓冲区,以便满足所有约束条件。如果有多种格式 则可根据预期效果从这些方面进行选择。
系统内存通常用于表示图片,而系统内存则具有特殊的 支持协商图片格式不过,sysmem 接口也可以 用于音频或任何其他类型的数据。
分配缓冲区后,系统不再管理数据流。 流水线中的应用负责协调 其他以确保同步。
分配流程(简化)
- 参与者会连接到 fuchsia.sysmem2.Allocator 服务
- 一个参与者(称为发起者)创建一个初始 缓冲区收集令牌。
- 该参与者复制令牌,并将副本发送给其他参与者 参与者。
- 这些参与者还可以以递归方式复制和发送令牌, 所有参与者都收到了一个令牌。
- 每个参与者都绑定自己的令牌以获取缓冲区集合。
- 每个参与者都对缓冲区收集设置约束
- Sysmem 会选择可满足所有限制条件的格式。这可以 每个参与者都绑定了其词元并设置约束条件后, 该集合上
- 系统使用该格式分配多个“缓冲区”。
- 参与者从系统内存检索缓冲区,以及 关于分配的格式。
sysmem 返回的信息是映像的一组约束条件, 所有格式。
此时,参与者可以使用具有已分配格式的缓冲区, 它们之间的数据传输 参与者。由于在一个缓冲区中可以使用多种尺寸的图片, 参与者必须共同选择图片大小 确定精确的图片格式。这样,流水线就可以 而无需重新分配缓冲区。
如果需要将新参与者添加到包含 经过约束协商和分配,则可将新令牌 attached 到缓冲区集合。新参与者的 限制使用已分配的缓冲区集合, 或者逻辑分配(从新参与者的角度来看)失败。 为了提高成功添加新参与者的几率, 的参与者可以在初始分配期间标记令牌 不可或缺的。这样,您就可以使用令牌来指定 内置约束条件,以使缓冲区收集能够 以适应具有相同限制条件的新参与者。
缓冲区销毁
必须先移除对缓冲区的所有引用,然后 sysmem 才会销毁该缓冲区并 以便重复使用示例包括:
术语库
缓冲区
缓冲区表示应用的单个图像或其他内存块 所有文件。Sysmem 目前对每个缓冲区使用一个 VMO。客户端可以 将内存映射到 CPU 上,或将其固定在硬件上 。
参与者
参与者是想要访问缓冲区的任何应用或驱动程序。全部 参与者必须连接到 sysmem 才能协商内存格式。
映像格式
图片格式是广告素材展示所需的一系列属性, 将内存解释为一组像素。例如,它包含 像素格式、宽度和高度的尺寸、行之间的行间距(以字节为单位), 和颜色空间
缓冲区设置
缓冲区设置是对 缓冲区的属性。其中包括缓存信息 添加参与者在访问内存时可能需要使用的属性对于图片 缓冲区设置还将具有图片格式。
缓冲区设置不包含具体的内存地址,因此多个 可以使用相同的缓冲区设置。
堆
堆表示系统上一种特定类型的内存。答 系统可能有多个具有不同性能特征的堆 相互通信。某些堆可能只能通过一部分硬件使用 应用。
某些堆可能无法从 CPU 访问。对于这些堆,VMO 表示缓冲区不能直接使用,而是用作键。 希望使用缓冲区的应用必须将其 VMO 句柄发送到堆 驱动程序和堆驱动程序可以返回有关要使用的内存的信息。
示例堆:
- 主系统内存。
- 独立的 GPU 上的 VRAM。
- 系统内存的一个划分区域,仅供 硬件。
约束条件
Constraints 指定 BufferSettings。 参与者通常会在一组中指定多个可能的缓冲设置。 这使得系统内存能够灵活选择任意 降低没有可满足限制条件的设置的风险 所有参与者的评论。
协商
“协商”是一个过程,在此过程中,系统会参考 并选择适合所有参与者的缓冲设置。如果 多项设置可能有效,sysmem 可以使用有关客户端如何 将使用缓冲区和系统架构来选择最佳 设置。
缓冲区收集
缓冲区集合是一组包含所有缓冲区的 相同的缓冲区设置。系统会在 一次。多位参与者可能会向同一缓冲区开放 FIDL 通道 。
缓冲区收集令牌
词元用于 协商过程。令牌可以复制, 在进程之间传递,然后最终绑定到缓冲区 。