新功能
- 動態調度程序:SPDK輕量級線程現在可以動態地調度到SPDK事件框架中的reactor上。調度程序會重新平衡空閒線程,調整CPU頻率,並將空閒的reactor切換到中斷模式。有關詳細信息,請參見https://www.spdk.io/doc/scheduler.html。此功能目前是實驗性的。
- vfio-user用户 NVMe-oF 傳輸類型:添加了對新vfio-user 用户NVMe-oF傳輸類型的支持,模擬NVMe設備通過共享內存到虛擬機或單獨進程的傳輸。此功能目前是實驗性的。
-vfio-user 用户NVMe傳輸類型:添加了對vfio-user 用户NVMe傳輸類型的支持,允許直接從進程連接到模擬的NVMe設備。此功能目前是實驗性的。
- NVMe ZNS Zone Append: 添加了對Zoned Namespace Command Set 中 Zone Append 命令的支持。
- pkg-config: SPDK 現在可以生成 pkg-config 文件,從而簡化了確定哪些庫必須鏈接到 SPDK 應用程序的過程。詳情參見 https://spdk.io/doc/pkgconfig.html
- DPDK: 添加了DPDK 20.11的支持。
從20.01 LTS版本進行更新的用户請注意,舊配置(.ini)文件已刪除,現在支持JSON-RPC。
特別感謝
本次版本包含來自45位作者的587次提交,其中包含超過31,000行代碼更改。我們尤其要感謝在v21.01版本中第一次提交代碼的社區貢獻者:
David Marchand
Feilong Lin
Guo Zhihong
Jiewei Ke
Madhu Adav MJ
Mao Jiang
Michael Bang
Naresh Gottumukkala
Nick Connolly
Roman Penyaev
Rui Chang
ShadowMov
Shihao Sun
Weifeng Su
Zhiqiang Liu
詳細的發佈説明如下
bdev
- 在spdk_bdev_opts結構中添加了opts_size元素,以解決不同SPDK版本之間的ABI兼容性問題。在spdk_bdev_get_opts函數中添加了opts_size參數。在spdk_bdev_opts中添加了兩個字段small_buf_pool_size和large_buf_pool_size,用於確定整個bdev模塊的緩衝池大小。
- 添加了新的API spdk_bdev_wait_for_examine,允許查看examine檢查過程的狀態。連同相應的bdev_wait_for_examine RPC,始終在spdk_bdev_subsystem_config_json期間被調用,確保每個bdev準備就緒。
- 添加了新的API spdk_bdev_io_get_aio_status,以獲取bdev_io作為Linux AIO errno的狀態。還為bdev模塊添加了spdk_bdev_io_complete_aio_status 函數和SPDK_BDEV_IO_STATUS_AIO_ERROR ,完成帶有Linux AIO errno的bdev_io。
- 添加了新的API spdk_bdev_get_module_name以獲取塊設備模塊名稱。此外,還添加了spdk_bdev_get_module_ctx,獲取由指定描述符打開的塊設備的bdev模塊上下文。
- 為bdev模塊的spdk_bdev結構添加了max_segment_size和max_num_segments,以指定拆分需求。
blob
- 在spdk_bs_opts結構中添加了opts_size元素,以解決不同SPDK版本之間的ABI兼容性問題。在spdk_bs_opts_init函數中添加了opts_size參數。
- 在spdk_blob_opts結構中添加了opts_size元素,以解決不同SPDK版本之間的ABI兼容性問題。並在spdk_blob_opts_init函數中添加opts_size參數。
- 在spdk_blob_open_opts結構中添加了opts_size元素,以解決不同SPDK版本之間的ABI兼容性問題。在spdk_blob_open_opts_init函數中添加了opts_size參數。
build
- SPDK 現在可以生成 pkg-config 文件,從而簡化了確定哪些庫必須鏈接到 SPDK 應用程序的過程。
dpdk
- 將DPDK子模塊更新為DPDK 20.11。
- 刪除了--with-igb-uio-driver配置選項。自DPDK 20.11以來,igb_uio驅動程序已移至單獨的dpdk-kmods存儲庫。如有需要,用户可以參考dpdk-kmods存儲庫來構建驅動程序。
env
- spdk_env_opts 結構的 pci_whitelist、pci_blacklist 和 master_core 已被棄用。新成員分別命名為 pci_allowed、pci_blocked 和 main_core。
- 在spdk_app_opts結構中添加了opts_size元素,以解決不同SPDK版本之間的ABI兼容性問題。在spdk_app_opts_init函數中添加了opts_size參數。
event
- spdk_app_opts 結構中的 pci_whitelist 和 pci_blacklist 已被棄用。新成員的分別是 pci_allowed 和 pci_blocked。
- 命令行選項--pci-blacklist已被棄用,由--pci-blocked代替。
- 命令行選項--pci-whitelist / -W已被棄用,由--pci-allowed / -A代替。
- 添加了新的實驗性動態調度程序,該程序可以重新平衡空閒線程,用dpdk_governor調整CPU頻率,並將空閒的reactor內核轉換為中斷模式。有關詳細信息,請參見調度程序文檔(https://www.spdk.io/doc/scheduler.html)。
ioat
- PCI BDF白名單選項已從ioat_scan_accel_engine RPC中刪除。使用SPDK應用程序命令行選項,仍然可以允許或拒絕IOAT PCI功能。
isa-l
- 將ISA-L子模塊更新為v2.30.0。
json
- 添加了 API spdk_jsonrpc_send_bool_response,允許將 json bool 結果寫入函數中發送響應。
- 更新了 API bdev_nvme_set_options 並添加了 keep_alive_timeout_ms 參數。現在你可以在建立 NVMe bdev 之前指定keep_alive_timeout。
nbd
- 將函數spdk_nbd_stop的返回類型從void改為int。用兩個參數更新了spdk_nbd_fini,使其行為從同步變為異步。
nvme
- 在NVMe驅動中添加了指令支持。
- 添加了兩個異步API spdk_nvme_ctrlr_cmd_directive_receive和spdk_nvme_ctrlr_cmd_directive_send,分別用於指令發送和指令接收命令。
- 添加了新函數spdk_nvme_ctrlr_reset_subsystem以執行NVMe子系統重置。注意:NVMe-oF target尚不支持子系統復位。
- 添加了新函數spdk_nvme_bytes_to_numd將字節傳輸到多個dwords。
- 添加了新的自定義傳輸SPDK_NVME_TRANSPORT_VFIOUSER,使NVMe驅動能夠通過vfio-user target連接NVMe。
- 在NVMe驅動中添加了vfio-user自定義傳輸的實現,由vfio-user傳輸通過vfio-user target連接NVMe。
- 添加了新函數spdk_nvme_ctrlr_set_remove_cb來刪除或覆蓋在controller探測時指定的remove_cb和remove_ctx。
- 通過新的API spdk_nvme_zns_zone_append和spdk_nvme_zns_zone_append_with_md,添加了對ZNS zone append命令的支持。
nvmf
- nvmf_fc_lld_fini現在接受回調,因此需要將FC Broadcom LLD驅動程序更新為最新版本。
- FC傳輸支持primary tagging和VMID。
- Broadcom FC LLD驅動程序和SPDK NVMe-oF FC將LLD API nvmf_fc_init_poller_queues整合到另一個LLD API nvmf_fc_init_q中。因此,需要將Broadcom FC LLD驅動程序更新為最新版本。
- 傳輸接口中的destroy和qpair_fini函數現在接受cb_fn和cb_arg在完成時進行調用,它們的執行可以是異步的。
- SPDK NVMe-oF target現在支持用於發現日誌更改的異步事件通知。這允許啓動程序創建與discovery controller的持久連接,並接收日誌更改的通知。
- 在spdk_nvmf_transport_opts結構中添加了opts_size元素,以解決不同SPDK版本之間的ABI兼容性問題。並在spdk_nvmf_transport_opts_init函數中添加opts_size參數。
- 在NVMe-oF中添加了新的自定義vfio-user用户傳輸類型實現,可以將模擬的NVMe設備提供給QEMU和SPDK NVMe驅動程序。
- 添加了新的 API spdk_nvmf_tgt_listen_ext,用 spdk_nvmf_listen_opts 將通用選項傳遞給特定的傳輸,取代了nvmf_subsystem_set_options 提供的功能,同時刪除了在子系統中使用特定傳輸選項的 nvmf_subsystem_set_options RPC。
- nvmf_subsystem_add_listener RPC 中的 trsvcid 現在是可選的。
- 目前,暫停子系統只會暫停所有管理隊列。無須完全暫停子系統,即可管理主機和監聽器,以及添加命名空間。此外,target現在允許暫停子系統內的單個命名空間。要從子系統中刪除一個命名空間,只須暫停特定的命名空間。在執行這些操作時,其他命名空間的 I/O 將繼續進行。
rpc
- RPC iscsi_create_portal_group添加了新的可選參數wait,並添加了一個新的RPC iscsi_start_portal_group。在啓動時創建所有關聯的目標節點之前,它們不會監聽門户網站組的門户網站。否則在SPDK iSCSI目標應用程序重啓時,某些iSCSI啓動器可能無法重新登錄。
- bdev_set_options函數中添加了兩個可選參數--small-buf-pool-size和--large-buf-pool-size。
vhost
- 在vhost_create_blk_controller RPC中添加了可選的packed_ring_recovery參數,同時支持在線恢復功能以啓用壓縮ring實時恢復。