系统概览

Sysmem 是一种 FIDL 服务,用于为 Cloud Storage 中的 由多个应用和硬件块使用。本文档介绍了 主要功能及其为系统提供的功能概览。

设计初衷

现代系统都有专用硬件块, 数据。下面列举了一些此类块:

  • 使用 GPU 渲染计算机图形。
  • 使用硬件编解码器对视频进行编码或解码。
  • 使用相机和 DSP 拍摄高品质照片。
  • 使用显示控制器的叠加层将图像合成到显示屏 引擎。
  • 使用 TPU 评估神经网络。

通常,我们需要创建流水线,在它们之间传递数据, 硬件块。请参见以下示例:

  • 使用硬件编解码器解码视频并将其合成到显示屏 以及呈现在 GPU 上的界面内容
  • 将神经网络应用于实时摄像头画面。

为了高效地完成这些操作并避免复制,驱动程序和应用必须同意 以及数据在内存中的位置。这个 一个单位的输出可以直接用于下一个单位。 硬件单元对这些属性有严格的限制,而且 确定哪种数据布局可实现最佳效果。

Sysmem 是一项全球性服务 分配缓冲区,以便满足所有约束条件。如果有多种格式 则可根据预期效果从这些方面进行选择。

系统内存通常用于表示图片,而系统内存则具有特殊的 支持协商图片格式不过,sysmem 接口也可以 用于音频或任何其他类型的数据。

分配缓冲区后,系统不再管理数据流。 流水线中的应用负责协调 其他以确保同步。

分配流程(简化)

  1. 参与者会连接到 fuchsia.sysmem2.Allocator 服务
  2. 一个参与者(称为发起者)创建一个初始 缓冲区收集令牌
  3. 该参与者复制令牌,并将副本发送给其他参与者 参与者。
  4. 这些参与者还可以以递归方式复制和发送令牌, 所有参与者都收到了一个令牌。
  5. 每个参与者都绑定自己的令牌以获取缓冲区集合。
  6. 每个参与者都对缓冲区收集设置约束
  7. Sysmem 会选择可满足所有限制条件的格式。这可以 每个参与者都绑定了其词元并设置约束条件后, 该集合上
  8. 系统使用该格式分配多个“缓冲区”。
  9. 参与者从系统内存检索缓冲区,以及 关于分配的格式。

sysmem 返回的信息是映像的一组约束条件, 所有格式。

此时,参与者可以使用具有已分配格式的缓冲区, 它们之间的数据传输 参与者。由于在一个缓冲区中可以使用多种尺寸的图片, 参与者必须共同选择图片大小 确定精确的图片格式。这样,流水线就可以 而无需重新分配缓冲区。

如果需要将新参与者添加到包含 经过约束协商和分配,则可将新令牌 attached 到缓冲区集合。新参与者的 限制使用已分配的缓冲区集合, 或者逻辑分配(从新参与者的角度来看)失败。 为了提高成功添加新参与者的几率, 的参与者可以在初始分配期间标记令牌 不可或缺的。这样,您就可以使用令牌来指定 内置约束条件,以使缓冲区收集能够 以适应具有相同限制条件的新参与者。

缓冲区销毁

必须先移除对缓冲区的所有引用,然后 sysmem 才会销毁该缓冲区并 以便重复使用示例包括:

术语库

缓冲区

缓冲区表示应用的单个图像或其他内存块 所有文件。Sysmem 目前对每个缓冲区使用一个 VMO。客户端可以 将内存映射到 CPU 上,或将其固定在硬件上 。

参与者

参与者是想要访问缓冲区的任何应用或驱动程序。全部 参与者必须连接到 sysmem 才能协商内存格式。

映像格式

图片格式是广告素材展示所需的一系列属性, 将内存解释为一组像素。例如,它包含 像素格式、宽度和高度的尺寸、行之间的行间距(以字节为单位), 和颜色空间

缓冲区设置

缓冲区设置是对 缓冲区的属性。其中包括缓存信息 添加参与者在访问内存时可能需要使用的属性对于图片 缓冲区设置还将具有图片格式。

缓冲区设置不包含具体的内存地址,因此多个 可以使用相同的缓冲区设置。

表示系统上一种特定类型的内存。答 系统可能有多个具有不同性能特征的堆 相互通信。某些堆可能只能通过一部分硬件使用 应用。

某些堆可能无法从 CPU 访问。对于这些堆,VMO 表示缓冲区不能直接使用,而是用作键。 希望使用缓冲区的应用必须将其 VMO 句柄发送到堆 驱动程序和堆驱动程序可以返回有关要使用的内存的信息。

示例堆:

  • 主系统内存。
  • 独立的 GPU 上的 VRAM。
  • 系统内存的一个划分区域,仅供 硬件。

约束条件

Constraints 指定 BufferSettings。 参与者通常会在一组中指定多个可能的缓冲设置。 这使得系统内存能够灵活选择任意 降低没有可满足限制条件的设置的风险 所有参与者的评论。

协商

“协商”是一个过程,在此过程中,系统会参考 并选择适合所有参与者的缓冲设置。如果 多项设置可能有效,sysmem 可以使用有关客户端如何 将使用缓冲区和系统架构来选择最佳 设置。

缓冲区收集

缓冲区集合是一组包含所有缓冲区的 相同的缓冲区设置。系统会在 一次。多位参与者可能会向同一缓冲区开放 FIDL 通道 。

缓冲区收集令牌

词元用于 协商过程。令牌可以复制, 在进程之间传递,然后最终绑定到缓冲区 。