| RFC-0014:放寬 zx_fifo_create 限制 | |
|---|---|
| 狀態 | 已接受 |
| 區域 |
|
| 說明 | 允許使用元素計數 (非 2 的乘冪) 呼叫 `zx_fifo_create`。 |
| 問題 | |
| 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 中新增。
說明文件
根據新放寬的限制,我們已在 https://fuchsia-review.googlesource.com/c/fuchsia/+/409498 調整 zx_fifo_create 說明文件。
缺點、替代方案和未知事項
無。
既有技術和參考資料
無。