RFC-0014:放寬 zx_fifo_create 限制 | |
---|---|
狀態 | 已接受 |
區域 |
|
說明 | 允許 `zx_fifo_create` 呼叫的元素數量不是 2 的冪次方。 |
問題 | |
Gerrit 變更 | |
作者 | |
審查人員 | |
提交日期 (年-月-日) | 2020-12-02 |
審查日期 (年-月-日) | 2020-12-09 |
摘要
zx_fifo_create
目前要求呼叫端傳遞的元素計數必須是 2 的冪次方。這可讓核心使用位元遮罩 (而非模數運算子) 來判斷緩衝區中包裝記錄的偏移量,進而對讀取和寫入路徑進行小幅最佳化。
這項限制表示如果元素大小並非 4096/(2**n)
個位元組,使用者就無法有效地將 FIFO 用到其完整容量;在這種情況下,FIFO 容量 (element_size * element_count
) 會小於 FIFO 的可能完整容量 (在內部使用 4096
位元組緩衝區)。
建議可讓 FIFO 使用任意元素數量 (最多為 FIFO 大小限制) 建立,這樣就能將完整的 FIFO 容量用於任意大小的 FIFO 記錄。
提振精神
這項提案的動機,是希望在區塊堆疊中使用的現有 FIFO 記錄中新增欄位;這個欄位是追蹤 ID,將用於支援區塊 I/O 的跨程序追蹤。新增這個欄位會將 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 中實作的簡單變更。
成效
核心目前可以進行小幅效能最佳化,因為它知道元素計數是 2 的冪次方;特別是,核心可以使用位元運算 AND 來判斷元素在內部緩衝區的位置,而非模數。
不過,由於在核心和使用者空間之間來回跳轉會造成效能損失,因此這項效能最佳化調整就會失效。
具體來說,https://fuchsia-review.googlesource.com/c/fuchsia/+/409498 的效能測試結果顯示,移除這項最佳化功能不會造成任何可測量的效能成本。
安全性考量
無。
隱私權注意事項
無。
測試
這是一個簡單的變更,https://fuchsia-review.googlesource.com/c/fuchsia/+/409498 中已新增測試。
說明文件
zx_fifo_create
說明文件已根據新的放寬限制進行調整,詳情請見 https://fuchsia-review.googlesource.com/c/fuchsia/+/409498。
缺點、替代方案和未知事項
無。
既有技術與參考資料
無。