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。