RFC-0014:放寬 zx_fifo_create 限制

RFC-0014:放寬 zx_fifo_create 限制
狀態已接受
區域
  • 核心
說明

允許使用非 2 次冪的元素計數允許 `zx_fifo_create` 呼叫。

問題
變更
作者
審查人員
提交日期 (年/月)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 記錄新增欄位;上述欄位是追蹤記錄 ID,可用於支援區塊 IO 的跨程序追蹤。新增這個欄位會將 FIFO 記錄的大小從 32 個位元組變更為 40 個位元組。

如果 FIFO 記錄的長度為 40 個位元組,則 element_count 目前可設為 64 的最大值,導致 4096 位元組緩衝區中使用 40 * 64 = 2560 個位元組。

這個 RFC 會允許 102element_count 值,進而產生 40 * 102 = 4080 位元組 (幾乎將 FIFO 的可用容量增加一倍)。

設計

這是一項簡單的調整,也適用於 https://fuchsia-review.googlesource.com/c/fuchsia/+/409498

實作

這是一項簡單的調整,也適用於 https://fuchsia-review.googlesource.com/c/fuchsia/+/409498

效能

核心目前可以進行小型的效能最佳化,因為元素計數是 2 的功率;特別是核心可以利用位元 AND 確定元素在內部緩衝區中的位置,而非模數。

話雖如此,由於我們在核心和使用者空間之間來回切換,導致這類效能最佳化作業難以執行。

具體而言:在 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 說明文件。

缺點、替代方案和未知

無。

先前的圖片和參考資料

無。