Null 塊裝置驅動程式¶
概述¶
null 塊裝置(/dev/nullb*)用於對各種塊層實現進行基準測試。它模擬一個 X GB 大小的塊裝置。它不執行任何讀/寫操作,只是在請求佇列中將它們標記為完成。支援以下例項:
多佇列塊層
基於請求。
每個裝置可配置提交佇列。
無塊層(稱為 bio-based)
基於 bio。IO 請求直接提交給裝置驅動程式。
直接接受 bio 資料結構並返回它們。
所有這些在系統中每個核心都有一個完成佇列。
模組引數¶
- queue_mode=[0-2]: 預設值: 2-Multi-queue (多佇列)
選擇模組應例項化的塊層。
0
基於 Bio
1
單佇列(已棄用)
2
多佇列
- home_node=[0--nr_nodes]: 預設值: NUMA_NO_NODE
選擇資料結構從哪個 CPU 節點分配。
- gb=[大小,單位 GB]: 預設值: 250GB
向系統報告的裝置大小。
- bs=[塊大小(單位位元組)]: 預設值: 512 位元組
向系統報告的塊大小。
- nr_devices=[裝置數量]: 預設值: 1
例項化的塊裝置數量。它們被例項化為 /dev/nullb0 等。
- irqmode=[0-2]: 預設值: 1-Soft-irq (軟中斷)
用於向塊層完成 IO 的完成模式。
0
無。
1
軟中斷。使用 IPI 跨 CPU 節點完成 IO。模擬當 IO 從與裝置連線的 home 節點不同的 CPU 節點發出時的開銷。
2
定時器: 在每個 IO 完成前等待特定時間(completion_nsec)。
- completion_nsec=[ns]: 預設值: 10,000ns
結合 irqmode=2 (定時器)。每個完成事件必須等待的時間。
- submit_queues=[1..nr_cpus]: 預設值: 1
連線到裝置驅動程式的提交佇列數量。如果未設定,則預設為 1。對於多佇列,當 use_per_node_hctx 模組引數為 1 時,此引數被忽略。
- hw_queue_depth=[0..qdepth]: 預設值: 64
裝置的硬體佇列深度。
- memory_backed=[0/1]: 預設值: 0
是否使用記憶體緩衝區響應 IO 請求
0
不傳輸資料以響應 IO 請求
1
使用記憶體緩衝區響應 IO 請求
- discard=[0/1]: 預設值: 0
支援丟棄操作(需要記憶體支援的 null_blk 裝置)。
0
不支援丟棄操作
1
啟用丟棄操作支援
- cache_size=[大小,單位 MB]: 預設值: 0
記憶體支援裝置的快取大小(單位 MB)。
- mbps=[最大頻寬,單位 MB/s]: 預設值: 0(無限制)
裝置效能的頻寬限制。
多佇列特定引數¶
- use_per_node_hctx=[0/1]: 預設值: 0
硬體上下文佇列的數量。
0
提交佇列的數量設定為 submit_queues 引數的值。
1
多佇列塊層針對系統中每個 CPU 節點例項化一個硬體排程佇列。
- no_sched=[0/1]: 預設值: 0
啟用/停用 IO 排程器。
0
nullb* 使用預設的 blk-mq IO 排程器
1
nullb* 不使用 IO 排程器
- blocking=[0/1]: 預設值: 0
請求佇列的阻塞行為。
0
註冊為非阻塞 blk-mq 驅動裝置。
1
註冊為阻塞 blk-mq 驅動裝置,null_blk 將設定 BLK_MQ_F_BLOCKING 標誌,表明它有時/總是需要在其 ->queue_rq() 函式中阻塞。
- shared_tags=[0/1]: 預設值: 0
裝置間共享標籤。
0
標籤集不共享。
1
blk-mq 裝置間共享標籤集。僅在 nr_devices > 1 時有意義,否則沒有標籤集可共享。
- zoned=[0/1]: 預設值: 0
裝置是隨機訪問或分割槽塊裝置。
0
塊裝置暴露為隨機訪問塊裝置。
1
塊裝置暴露為主機管理的分割槽塊裝置。需要 CONFIG_BLK_DEV_ZONED。
- zone_size=[MB]: 預設值: 256
當暴露為分割槽塊裝置時,每個分割槽的大小。必須是 2 的冪。
- zone_nr_conv=[nr_conv]: 預設值: 0
當塊裝置為分割槽裝置時要建立的常規分割槽數量。如果 zone_nr_conv >= nr_zones,它將被減少到 nr_zones - 1。