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
文档。
缺点、替代方案和未知情况
无。
在先技术和参考文档
无。