RFC-0014:放宽 zx_fifo_create 约束条件

RFC-0014:放宽 zx_fifo_create 约束条件
状态已接受
区域
  • 内核
说明

允许 `zx_fifo_create` 调用的元素数不是二的幂。

问题
Gerrit 更改
作者
审核人
提交日期(年-月-日)2020-12-02
审核日期(年-月-日)2020-12-09

摘要

zx_fifo_create 目前要求调用方传递一个为二的幂的元素数。这样,内核就可以使用位掩码(而非模运算符)来确定缓冲区中已封装记录的偏移量,从而对读取和写入路径进行微小优化。

这项约束意味着,如果元素大小不是 4096/(2**n) 字节,用户将无法有效地将 FIFO 用到其满容量;在这些情况下,FIFO 容量 (element_size * element_count) 将小于 FIFO 的可能满容量(内部使用 4096 字节的缓冲区)。

该提案旨在允许创建包含任意元素数(不超过 FIFO 大小限制)的 FIFO,以便将整个 FIFO 容量用于任意大小的 FIFO 记录。

设计初衷

提出此提案的目的是向块堆栈中使用的现有 FIFO 记录添加一个字段;相关字段是跟踪标识符,将用于支持对块 IO 进行跨进程跟踪。添加此字段会将 FIFO 记录的大小从 32 个字节更改为 40 个字节。

如果 FIFO 记录的长度为 40 字节,则 element_count 当前可设置的最大值为 64,这会导致 4096 字节缓冲区中使用 40 * 64 = 2560 字节。

此 RFC 允许 element_count 值为 102,这会导致使用 40 * 102 = 4080 字节(几乎使 FIFO 的可用容量翻了一番)。

设计

这是一个微不足道的更改,已在 https://fuchsia-review.googlesource.com/c/fuchsia/+/409498 中实现。

实现

这是一个微不足道的更改,已在 https://fuchsia-review.googlesource.com/c/fuchsia/+/409498 中实现。

性能

内核目前可以进行一些小幅性能优化,因为它知道元素数量是二的幂;具体而言,内核可以使用按位与运算来确定元素在内部缓冲区中的位置,而不是模运算。

不过,鉴于在内核和用户空间之间来回跳转的开销,这种性能优化会被抵消。

具体而言:https://fuchsia-review.googlesource.com/c/fuchsia/+/409498 中的性能测试表明,移除此优化不会造成任何可衡量的性能开销。

安全注意事项

无。

隐私注意事项

无。

测试

这是一个微不足道的更改,https://fuchsia-review.googlesource.com/c/fuchsia/+/409498 中添加了相关测试。

文档

在 https://fuchsia-review.googlesource.com/c/fuchsia/+/409498 中,根据新的放宽限制调整了 zx_fifo_create 文档。

缺点、替代方案和未知情况

无。

在先技术和参考文档

无。