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 會允許 102
的 element_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
說明文件。
缺點、替代方案和未知
無。
先前的圖片和參考資料
無。