1aa61dc50SDaniel Verkamp# Changelog 204cde460SDaniel Verkamp 3ec7092bcSKonrad Sztyber## v25.01: (Upcoming Release) 4ec7092bcSKonrad Sztyber 595d9d27fSMarcin Spiewak### bdev_nvme 695d9d27fSMarcin Spiewak 795d9d27fSMarcin SpiewakAdded controller configuration consistency check, so all controllers created with the same name will 895d9d27fSMarcin Spiewakbe forced to have consistent setting, either multipath or failover. No mixing of different '-x' 995d9d27fSMarcin Spiewakoptions will be allowed. 1095d9d27fSMarcin Spiewak 1195d9d27fSMarcin SpiewakChanged default mode: if no '-x' option is specified in bdev_nvme_attach_controller RPC call, 1295d9d27fSMarcin Spiewakthe multipath mode will be assigned as a default. 1395d9d27fSMarcin Spiewak 14*2a91567eSMarcin SpiewakChanged `spdk_bdev_nvme_create` API function, the `multipath` parameter was removed as it is redundant 1595d9d27fSMarcin Spiewakto `multipath` field in spdk_bdev_nvme_ctrlr_opts structure passed as a parameter to this function. 1695d9d27fSMarcin SpiewakIf multipathing shall be enabled for nvme bdev, `bdev_opts.multipath` shall be set to `true`. When 1795d9d27fSMarcin Spiewak`bdev_opts.multipath` is set to `false`, failover mode is enabled. 1895d9d27fSMarcin Spiewak 19a0c12854SYash Raj SinghAdded public APIs `spdk_bdev_nvme_get_opts` and `spdk_bdev_nvme_set_opts` to get default bdev nvme 20a0c12854SYash Raj Singhoptions and set them respectively. 21a0c12854SYash Raj Singh 22f8259c91SAnkit Kumar### env 23f8259c91SAnkit Kumar 24f8259c91SAnkit KumarAdded 3 APIs to handle multiple interrupts for PCI device `spdk_pci_device_enable_interrupts()`, 25f8259c91SAnkit Kumar`spdk_pci_device_disable_interrupts()`, and `spdk_pci_device_get_interrupt_efd_by_index()`. 26f8259c91SAnkit Kumar 273ab7a1f6SAnkit Kumar### nvme 283ab7a1f6SAnkit Kumar 293ab7a1f6SAnkit KumarAdded `enable_interrupts` option to `spdk_nvme_ctrlr_opts`. If set to true then interrupts may be 303ab7a1f6SAnkit Kumarenabled during initialization. Make sure to check the resulting value after the attach step to 313ab7a1f6SAnkit Kumarcheck for success. This mode is currently only supported for PCIe transport. This is only 323ab7a1f6SAnkit Kumarsupported within a primary SPDK process, and if enabled SPDK will not support secondary processes. 333ab7a1f6SAnkit Kumar 3428b353a5SAnkit KumarAdded APIs `spdk_nvme_qpair_get_fd()` and `spdk_nvme_ctrlr_get_admin_qp_fd()` to retrieve the file 3528b353a5SAnkit Kumardescriptor for an I/O and the admin queue pair of a given NVMe controller respectively. 3628b353a5SAnkit KumarThese APIs accept `spdk_event_handler_opts` structure, and if specified the transport layer will 3728b353a5SAnkit Kumarfill it out which can be used by the application to register interrupts on the queue pairs. 3828b353a5SAnkit Kumar 39f43b7650SAnkit KumarAdded `opts_size` in `spdk_nvme_io_qpair_opts` structure to align it with other opts structures. 40f43b7650SAnkit Kumar 416de68644SAnkit Kumar`spdk_nvme_poll_group_create()` now creates a fd group to manage interrupt events. 426de68644SAnkit Kumar 436de68644SAnkit KumarTwo new APIs have been added to manage interrupt events in poll group. 446de68644SAnkit Kumar 456de68644SAnkit Kumar`spdk_nvme_poll_group_get_fd()` retrieves the internal epoll file descriptor of the poll group. 466de68644SAnkit Kumar 476de68644SAnkit Kumar`spdk_nvme_poll_group_wait()` waits for interrupt events on all the I/O queue pair file descriptors 486de68644SAnkit Kumarin a poll group. When an interrupt event gets generated, it processes any outstanding completions 496de68644SAnkit Kumaron the I/O queue pair with interrupts. These interrupt events are registered at the the time of I/O 506de68644SAnkit Kumarqueue pair creation. 516de68644SAnkit Kumar 525a8c76d9SAbhineet Pandey### nvmf 535a8c76d9SAbhineet Pandey 545a8c76d9SAbhineet PandeyAdded public API `spdk_nvmf_send_discovery_log_notice` to send discovery log page 555a8c76d9SAbhineet Pandeychange notice to client. 565a8c76d9SAbhineet Pandey 5711f129eeSYankun Li### reduce 5811f129eeSYankun Li 5911f129eeSYankun LiAdd `spdk_reduce_vol_get_info()` to get the information for the compressed volume. 6011f129eeSYankun Li 613f50defdSAnkit Kumar### thread 623f50defdSAnkit Kumar 633f50defdSAnkit KumarAdded `spdk_interrupt_register_ext()` API which can receive `spdk_event_handler_opts` structure. 643f50defdSAnkit KumarThis is to prevent any further expansion of `spdk_interrupt_register()` API. 653f50defdSAnkit Kumar 6691e7a24cSAnkit Kumar### util 6791e7a24cSAnkit Kumar 6891e7a24cSAnkit KumarAdded `spdk_fd_group_add_ext()` API which can receive `spdk_event_handler_opts` structure. This is 6991e7a24cSAnkit Kumarto prevent any further expansion of `spdk_fd_group_add()` API. 7091e7a24cSAnkit Kumar 71ec7092bcSKonrad Sztyber## v24.09 72cf8ec7cfSTomasz Zawadzki 7399a675b4SKonrad Sztyber### accel 7499a675b4SKonrad Sztyber 7599a675b4SKonrad SztyberAdded `spdk_accel_submit_compress_ext()` and `spdk_accel_submit_decompress_ext()` API. They differ 7699a675b4SKonrad Sztyberfrom the non-ext variants in that these functions allow users to specify a compression algorithm and 7799a675b4SKonrad Sztybercompression level. 7899a675b4SKonrad Sztyber 7999a675b4SKonrad SztyberAdded `spdk_accel_get_compress_level_range()` to get the valid level range of a given compression 8099a675b4SKonrad Sztyberalgorithm. 8199a675b4SKonrad Sztyber 8299a675b4SKonrad SztyberAdded API to generate and verify DIX. 8399a675b4SKonrad Sztyber 8499a675b4SKonrad SztyberAdded append version of `dif_verify`, `dif_verify_copy`, `dif_generate`, and `dif_generate_copy`. 8599a675b4SKonrad Sztyber 8699a675b4SKonrad SztyberAdded support for lz4 compression. 8799a675b4SKonrad Sztyber 885b2687baSBen Walker### bdev 895b2687baSBen Walker 905b2687baSBen Walker`spdk_bdev_io_get_aux_buf` and `spdk_bdev_io_put_aux_buf` are deprecated and 915b2687baSBen Walkerwill be removed in the 25.01 release. We do not believe these are in use currently. 925b2687baSBen Walker 9399a675b4SKonrad Sztyber### bdev_compress 9499a675b4SKonrad Sztyber 9599a675b4SKonrad SztyberAdded support for specifying compression algorithm and level. 9699a675b4SKonrad Sztyber 97dd98a248SMehakjot Singh Sidhu### bdev_nvme 98dd98a248SMehakjot Singh Sidhu 99dd98a248SMehakjot Singh SidhuIntroduced new header file /module/bdev/nvme.h and added public APIs `spdk_bdev_nvme_create`, 100dd98a248SMehakjot Singh Sidhu`spdk_bdev_nvme_set_multipath_policy` and `spdk_bdev_nvme_get_default_ctrlr_opts` 10118301495SKonrad Sztyberto get connectivity and multipathing capabilities of `bdev_nvme`. 102dd98a248SMehakjot Singh Sidhu 10399a675b4SKonrad SztyberAdded `bdev_nvme_set_keys` RPC to change DH-HMAC-CHAP keys and force reauthentication of all qpairs 10499a675b4SKonrad Sztyberof a controller. 10599a675b4SKonrad Sztyber 106172d5791SShuhei Matsumoto### dif 107172d5791SShuhei Matsumoto 108172d5791SShuhei MatsumotoEach element in `enum spdk_dif_pi_format` was subtracted by 1 to match the definition 109172d5791SShuhei Matsumotoof the Protection Information Format in the NVMe specification. This is necessary change 110172d5791SShuhei Matsumotobut breaks ABI compatibility. Please recompile your application if you added code using 111172d5791SShuhei Matsumotothis enum of older SPDK. 112172d5791SShuhei Matsumoto 11399a675b4SKonrad Sztyber### dma 11499a675b4SKonrad Sztyber 11599a675b4SKonrad SztyberAdded `spdk_memory_domain_transfer_data()` function to transfer data between two memory domains. 11699a675b4SKonrad Sztyber 11718301495SKonrad Sztyber### env 11818301495SKonrad Sztyber 11918301495SKonrad SztyberAdded `spdk_env_core_get_smt_cpuset()` API to get the list of SMT sibling 12018301495SKonrad Sztybercores for a given core ID. 12118301495SKonrad Sztyber 12299a675b4SKonrad SztyberAdded `spdk_pci_device_get_numa_id()`, `spdk_env_get_numa_id()`, and `SPDK_ENV_NUMA_ID_ANY` to 12399a675b4SKonrad Sztyberreplace `socket_id` with `numa_id` when referring to a NUMA node. 12499a675b4SKonrad Sztyber 12599a675b4SKonrad SztyberAdded `spdk_env_get_first_numa_id()`, `spdk_env_get_last_numa_id()`, `spdk_env_get_next_numa_id()`, 12699a675b4SKonrad Sztyberand `SPDK_ENV_FOREACH_NUMA_ID()` API to iterate over available NUMA nodes in a system. 12799a675b4SKonrad Sztyber 12899a675b4SKonrad SztyberAdded `enforce_numa` option to `spdk_env_opts`. This option forces all hugepage memory 12999a675b4SKonrad Sztyberallocations to allocate memory only from the specified NUMA node without trying to fallback to other 13099a675b4SKonrad SztyberNUMA nodes if it fails. 13199a675b4SKonrad Sztyber 13218301495SKonrad Sztyber### env_dpdk 13318301495SKonrad Sztyber 13418301495SKonrad Sztyber`spdk_get_tid` is added to get the tid of the current thread. 13518301495SKonrad Sztyber 13618301495SKonrad Sztyber### event 13718301495SKonrad Sztyber 13818301495SKonrad SztyberThe `framework_get_reactors` RPC method supports getting pid and tid. 13918301495SKonrad Sztyber 14099a675b4SKonrad Sztyber### fsdev 14199a675b4SKonrad Sztyber 14299a675b4SKonrad SztyberAdded the fsdev library providing a filesystem abstraction. 14399a675b4SKonrad Sztyber 14499a675b4SKonrad Sztyber### fuse_dispatcher 14599a675b4SKonrad Sztyber 14699a675b4SKonrad SztyberAdded the `fuse_dispatcher` library that manages fsdevs and implements FUSE <-> fsdev API 14799a675b4SKonrad Sztybertranslation. 14899a675b4SKonrad Sztyber 14999a675b4SKonrad Sztyber### idxd 15099a675b4SKonrad Sztyber 15199a675b4SKonrad SztyberAdded `spdk_idxd_submit_dix_generate()` function to generate DIX using DSA. 15299a675b4SKonrad Sztyber 15399a675b4SKonrad Sztyber### nvme 15499a675b4SKonrad Sztyber 15599a675b4SKonrad SztyberAdded `spdk_nvme_ctrlr_set_keys()`, `spdk_nvme_ctrlr_authenticate()`, and 15699a675b4SKonrad Sztyber`spdk_nvme_qpair_authenticate()` API to change the DH-HMAC-CHAP keys of a given controller and force 15799a675b4SKonrad Sztyberreauthentication on its qpairs. 15899a675b4SKonrad Sztyber 15918301495SKonrad Sztyber### nvmf 16018301495SKonrad Sztyber 16118301495SKonrad SztyberAdded support for interrupt mode in the NVMe-of TCP transport. 16218301495SKonrad Sztyber 16318301495SKonrad SztyberEnable iobuf based queuing for nvmf requests when there is not enough free buffers available. 16418301495SKonrad SztyberPerspective from the user of the `spdk_nvmf_request_get_buffers()` API is that whenever all iovecs 16518301495SKonrad Sztyberare allocated immediately then nothing changes compared to the previous implementation. 16618301495SKonrad SztyberIf iobuf does not have enough buffers then there are two flows now: 16718301495SKonrad Sztyber 16818301495SKonrad Sztyber- if `req_get_buffers_done` is not set in the `spdk_nvmf_transport_ops` then again, nothing 16918301495SKonrad Sztyber changes. All (if there were any) ioves are released and caller must try again later. 17018301495SKonrad Sztyber- if callback was set then caller will be notified once all iovecs are allocated. 17118301495SKonrad Sztyber 17218301495SKonrad SztyberAs requests waiting for the buffer might get aborted, another API to remove such request from 17318301495SKonrad Sztyberthe iobuf queue is also added. 17418301495SKonrad Sztyber 17518301495SKonrad SztyberAdded public API `spdk_nvmf_subsystem_set_cntlid_range()` to set controller ID range for a 17618301495SKonrad Sztybersubsystem. 17718301495SKonrad Sztyber 17899a675b4SKonrad SztyberAdded `nvmf_subsystem_set_keys` RPC to change DH-HMAC-CHAP keys for a given subsystem/host pair 17999a675b4SKonrad Sztyberwithout having to remove and readd a host. 18099a675b4SKonrad Sztyber 18199a675b4SKonrad SztyberAdded `spdk_nvmf_subsystem_set_ns_ana_group()` function to change ANA group ID of an active 18299a675b4SKonrad Sztybernamespace of a subsystem. 18399a675b4SKonrad Sztyber 18418301495SKonrad Sztyber### scheduler 18518301495SKonrad Sztyber 18618301495SKonrad SztyberAdded `framework_get_governor` RPC to retrieve the power governor name, 18718301495SKonrad Sztyberpower env and the frequencies available, frequency set to the cpu cores. 18818301495SKonrad Sztyber 18918301495SKonrad Sztyber### sock 19018301495SKonrad Sztyber 19118301495SKonrad SztyberNew functions that allows to register interrupt for given socket group: 19218301495SKonrad Sztyber`spdk_sock_group_register_interrupt()` and `spdk_sock_group_unregister_interrupt()`. Both uses API 19318301495SKonrad Sztyberexposed by the thread.h, see below for details. Support implemented only for the POSIX and SSL 19418301495SKonrad Sztybersockets. 19518301495SKonrad Sztyber 19618301495SKonrad Sztyber### thread 19718301495SKonrad Sztyber 19818301495SKonrad SztyberNew function `spdk_interrupt_register_for_events()` build on top of `spdk_fd_group_add_for_events()`. 19918301495SKonrad SztyberSee below for details. 20018301495SKonrad Sztyber 20153be3bd8SAlexey Marchuk### util 20253be3bd8SAlexey Marchuk 20353be3bd8SAlexey MarchukNew function `spdk_fd_group_add_for_events()` was added alongside the existing `spdk_fd_group_add()`. 20453be3bd8SAlexey MarchukDifference is that new API allows for specifying a set of events to be monitored instead of default 20518301495SKonrad Sztyber`SPDK_INTERRUPT_EVENT_IN`. 20653be3bd8SAlexey Marchuk 20753be3bd8SAlexey MarchukAdded API to calculate md5 hash. 20853be3bd8SAlexey Marchuk 209cf8ec7cfSTomasz Zawadzki## v24.05 210e0741e53STomasz Zawadzki 211194983eeSJohn Levon### accel 212194983eeSJohn Levon 213d16018c1STomasz Zawadzki`spdk_accel_get/set_opts()` has changed to act more like spdk_bdev's variant. 214194983eeSJohn Levon 2159e6aa50fSAnkit Kumar### bdev 2169e6aa50fSAnkit Kumar 2179e6aa50fSAnkit KumarAdded `spdk_bdev_get_nvme_ctratt()` API to get controller attributes of bdev. 2189e6aa50fSAnkit Kumar 2194199e7bbSArtur Paszkiewicz### bdev_raid 2204199e7bbSArtur Paszkiewicz 2214199e7bbSArtur PaszkiewiczAdded support for interleaved metadata. 2224199e7bbSArtur Paszkiewicz 2234199e7bbSArtur PaszkiewiczAdded RAID1 I/O error handling. 2244199e7bbSArtur Paszkiewicz 2254199e7bbSArtur PaszkiewiczExamining a bdev with RAID superblock now searches for other base bdevs that may be present. 2264199e7bbSArtur Paszkiewicz 2274199e7bbSArtur PaszkiewiczRe-adding a removed base bdev with superblock will now begin rebuild on applicable RAID levels. 2284199e7bbSArtur Paszkiewicz 2294199e7bbSArtur PaszkiewiczBase bdevs can now be added back if were removed while in configuring state. 2304199e7bbSArtur Paszkiewicz 2314199e7bbSArtur PaszkiewiczRAID in configuring state will not be removed if the last base bdev is removed. 2324199e7bbSArtur Paszkiewicz 233d16018c1STomasz Zawadzki### bdev_uring 234b269b0edSDamiano Cipriani 235d16018c1STomasz ZawadzkiAdded `bdev_uring_rescan` RPC to allow rescaning the size of uring bdev. 2362acfb846SDamiano Cipriani 237b269b0edSDamiano Cipriani### blobstore 238b269b0edSDamiano Cipriani 239d16018c1STomasz ZawadzkiAdded new API `spdk_bs_blob_shallow_copy()` to make a shallow copy from a blob to a blobstore device. Only clusters 240b269b0edSDamiano Ciprianiallocated to the blob will be written on the device. 241b269b0edSDamiano Cipriani 242d16018c1STomasz ZawadzkiAdded new APIs `spdk_bs_blob_set_parent()` and `spdk_bs_blob_set_external_parent()` to change the parent of an 2432acfb846SDamiano Ciprianiexisting lvol. With these new API a thin provisioned blob can become a clone of an existing snapshot 2442acfb846SDamiano Ciprianior of an existing external snapshot. 2452acfb846SDamiano Cipriani 246f7239999SKrzysztof Karas### event 247f7239999SKrzysztof Karas 248f7239999SKrzysztof KarasSPDK applications can now start with `--wait-for-rpc` and JSON configuration provided at the same time. 249f7239999SKrzysztof Karas 2503eadb9c5SMaciej SzulikStruct `spdk_app_opts` was extended by `json_data` and `json_data_size` fields 2513eadb9c5SMaciej Szulikallowing user to provide a buffer with JSON config as alternative to providing JSON config file path 2523eadb9c5SMaciej Szulik(these fields are mutually exclusive). 2533eadb9c5SMaciej Szulik 254d40c5443SKrzysztof Karas### init 255d40c5443SKrzysztof Karas 256d16018c1STomasz ZawadzkiFunction `spdk_subsystem_init_from_json_config()` is deprecated and will be removed in 24.09 release. 257d16018c1STomasz ZawadzkiPlease use `spdk_subsystem_load_config()` instead. 258d62e9b74Sliucheng 25902035b01SChangqi Lu### iscsi 26002035b01SChangqi Lu 26102035b01SChangqi LuAdded `iscsi_get_stats` RPC method to get stat information about all active connections. 26202035b01SChangqi Lu 263d16018c1STomasz ZawadzkiAdded `iscsi_enable_histogram` RPC method to enable or disable histogram for specified iSCSI target. 26490ba272cSChangqi Lu 265d16018c1STomasz ZawadzkiAdded `iscsi_get_histogram` RPC method to get histogram for specified iSCSI target. 266ba909a45SChangqi Lu 267cf9f6f34SKonrad Sztyber### keyring 268cf9f6f34SKonrad Sztyber 269cf9f6f34SKonrad SztyberAdded keyring library. Its purpose is to provide secure access to cryptographic keys from other 270cf9f6f34SKonrad Sztyberlibraries. Prior to being used, keys need to be attached to the keyring using one of the modules, 271cf9f6f34SKonrad Sztyberwhich are responsible for retrieving keying material in a secure manner. Currently, there are two 272cf9f6f34SKonrad Sztyberkeyring modules implemented: `keyring_file` (keys are stored in files on a filesystem) and 273cf9f6f34SKonrad Sztyber`keyring_linux` (based on Linux kernel keyring). The module interface is pluggable, so users can 274cf9f6f34SKonrad Sztyberimplement their own keyring modules. 275cf9f6f34SKonrad Sztyber 276d16018c1STomasz Zawadzki### lvol 277194983eeSJohn Levon 278d16018c1STomasz ZawadzkiAdded `bdev_lvol_start_shallow_copy` RPC to start a shallow copy of an lvol over a given bdev and 279d16018c1STomasz Zawadzki`bdev_lvol_check_shallow_copy` RPC to get the status of the operation. 280d16018c1STomasz ZawadzkiThese RPCs use the new API `spdk_lvol_shallow_copy()`. 281194983eeSJohn Levon 282d16018c1STomasz ZawadzkiAdded `bdev_lvol_set_parent` and `bdev_lvol_set_parent_bdev` RPC to change the parent of an existing lvol 283d16018c1STomasz Zawadzkiwith the use of the new APIs `spdk_lvol_set_parent()` and `spdk_lvol_set_external_parent()`. 28423dbcec5SJim Harris 285d16018c1STomasz Zawadzki### nvme 286d16018c1STomasz Zawadzki 287d16018c1STomasz ZawadzkiAdded `spdk_nvme_ctrlr_get_max_sges()` API to retrieve maximum number of SGEs per request 288d16018c1STomasz Zawadzkifor the given NVMe controller. 28923dbcec5SJim Harris 29082f7ed1cSKonrad SztyberThe NVMe driver now supports in-band authentication using the DH-HMAC-CHAP protocol. To enable it, 29182f7ed1cSKonrad Sztyberusers need to specify keys in the `bdev_nvme_attach_controller` RPC. Additionally, it's possible to 29282f7ed1cSKonrad Sztyberlimit the allowed digests and Diffie-Hellman groups via `bdev_nvme_set_options`. 29382f7ed1cSKonrad Sztyber 294d37555b4SJonas Pfefferle### nvmf 295d37555b4SJonas Pfefferle 296d16018c1STomasz ZawadzkiAdded support for namespace masking using new C APIs `spdk_nvmf_ns_add_host()` and 297d16018c1STomasz Zawadzki`spdk_nvmf_ns_remove_host()` and RPCs `nvmf_ns_add_host` and `nvmf_ns_remove_host`. 298d37555b4SJonas PfefferleUsers must pass new `--no-auto-visible` parameter to `nvmf_subsystem_add_ns` RPC to allow 299d37555b4SJonas Pfefferlenamespace masking to be controlled by these new RPCs. 300d37555b4SJonas Pfefferle 301d16018c1STomasz ZawadzkiAdded `spdk_nvmf_subsystem_get_ana_state()` API to get current ANA state of 3026d8618afSAbhineet Pandeya particular ANA group ID. 3036d8618afSAbhineet Pandey 3042260a96aSkyuho.sonAdded support for enabling mDNS-based discovery of nvmf target for 305d16018c1STomasz ZawadzkiTCP transport with the addition of `nvmf_publish_mdns_prr` and 306d16018c1STomasz Zawadzki`nvmf_stop_mdns_prr` RPCs. 3072260a96aSkyuho.son 30882f7ed1cSKonrad SztyberThe NVMe-oF target now supports in-band authentication using the DH-HMAC-CHAP protocol. The target 30982f7ed1cSKonrad Sztyberwill request hosts to authenticate if they're configured to use DH-HMAC-CHAP keys. The keys can be 31082f7ed1cSKonrad Sztyberset in the `nvmf_subsystem_add_host` RPC. Additionally, it's possible to limit the allowed digests 31182f7ed1cSKonrad Sztyberand Diffie-Hellman groups via `nvmf_set_config`. 31282f7ed1cSKonrad Sztyber 313d5901de3SJim Harris### spdk_trace 314d5901de3SJim Harris 315d5901de3SJim Harris`spdk_trace` has learned how to use the most recent trace file in /dev/shm when 316d5901de3SJim Harristhe user has specified neither `-f` nor `-s` options. This is only available on 317d5901de3SJim HarrisLinux since FreeBSD does not mount have a /dev/shm mount. 318d5901de3SJim Harris 319d16018c1STomasz Zawadzki### thread 320d16018c1STomasz Zawadzki 321d16018c1STomasz ZawadzkiChanged `spdk_iobuf_get/set_opts()` API to act more like spdk_bdev's variant. 322d16018c1STomasz Zawadzki 323d16018c1STomasz Zawadzki### trace 324d16018c1STomasz Zawadzki 325d16018c1STomasz ZawadzkiMerged `struct spdk_trace_flags` and `struct spdk_trace_histories` into 326d16018c1STomasz Zawadzkinew `struct spdk_trace_file`. Also renamed `spdk_get_trace_histories_size()` 327d16018c1STomasz Zawadzkito `spdk_get_trace_file_size()`. 328d16018c1STomasz Zawadzki 329e0741e53STomasz Zawadzki## v24.01 330a3a12390STomasz Zawadzki 331162c1a52STomasz Zawadzki### accel 332162c1a52STomasz Zawadzki 333162c1a52STomasz ZawadzkiAdded support for new operations for computing Data Integrity Field (DIF), 334162c1a52STomasz Zawadzki`spdk_accel_submit_dif_verify()`, `spdk_accel_submit_dif_generate()` and 335162c1a52STomasz Zawadzki`spdk_accel_submit_dif_generate_copy()`. 336162c1a52STomasz Zawadzki 337162c1a52STomasz ZawadzkiAdded `spdk_accel_get_opcode_name()` API that returns name of an operation. 338162c1a52STomasz Zawadzki 339162c1a52STomasz ZawadzkiAdded `spdk_accel_get_module()` API that returns pointer to a module. 340162c1a52STomasz Zawadzki 341162c1a52STomasz ZawadzkiAdded optional `init()` and `fini()` callbacks to `spdk_accel_driver` in order to allow 342162c1a52STomasz Zawadzkidrivers to initialize and clean up resources by the driver. 343162c1a52STomasz Zawadzki 344162c1a52STomasz Zawadzki### accel_error 345162c1a52STomasz Zawadzki 346162c1a52STomasz ZawadzkiAdded new `error` accel module that allows user to inject error to selected accel operations. 347162c1a52STomasz Zawadzki 348162c1a52STomasz Zawadzki### bdev 349162c1a52STomasz Zawadzki 350162c1a52STomasz ZawadzkiAdded `spdk_bdev_nvme_iov_passthru_md()` API to allow sending larger passthru commands. 351162c1a52STomasz Zawadzki 352162c1a52STomasz ZawadzkiAdded `max_rw_size` field to `spdk_bdev` structure allowing bdev modules to specify maximum 353162c1a52STomasz Zawadzkisize of an I/O. 354162c1a52STomasz Zawadzki 355162c1a52STomasz ZawadzkiAdded `iobuf_small_cache_size` and `iobuf_large_cache_size` parameters to 356162c1a52STomasz Zawadzki`bdev_set_options` RPC making iobuf use in bdev configurable. 357162c1a52STomasz Zawadzki 358162c1a52STomasz Zawadzki### bdev_raid 359162c1a52STomasz Zawadzki 360162c1a52STomasz ZawadzkiAdded support for rebuild in raid1 and raid5f levels. 361162c1a52STomasz Zawadzki 362162c1a52STomasz ZawadzkiAdded `superblock` argument to `bdev_raid_create` RPC to allow writing out raid metadata to 363162c1a52STomasz Zawadzkia superblock. It can be then re-created from examined base bdevs, without the need 364162c1a52STomasz Zawadzkito issue `bdev_raid_create`. 365162c1a52STomasz Zawadzki 366162c1a52STomasz ZawadzkiAdded `bdev_raid_add_base_bdev` RPC to add a base bdevs to an existing raid bdev. 367162c1a52STomasz Zawadzki 368162c1a52STomasz ZawadzkiAdded `bdev_raid_set_options` RPC that changes options for raid bdev module, 369162c1a52STomasz Zawadzkicurrently allows setting `process_window_size_kb` affecting background operations 370162c1a52STomasz Zawadzkilike rebuild. 371162c1a52STomasz Zawadzki 372162c1a52STomasz Zawadzki### blobstore 373162c1a52STomasz Zawadzki 374162c1a52STomasz ZawadzkiAdded `spdk_bs_grow_live()` and `spdk_bdev_update_bs_blockcnt()` API that can be used to 375162c1a52STomasz Zawadzkiincrease size of blobstore filling the underlying device without first closing the blobstore. 376162c1a52STomasz Zawadzki 377915bccddSTomasz Zawadzki### env 378915bccddSTomasz Zawadzki 379915bccddSTomasz ZawadzkiAdded SPDK command line parameter `--no-huge`, which enables SPDK to run without hugepages. 380915bccddSTomasz Zawadzki 381162c1a52STomasz Zawadzki### event 382162c1a52STomasz Zawadzki 383162c1a52STomasz ZawadzkiAdded SPDK command line parameter `--interrupt-mode`, which enables to run SPDK in interrupt 384162c1a52STomasz Zawadzkimode. Effective only if all components used in the application, support interrupt mode. 385162c1a52STomasz Zawadzki 386162c1a52STomasz Zawadzki### ftl 387162c1a52STomasz Zawadzki 388162c1a52STomasz ZawadzkiAdded `rpc_bdev_ftl_get_properties` and `bdev_ftl_set_property` RPC with matching API calls, 389162c1a52STomasz Zawadzkito allow modification of FTL device properties. 390162c1a52STomasz Zawadzki 391162c1a52STomasz Zawadzki### idxd 392162c1a52STomasz Zawadzki 393162c1a52STomasz ZawadzkiAdded `spdk_idxd_submit_dif_check()` and `spdk_idxd_submit_dif_insert()` API to support 394162c1a52STomasz Zawadzkinew operations for computing Data Integrity Field (DIF). 395162c1a52STomasz Zawadzki 396162c1a52STomasz Zawadzki### json 397162c1a52STomasz Zawadzki 398162c1a52STomasz ZawadzkiAdded `spdk_json_write_uuid()`, `spdk_json_write_named_uuid()` and `spdk_json_decode_uuid()` 399162c1a52STomasz Zawadzkito help with writing and decoding UUID. 400162c1a52STomasz Zawadzki 401915bccddSTomasz Zawadzki### nvme 402915bccddSTomasz Zawadzki 403915bccddSTomasz ZawadzkiA new transport option `rdma_max_cq_size` was added to limit indefinite growth of CQ size. 404915bccddSTomasz Zawadzki 405162c1a52STomasz ZawadzkiAdded `spdk_nvme_ctrlr_cmd_iov_raw_with_md()` API to allow sending larger passthru commands. 406162c1a52STomasz Zawadzki 407915bccddSTomasz Zawadzki### nvmf 408915bccddSTomasz Zawadzki 409915bccddSTomasz ZawadzkiAdded `max_discard_size_kib` and `max_write_zeroes_size_kib` to `nvmf_create_subsystem` RPC to set the 410915bccddSTomasz Zawadzkimaximum discard size and maximum write zeroes size. 411915bccddSTomasz Zawadzki 412915bccddSTomasz ZawadzkiAdded new optional `--ana-state` (or shortly `-n`) parameter to `nvmf_subsystem_add_listener` RPC. 413915bccddSTomasz Zawadzki 414915bccddSTomasz ZawadzkiAdded public APIs `spdk_nvmf_subsystem_get_ana_reporting()` and `spdk_nvmf_subsystem_set_ana_state()`, 415915bccddSTomasz Zawadzkireplacing the internal functions `nvmf_subsystem_get_ana_reporting()` and `nvmf_subsystem_set_ana_state()` 416915bccddSTomasz Zawadzkirespectively. 417915bccddSTomasz Zawadzki 418162c1a52STomasz ZawadzkiAdded support for NVMe-oF referrals in NVMe-oF target with addition of 419162c1a52STomasz Zawadzki`spdk_nvmf_tgt_add_referral()` and `spdk_nvmf_tgt_remove_referral()` API and `nvmf_discovery_add_referral`, 420162c1a52STomasz Zawadzki`nvmf_discovery_remove_referral` and `nvmf_discovery_get_referrals` RPC. 421162c1a52STomasz Zawadzki 422162c1a52STomasz ZawadzkiAdded `spdk_nvmf_set_custom_ns_reservation_ops()` API allowing to register custom handlers for reservation 423162c1a52STomasz Zawadzkioperations. 424162c1a52STomasz Zawadzki 425915bccddSTomasz Zawadzki### scsi 426915bccddSTomasz Zawadzki 427915bccddSTomasz ZawadzkiAdded support for `SPDK_SBC_WRITE_SAME_10` and `SPDK_SBC_WRITE_SAME_16`. 428915bccddSTomasz Zawadzki 429162c1a52STomasz Zawadzki### thread 430162c1a52STomasz Zawadzki 431162c1a52STomasz ZawadzkiAdded `iobuf_get_stats` RPC and `spdk_iobuf_get_stats()` API to track iobuf use across components. 432162c1a52STomasz Zawadzki 433ae5e1aafSKrishna Kanth Reddy### trace 434ae5e1aafSKrishna Kanth Reddy 435915bccddSTomasz ZawadzkiAdded `spdk_trace_register_user_thread()` to initialize trace environment and 436915bccddSTomasz Zawadzki`spdk_trace_unregister_user_thread()` to de-initialize trace environment 437915bccddSTomasz Zawadzkifor a user created thread. 438ae5e1aafSKrishna Kanth Reddy 439915bccddSTomasz ZawadzkiModified `spdk_trace_init()` to take number of user created threads as a parameter. 440ae5e1aafSKrishna Kanth Reddy 441162c1a52STomasz Zawadzki### ublk 442162c1a52STomasz Zawadzki 443162c1a52STomasz ZawadzkiAdded `ublk_recover_disk` RPC to support recovering after restarting ublk target. 444162c1a52STomasz Zawadzki 445986fb7b3SHaoqian He### vhost 446986fb7b3SHaoqian He 447986fb7b3SHaoqian HeAdded `caw_iov` field to struct `spdk_scsi_task` to support SBC-3 compare_and_write IO. 448986fb7b3SHaoqian He 449dc93bd85SHaoqian HeAdded parameter `delay` to `vhost_create_scsi_controller` RPC which allows user to defer starting 450dc93bd85SHaoqian Hethe vhost-scsi controller until adding the scsi target is completed. 451dc93bd85SHaoqian He 452dc93bd85SHaoqian HeAdded `vhost_start_scsi_controller` RPC to start vhost-scsi controller, it could be used to support 453dc93bd85SHaoqian Helive recovery feature of vhost-scsi target. 454dc93bd85SHaoqian He 455da50ac95SKrzysztof Karas### rpc 456da50ac95SKrzysztof Karas 457da50ac95SKrzysztof KarasFunctions `spdk_rpc_listen`, `spdk_rpc_accept` and `spdk_rpc_close` are deprecated and will be 458da50ac95SKrzysztof Karasremoved in 24.09 release. Please use `spdk_rpc_server_listen`, `spdk_rpc_server_accept` and 459da50ac95SKrzysztof Karas`spdk_rpc_server_close` instead. 460da50ac95SKrzysztof Karas 461a3a12390STomasz Zawadzki## v23.09 4622d355b3aSKonrad Sztyber 463c15b0d68STomasz Zawadzki### accel 464c15b0d68STomasz Zawadzki 465c15b0d68STomasz ZawadzkiAdded `spdk_accel_get_buf_align()` API to get minimum buffer alignment to execute a given operation. 466c15b0d68STomasz Zawadzki 467c15b0d68STomasz ZawadzkiAdded `get_operation_info()` callback for accel_modules to return constraints for a given operation. 468c15b0d68STomasz Zawadzki 469c15b0d68STomasz Zawadzki### bdev 470c15b0d68STomasz Zawadzki 471c15b0d68STomasz ZawadzkiAdded `spdk_bdev_open_async()` API to allow asynchronous bdev open that waits for specified time 472c15b0d68STomasz Zawadzkiuntil the block device appears. 473c15b0d68STomasz Zawadzki 474c15b0d68STomasz Zawadzki### bdev_nvme 475c15b0d68STomasz Zawadzki 476c15b0d68STomasz ZawadzkiAdded `bdev_nvme_enable_controller` and `bdev_nvme_disable_controller` RPC to enable and disable 477c15b0d68STomasz ZawadzkiNVMe controller. For NVMe multipath `cntlid` is used to select only one NVMe-oF controller. 478c15b0d68STomasz Zawadzki 479c15b0d68STomasz ZawadzkiAdded `cntlid` field to `bdev_nvme_reset_controller` RPC to support resetting only one NVMe-oF 480c15b0d68STomasz Zawadzkicontroller in multipath configuration. 481c15b0d68STomasz Zawadzki 482c15b0d68STomasz Zawadzki### bdev_raid 483c15b0d68STomasz Zawadzki 484c15b0d68STomasz ZawadzkiAdded `bdev_raid_remove_base_bdev` RPC to remove a base bdev from existing raid bdev. 485c15b0d68STomasz Zawadzki 486ebf9cccaSKrzysztof Sprzaczkowski### dpdk 487ebf9cccaSKrzysztof Sprzaczkowski 488c15b0d68STomasz ZawadzkiUpdated DPDK submodule to DPDK 23.07. 489ebf9cccaSKrzysztof Sprzaczkowski 49059605ea6STomasz Zawadzki### env 49159605ea6STomasz Zawadzki 4928ea136dcSTomasz ZawadzkiThe `phys_addr` parameter in `spdk_*_malloc()` functions is now invalid. Passing non-NULL value 49359605ea6STomasz Zawadzkiwill return NULL from the functions. The parameter was deprecated in SPDK 19.04. 4948ea136dcSTomasz ZawadzkiFor retrieving physical addresses, `spdk_vtophys()` should be used instead. 4958ea136dcSTomasz Zawadzki 496c15b0d68STomasz Zawadzki### go 497c15b0d68STomasz Zawadzki 498c15b0d68STomasz ZawadzkiAdded JSON-RPC 2.0 client written in Go to ease communication with SPDK. 499c15b0d68STomasz ZawadzkiPlease see the documentation at `go/rpc/` and example at `examples/go/`. 500c15b0d68STomasz Zawadzki 5018ea136dcSTomasz Zawadzki### init 5028ea136dcSTomasz Zawadzki 5038ea136dcSTomasz ZawadzkiOptions for the JSON-RPC server initialization were added. The options are defined via the 5048ea136dcSTomasz Zawadzki`spdk_rpc_opts` structure and is passed to the existing API `spdk_rpc_initialize()` as a new 5058ea136dcSTomasz Zawadzkiargument. The options include `log_file` and `log_level`. 5068ea136dcSTomasz Zawadzki 507c15b0d68STomasz Zawadzki### intel-ipsec-mb 508c15b0d68STomasz Zawadzki 509c15b0d68STomasz ZawadzkiUpdated intel-ipsec-mb submodule to v1.4. 510c15b0d68STomasz Zawadzki 5118ea136dcSTomasz Zawadzki### jsonrpc 5128ea136dcSTomasz Zawadzki 5138ea136dcSTomasz ZawadzkiNew APIs, `spdk_jsonrpc_set_log_level` and `spdk_jsonrpc_set_log_file`, were added to enable 5148ea136dcSTomasz Zawadzkilogging JSON RPC calls history. 51559605ea6STomasz Zawadzki 5164f651a5cSShuhei Matsumoto### log 5174f651a5cSShuhei Matsumoto 5184f651a5cSShuhei MatsumotoNew APIs, `spdk_flog` and `spdk_vflog`, were added to write messages to the specified log file. 5194f651a5cSShuhei Matsumoto 5208b4a7464SKonrad Sztyber### nvme 5218b4a7464SKonrad Sztyber 5228b4a7464SKonrad SztyberThe `spdk_nvme_accel_fn_table` interface has been extended with callbacks allowing users to chain 5238b4a7464SKonrad Sztybermultiple accel operations. Users can now send requests with an existing accel sequence by setting 5248b4a7464SKonrad Sztyberthe `accel_sequence` field in `spdk_nvme_ns_cmd_ext_io_opts` if the controller supports it (i.e. 5258b4a7464SKonrad Sztybersets the `SPDK_NVME_CTRLR_ACCEL_SEQUENCE_SUPPORTED` flag) and the user implements the necessary 5268b4a7464SKonrad Sztyber`spdk_nvme_accel_fn_table` callbacks. 5278b4a7464SKonrad Sztyber 5288b4a7464SKonrad SztyberThe NVMe bdev will now advertise support for accel sequences if the `allow_accel_sequence` flag is 5298b4a7464SKonrad Sztyberset in `bdev_nvme_set_options` and the underlying controller also supports them. 5308b4a7464SKonrad Sztyber 5318b4a7464SKonrad SztyberThe TCP transport will now calculate data digest using the accel sequence APIs if they're available. 5328b4a7464SKonrad Sztyber 533c15b0d68STomasz ZawadzkiAdded `spdk_nvme_qpair_is_connected()` API to check the connection status. 534c15b0d68STomasz Zawadzki 5355d92820cSJohn Levon### nvmf 5365d92820cSJohn Levon 5375d92820cSJohn LevonThe `spdk_nvmf_request::data` field has been removed: instead, clients should set 5385d92820cSJohn Levon`->iov` and `->iovcnt` appropriately, as nvmf request APIs now expect any data 5398ea136dcSTomasz Zawadzkibuffers to be described there. `spdk_nvmf_request_get_data()` has been removed. 5405d92820cSJohn Levon 541d8b4b81aSWojciech Panfil`transport` field in `listen_addresses` of `nvmf_get_subsystems` RPC is deprecated. 542d8b4b81aSWojciech Panfil`trtype` field should be used instead. `transport` field will be removed in 24.01 release. 543d8b4b81aSWojciech Panfil 544c15b0d68STomasz ZawadzkiAdded `spdk_nvmf_subsystem_add_listener_ext()` API for accepting new connections on the provided 545c15b0d68STomasz Zawadzkiaddress, now allowing to specify additional options for the listener. 546c15b0d68STomasz Zawadzki 54734edd9f1SKamil GodzwonDeprecated `spdk_nvmf_subsystem_any_listener_allowed()` API (to be removed in 24.01) and replaced with 548c15b0d68STomasz Zawadzkispdk_nvmf_subsystem_any_listener_allowed()` API fixing the typo. 549c15b0d68STomasz Zawadzki 550c15b0d68STomasz ZawadzkiAdded `spdk_nvmf_subsystem_is_discovery()` API to check whether a given susbystem is discovery subsystem. 551c15b0d68STomasz Zawadzki 552c15b0d68STomasz Zawadzki### scripts 553c15b0d68STomasz Zawadzki 554c15b0d68STomasz Zawadzki`setup.sh` now supports interactive mode for device selection and hugepage reservation. 555c15b0d68STomasz Zawadzki 556c15b0d68STomasz ZawadzkiAdded `backport.sh` script that formalizes process of backporting commits from latest SPDK, 557c15b0d68STomasz Zawadzkito specific release branches. Please see [documentation](https://spdk.io/doc/backporting.html). 558c15b0d68STomasz Zawadzki 559c15b0d68STomasz Zawadzki### thread 560c15b0d68STomasz Zawadzki 561c15b0d68STomasz ZawadzkiAdded `spdk_thread_is_app_thread()` API to check if specified spdk_thread is the app thread. 562c15b0d68STomasz Zawadzki 563c15b0d68STomasz Zawadzki### util 564c15b0d68STomasz Zawadzki 565c15b0d68STomasz ZawadzkiExtended DIF support to CRC-32 and CRC-64 format of the Protection Information. 566c15b0d68STomasz Zawadzki 567c15b0d68STomasz ZawadzkiAdded `spdk_crc64_nvme()` and `spdk_crc32c_nvme()`, CRC-64 and CRC-32C checksums compatible with 568c15b0d68STomasz ZawadzkiNVMe Protection Information. 569c15b0d68STomasz Zawadzki 5702d355b3aSKonrad Sztyber## v23.05 571fc62f804STomasz Zawadzki 572b41efae2SArtur Paszkiewicz### accel 573b41efae2SArtur Paszkiewicz 574b41efae2SArtur PaszkiewiczAdded API `spdk_accel_submit_xor` to perform XOR. 575b41efae2SArtur Paszkiewicz 576bee379e6SKonrad SztyberConfiguration of `mlx5_pci` driver of `accel_dpdk_cryptodev` module was changed. Now key and key2 577bee379e6SKonrad Sztybershould have equal length and key size in hexlified form can be either 32 bytes for 128b XTS key or 578bee379e6SKonrad Sztyber64 bytes for 256b XTS key. Support of the wrapped crypto credentials mode for this driver is 579bee379e6SKonrad Sztyberdropped, only plain text mode is supported. 580bee379e6SKonrad Sztyber 581bee379e6SKonrad SztyberThe accel library will now collect statistics on the number of executed operations and processed 58234edd9f1SKamil Godzwonbytes. These statistics can be retrieved using the `accel_get_stats` RPC. 583bee379e6SKonrad Sztyber 584bee379e6SKonrad SztyberAdded support for appending a crc32 calculation to an accel sequence. 585d20ae7ffSAlexey Marchuk 586a7eb6187SMike Gerdts### bdev 587a7eb6187SMike Gerdts 588a7eb6187SMike GerdtsA new API `spdk_bdev_module_claim_bdev_desc` was added. Unlike `spdk_bdev_module_claim_bdev`, this 589a7eb6187SMike Gerdtsfunction requires a bdev descriptor to be passed and the claim is automatically released when the 590a7eb6187SMike Gerdtsdescriptor is closed. It allows bdev modules to claim bdevs as a single writer, multiple writers, or 591a7eb6187SMike Gerdtsmultiple readers. 592a7eb6187SMike Gerdts 5939e386832SArtur PaszkiewiczNew APIs `spdk_bdev_quiesce`, `spdk_bdev_unquiesce`, `spdk_bdev_quiesce_range` and 5949e386832SArtur Paszkiewicz`spdk_bdev_unquiesce_range` were added. These allow I/O to be quiesced on an entire bdev or 5959e386832SArtur Paszkiewicza specified LBA range. 5969e386832SArtur Paszkiewicz 5976b528ed2SKonrad SztyberRemoved `spdk_bdev_ext_io_opts` from `spdk_bdev_io` and replaced it with fields that were missing in 5986b528ed2SKonrad Sztyber`spdk_bdev_io`. 5996b528ed2SKonrad Sztyber 600bee379e6SKonrad SztyberIt is now possible to submit an I/O with an associated accel sequence. All operations in such 601bee379e6SKonrad Sztybersequence will be executed prior to sending the I/O (writes) or after its completion (reads). 602bee379e6SKonrad Sztyber 60337b5d87bSJacek Kalwas### env 60437b5d87bSJacek Kalwas 6057ee16130SJim HarrisNew functions `spdk_env_get_main_core` and `spdk_env_get_cpuset` were added. 60637b5d87bSJacek Kalwas 607bee379e6SKonrad SztyberIt is now possible to run applications on cores with IDs greater than 128 by passing a core map 608bee379e6SKonrad Sztyberusing the `--lcores` parameter. 609bee379e6SKonrad Sztyber 61058fa1714SKonrad Sztyber### examples 61158fa1714SKonrad Sztyber 61258fa1714SKonrad Sztyber`examples/nvme/perf` application now accepts `--use-every-core` parameter that changes 61358fa1714SKonrad Sztyberthe existing worker and namespace association logic to access every namespace from each worker. 61458fa1714SKonrad SztyberThis replicates behavior of bdevperf application when `-C` option is provided. 61558fa1714SKonrad Sztyber 616ff12a5edSMike Gerdts### gpt 617ff12a5edSMike Gerdts 618ff12a5edSMike GerdtsGPT bdevs now use the GPT Unique Partition ID as the bdev's UUID. 619ff12a5edSMike Gerdts 620bee379e6SKonrad Sztyber### idxd 621bee379e6SKonrad Sztyber 622bee379e6SKonrad SztyberRemoved the `SPDK_IDXD_FLAG_PERSISTENT` flag. 623bee379e6SKonrad Sztyber 624b7d84562SMike Gerdts### lvol 625b7d84562SMike Gerdts 626b7d84562SMike GerdtsNew API `spdk_lvol_iter_immediate_clones` was added to iterate the clones of an lvol. 627b7d84562SMike Gerdts 6280cea6b57SMike GerdtsNew APIs `spdk_lvol_get_by_uuid` and `spdk_lvol_get_by_names` to get lvols by the lvol's UUID or 6290cea6b57SMike Gerdtslvstore and lvol names. 6300cea6b57SMike Gerdts 631f3c14b8dSMike GerdtsNew `bdev_lvol_get_lvols` RPC to list logical volumes. This provides information about logical 632f3c14b8dSMike Gerdtsvolumes without providing information about the bdevs. It is useful for listing the lvols 633f3c14b8dSMike Gerdtsassociated with specific lvol stores and for listing lvols that are degraded and have no 634f3c14b8dSMike Gerdtsassociated bdev. 635f3c14b8dSMike Gerdts 636bee379e6SKonrad SztyberAdded support for external snapshots making it possible to create clones of any (including non-lvol) 637bee379e6SKonrad Sztyberbdev. Users can create such clones using the `bdev_lvol_clone_bdev` RPC. 638bee379e6SKonrad Sztyber 63958fa1714SKonrad Sztyber### nvme 64058fa1714SKonrad Sztyber 64158fa1714SKonrad SztyberNew API `spdk_nvme_ns_get_format_index` was added to calculate the exact format index, that 64258fa1714SKonrad Sztyberwas used to format the namespace. 64358fa1714SKonrad Sztyber 64458fa1714SKonrad SztyberAdded two new APIs `spdk_nvme_ns_cmd_io_mgmt_recv` and `spdk_nvme_ns_cmd_io_mgmt_send` to 64558fa1714SKonrad Sztyberreceive and send the I/O management commands. 64658fa1714SKonrad Sztyber 64770a82d9aSJohn Levon### nvmf 64870a82d9aSJohn Levon 64970a82d9aSJohn LevonNew `spdk_nvmf_request_copy_to/from_buf()` APIs have been added, which support 65070a82d9aSJohn Levoniovecs, unlike the deprecated `spdk_nvmf_request_get_data()`. 65170a82d9aSJohn Levon 652414ff9bcSSzulik, MaciejTwo functions related to Asynchronous Event and error handling have been made public: 653414ff9bcSSzulik, Maciej 654414ff9bcSSzulik, Maciej- `spdk_nvmf_ctrlr_async_event_error_event`, 655414ff9bcSSzulik, Maciej- `spdk_nvmf_ctrlr_abort_aer`. 656414ff9bcSSzulik, Maciej 65758fa1714SKonrad SztyberNew `spdk_nvmf_transport_create_async` was added, it accepts a callback and callback argument. 65858fa1714SKonrad Sztyber`spdk_nvmf_transport_create` is marked deprecated. 65958fa1714SKonrad Sztyber 6600de1c215SAlexey MarchukParameters `cb_fn` and `ctx` of `spdk_nvmf_qpair_disconnect` API are deprecated. These parameters 6610de1c215SAlexey Marchukwill be removed in 23.09 release. 6620de1c215SAlexey Marchuk 663bee379e6SKonrad SztyberAdded a `secure_channel` parameter to the `nvmf_subsystem_add_listener` RPC. When true, all 664bee379e6SKonrad Sztyberconnections established via this listener will immediately attempt to establish a secure channel, 665bee379e6SKonrad Sztyberprior to any authentication. Only valid for the TCP transport. 6664becb0d1SBoris Glimcher 6676803032dSKrzysztof KarasAdded two optional transport module callbacks: `subsystem_add_host()` and `subsystem_remove_host()`. 6686803032dSKrzysztof KarasThese functions will notify a transport about adding/removing hosts' access. 6696803032dSKrzysztof Karas 670bee379e6SKonrad SztyberTLS PSK identity is now generated from subsystem NQN and host NQN. PSK interchange format is now 671bee379e6SKonrad Sztyberexpected as input, when configuring TLS in SPDK. TLS feature is considered experimental. 672c6c96e48SKrzysztof Karas 67358fa1714SKonrad Sztyber### part 67458fa1714SKonrad Sztyber 67558fa1714SKonrad SztyberNew API `spdk_bdev_part_construct_ext` is added and allows the bdev's UUID to be specified. 67658fa1714SKonrad Sztyber 677171345ebSKrzysztof Karas### sock 678171345ebSKrzysztof Karas 679bee379e6SKonrad SztyberAdded a zero copy receive interface allowing users to provide buffers to a socket group (via 680bee379e6SKonrad Sztyber`spdk_sock_group_provide_buf()`), which will then get filled with the next portions of the stream on 681bee379e6SKonrad Sztybereach socket. After that, pointer to the buffer holding the next part of the data can be obtained 682bee379e6SKonrad Sztyberusing `spdk_sock_recv_next()`. 683bee379e6SKonrad Sztyber 684171345ebSKrzysztof KarasAdded a callback `get_key()` to `spdk_sock_impl_opts` structure. 685171345ebSKrzysztof Karas 6868d30c85aSKrzysztof KarasNew function `spdk_sock_get_impl_name()` was added to retrieve current socket implementation name. 6878d30c85aSKrzysztof Karas 6883f4b2c67SYifan Bian### thread 6893f4b2c67SYifan Bian 690bee379e6SKonrad SztyberAdded two new APIs `spdk_thread_bind` and `spdk_thread_is_bound` to bind or unbind `spdk_thread` 6913f4b2c67SYifan Bianto its current CPU core, and check bound status. 6923f4b2c67SYifan Bian 693bee379e6SKonrad Sztyber### ublk 694bee379e6SKonrad Sztyber 695bee379e6SKonrad SztyberEnabled support for `UBLK_F_NEED_GET_DATA`. The buffers are no longer pre-allocated during 696bee379e6SKonrad Sztyberinitialization, but are allocated on-demand. Additionally, they're now allocated from the `iobuf` 697bee379e6SKonrad Sztyberbuffer pools. 698bee379e6SKonrad Sztyber 69995a367d6SArtur Paszkiewicz### util 70095a367d6SArtur Paszkiewicz 70195a367d6SArtur PaszkiewiczNew APIs `spdk_uuid_is_null` and `spdk_uuid_set_null` were added to compare and 70295a367d6SArtur Paszkiewiczset UUID to NULL value. 70395a367d6SArtur Paszkiewicz 704bee379e6SKonrad SztyberAdded new functions, `spdk_fd_group_{nest,unnest}`, providing efficient way of adding one 705bee379e6SKonrad Sztyber`fd_group`'s file descriptors to another `fd_group`. 706bee379e6SKonrad Sztyber 707fc62f804STomasz Zawadzki## v23.01 708896a25fbSTomasz Zawadzki 709784b9d48SAlexey Marchuk### accel 710784b9d48SAlexey Marchuk 711784b9d48SAlexey MarchukNew library isa-l-crypto has been added, it is used by accel library in crypto operations. 712784b9d48SAlexey Marchuk 7132608d129SAlexey MarchukNew functions `spdk_accel_submit_encrypt` and `spdk_accel_submit_decrypt` were added. 7142608d129SAlexey Marchuk 71561fbb000SAlexey MarchukNew accel module `dpdk_cryptodev` has been added. It uses DPDK crypto PMD and support encrypt and 71661fbb000SAlexey Marchukdecrypt operations. New RPC `dpdk_cryptodev_scan_accel_module` has been added to enable this accel module. 71761fbb000SAlexey Marchuk 718a1dfa7ecSAlexey MarchukNew accel module `mlx5` was added. It implements crypto operations, enabled when SPDK is configured with 719a1dfa7ecSAlexey MarchukRDMA provider is mlx5_dv and crypto support. 720a1dfa7ecSAlexey Marchuk 721f955f93cSKonrad SztyberIntroduced the concept of chaining multiple accel operations together and executing them all in a 722f955f93cSKonrad Sztybersingle call. The operation can be chained via one of the `spdk_accel_append_*` functions and then 723f955f93cSKonrad Sztyberexecuted using `spdk_accel_sequence_finish`. Currently, copy, decompress, decrypt, encrypt, and 724f955f93cSKonrad Sztyberfill operations support this mode. This feature is considered experimental. 725f955f93cSKonrad Sztyber 726aef00d44SShuhei Matsumoto### bdev 727aef00d44SShuhei Matsumoto 728d683d7b7SShuhei MatsumotoA new API `spkd_bdev_part_submit_request_ext` was added to specify a custom completion callback. 729d683d7b7SShuhei Matsumoto 730f0494649SGangCaoNew APIs `spdk_bdev_for_each_channel` and `spdk_bdev_for_each_channel_continue` and 731f0494649SGangCaoassociated function pointers were added to iterate each channel of the required bdev. 732f0494649SGangCao 733e28e2479SGangCaoThe RPC `bdev_get_iostat` now allows a user to query the per channel IO statistics for 73453a9a8c4SShuhei Matsumotorequired bdev, and displays maximum and minimum latencies and I/O error counts. 735e28e2479SGangCao 736d14afd50SEvgeniy KochetovNew `spdk_bdev_copy_blocks` and `spdk_bdev_get_max_copy` APIs to support copy commands. 737d14afd50SEvgeniy Kochetov 738cabbb25dSRichael ZhuangA new API `spdk_bdev_io_get_submit_tsc` was added to get the submit_tsc of the bdev I/O. 739cabbb25dSRichael Zhuang 740b5bdbbb9SKrzysztof KarasBdevs will no longer have UUIDs generated based on timestamp and are responsible for 741b5bdbbb9SKrzysztof Karassetting this field themselves. Generation of UUIDs for NVMe bdevs may be enabled by 742b5bdbbb9SKrzysztof Karasrunning `bdev_nvme_set_options` RPC with `--generate-uuids` option. These identifiers 743b5bdbbb9SKrzysztof Karasare based on serial number and namespace ID and will always be the same for a given 744b5bdbbb9SKrzysztof Karasdevice. 745b5bdbbb9SKrzysztof Karas 746f192c11bSRichael ZhuangA new API `spdk_bdev_channel_get_histogram` was added to get the histogram of a specified 747f192c11bSRichael Zhuangchannel for a bdev. 748f192c11bSRichael Zhuang 7490dc6aac1SMike GerdtsConverted internal use of `pthread_mutex_t` to `struct spdk_spinlock`. Consumers of bdev 7500dc6aac1SMike GerdtsAPI functions must be on an SPDK thread or the program will abort. It is now enforced 7510dc6aac1SMike Gerdtsthat no internal bdev locks can be held when a poller or message goes off CPU. 7520dc6aac1SMike Gerdts 753cf4e8664SShuhei MatsumotoA new RPC `bdev_reset_iostat` was added to reset I/O statistics of bdevs. Note that if one 754cf4e8664SShuhei Matsumotoconsumer reset I/O statistics, it affects all other consumers. 755cf4e8664SShuhei Matsumoto 7568c439a67SShuhei MatsumotoAdd function pointers, `dump_device_stat_json` and `reset_device_stat` to the bdev module 7578c439a67SShuhei Matsumotofunction table to display and reset I/O statistics specific for the module specific bdev 7588c439a67SShuhei Matsumotocontext. 7598c439a67SShuhei Matsumoto 7608ddc102aSRichael ZhuangNew APIs `spdk_bdev_reset_io_stat`, `spdk_bdev_add_io_stat` and `spdk_bdev_dump_io_stat_json` 7618ddc102aSRichael Zhuangwere added to process I/O statistics outside the generic bdev layer, especially in bdev modules. 7628ddc102aSRichael Zhuang 763a1aede09STomasz Zawadzki### bdev_crypto 764a1aede09STomasz Zawadzki 765a1aede09STomasz Zawadzkivbdev_crypto is updated to use accel framework instead of DPDK PMDs. 766a1aede09STomasz Zawadzki 76762876270STomasz Zawadzki### bdev_daos 76862876270STomasz Zawadzki 76962876270STomasz ZawadzkiNew RPC `bdev_daos_resize` was added to allow resizing the daos bdev. 77062876270STomasz Zawadzki 771a1aede09STomasz Zawadzki### bdev_malloc 772a1aede09STomasz Zawadzki 773a1aede09STomasz ZawadzkiBoth of interleaved and separated metadata are now supported by the malloc bdev module. 774a1aede09STomasz Zawadzki 775a1aede09STomasz ZawadzkiProtection information is now supported by the malloc bdev module. 776a1aede09STomasz Zawadzki 777a1aede09STomasz Zawadzki### bdev_nvme 778a1aede09STomasz Zawadzki 779a1aede09STomasz ZawadzkiUpdated `bdev_nvme_set_options` RPC (and rpc.py) to support the new `transport_tos` parameter. 780a1aede09STomasz Zawadzki 781a1aede09STomasz ZawadzkiFor the active-active policy of the multipath mode, in addition to the default round-robin path 782a1aede09STomasz Zawadzkiselector, the minimum queue depth path selector was added. The minimum queue depth path selector 783a1aede09STomasz Zawadzkiselects an I/O path according to the number of outstanding requests of each nvme qpair. 784a1aede09STomasz Zawadzki 785a1aede09STomasz ZawadzkiAdded RPCs `bdev_nvme_start_mdns_discovery`, `bdev_nvme_get_mdns_discovery_info` and 786a1aede09STomasz Zawadzki`bdev_nvme_stop_mdns_discovery` to perform Avahi based mDNS discovery service, 787a1aede09STomasz Zawadzkias per NVMe TP 8009 - Automated Discovery of Ethernet Discovery Controllers. 788a1aede09STomasz Zawadzki 789a1aede09STomasz ZawadzkiA new option `nvme_error_stat` was added to the `bdev_nvme_set_options` RPC to enable 790a1aede09STomasz Zawadzkicollecting NVMe error counts. 791a1aede09STomasz Zawadzki 792f61b0041SRichael ZhuangAdded I/O statistics per I/O path to the NVMe bdev module for NVMe bdev multipath. It can be 793a1aede09STomasz Zawadzkienabled by a new option `io_path_stat` of RPC `bdev_nvme_set_options`. 794f61b0041SRichael Zhuang 795a1aede09STomasz ZawadzkiAdded RPC `bdev_nvme_get_path_iostat` to get I/O statistics for IO paths of the NVMe bdev. 796b317d8f3SRichael Zhuang 797a1aede09STomasz ZawadzkiAdded `selector` parameter to `bdev_nvme_set_multipath_policy` RPC to set path selector for multipath. 7986aa4edc2SRichael ZhuangOption `round_robin` and `queue_depth` are available. 7996aa4edc2SRichael Zhuang 800a1aede09STomasz ZawadzkiAdded `rr_min_io` option to RPC `bdev_nvme_set_multipath_policy`. It switches I/O to 8012f500a23SRichael Zhuanganother path after rr_min_io I/Os are routed to current io path for the round-robin 8022f500a23SRichael Zhuangpath selector. 8032f500a23SRichael Zhuang 804a1aede09STomasz ZawadzkiAdded option `--io-path-stat` for RPC `bdev_nvme_set_option` to enable collecting io path stat. 805a1aede09STomasz Zawadzki 806a1aede09STomasz Zawadzki### bdev_raid 807a1aede09STomasz Zawadzki 808a1aede09STomasz ZawadzkiChanged `bdev_raid_get_bdevs` RPC output format to include raid_bdev details. 809f61b0041SRichael Zhuang 81029784f35SKrzysztof Karas### bdevperf 81129784f35SKrzysztof Karas 81229784f35SKrzysztof KarasPromoted the application to example to match similar programs: fio_plugin and perf. 81329784f35SKrzysztof KarasIt can now be found inside `examples/bdev/bdevperf`. 81429784f35SKrzysztof Karas 81562876270STomasz Zawadzki### env 81662876270STomasz Zawadzki 81762876270STomasz ZawadzkiAdded `spdk_mempool_mem_iter` that allows to get start address and length of each memory 81862876270STomasz Zawadzkichunk in order to create app-specific resources. 81962876270STomasz Zawadzki 820a1aede09STomasz Zawadzki### event 821cd4ac9c7SXinrui Mao 822a1aede09STomasz ZawadzkiAdded core lock file mechanism to prevent the same CPU cores from being used by multiple 823a1aede09STomasz ZawadzkiSPDK application instances. 824cd4ac9c7SXinrui Mao 825a1aede09STomasz ZawadzkiAdded `--disable-cpumask-locks` command line switch to disable CPU locks on SPDK startup. 8267f236385SThanos Makatos 827a1aede09STomasz ZawadzkiAdded RPCs `framework_enable_cpumask_locks` and `framework_disable_cpumask_locks` to enable 828a1aede09STomasz Zawadzkiand disable CPU core locks in runtime. 8297f236385SThanos Makatos 830a1aede09STomasz ZawadzkiAdded `--rpcs-allowed` command line option. Users can specify a comma-separated list of RPC 831a1aede09STomasz Zawadzkinames with this option to restrict allowed RPCs to only that list. 8329fa25237SJohn Levon 83362876270STomasz ZawadzkiAdded `--vfio-vf-token` command line option to specify a VF token (UUID) 83462876270STomasz Zawadzkishared between SR-IOV PF and VFs for vfio_pci driver. 83562876270STomasz Zawadzki 836ecc80dfcSJohn LevonThe `spdk_iov_xfer_*()` APIs were added for handling incremental copying between 837ecc80dfcSJohn Levonan iovec and a buffer. 838ecc80dfcSJohn Levon 83970f185eaSThanos Makatos### json 84070f185eaSThanos Makatos 84170f185eaSThanos MakatosAdded API `spdk_json_write_double` and `spdk_json_write_named_double` to allow 84270f185eaSThanos Makatosfor writing and decoding of the the double data type. 84370f185eaSThanos Makatos 8445b50d3e8SMike Gerdts### log 8455b50d3e8SMike Gerdts 8465b50d3e8SMike GerdtsAdded consistent tracking of use of deprecated behavior. Deprecations continue to be 8475b50d3e8SMike Gerdtslisted in deprecation.md and now are in subsections with headers matching a tag 8485b50d3e8SMike Gerdtsused in `SPDK_LOG_DEPRECATED()` calls. When deprecated behavior is used, these 8495b50d3e8SMike Gerdtstags will appear in SPDK's log at the warn level. As the SPDK application exits, it 8505b50d3e8SMike Gerdtswill log a summary of how many times `SPDK_LOG_DEPRECATED()` was called for each 8515b50d3e8SMike Gerdtstag that was logged at least once. 8525b50d3e8SMike Gerdts 8537706450fSMichael Haeuptle### nvme 8547706450fSMichael Haeuptle 855a1aede09STomasz ZawadzkiNVMe transport options were newly introduced. The NVMe transport options are defined via 856a1aede09STomasz Zawadzkithe `spdk_nvme_transport_opts` structure and configured via `spdk_nvme_transport_get_opts` 857a1aede09STomasz Zawadzkiand `spdk_nvme_transport_get_opts` functions. 858a1aede09STomasz Zawadzki 859a1aede09STomasz ZawadzkiShared receive queue was supported by the RDMA transport. It can be configured by 860a1aede09STomasz Zawadzkia new NVMe transport option `rdma_srq_size`. 861a1aede09STomasz Zawadzki 8627706450fSMichael HaeuptleAdded `transport_tos` to `spdk_nvme_ctrlr_opts` to support setting of the "type of service" 8637706450fSMichael Haeuptlevalue in the IPv4 header. Only RDMA is supported at this time. 8647706450fSMichael Haeuptle 865a1aede09STomasz ZawadzkiAdded API `spdk_nvme_qpair_get_num_outstanding_reqs` to get the number of outstanding reqs of 866070d61f2SRichael Zhuanga specified qpair. 867070d61f2SRichael Zhuang 86862876270STomasz Zawadzki### nvmf 86962876270STomasz Zawadzki 87062876270STomasz ZawadzkiAdded API `spdk_nvmf_tgt_pause_polling` and `spdk_nvmf_tgt_resume_polling` to allow 87162876270STomasz Zawadzkipausing polling on poll group of a given target. 87262876270STomasz Zawadzki 87373ba05f7SBen WalkerThe `num_shared_buffers` option now controls the maximum number of buffers a transport will 87473ba05f7SBen Walkerpull from the central `iobuf` pool. It will not allocate additional memory. If the requested 87573ba05f7SBen Walkeramount cannot be satisfied, a warning will be displayed to increase the size of the `iobuf` 87673ba05f7SBen Walkerpool. 87773ba05f7SBen Walker 878a1aede09STomasz Zawadzki### rpc 879990cd38aSMichael Haeuptle 880a1aede09STomasz ZawadzkiAdded `spdk_rpc_set_allowlist` to restrict allowed RPCs to the specified list. 881990cd38aSMichael Haeuptle 882a1aede09STomasz Zawadzki### scheduler 883a1aede09STomasz Zawadzki 884a1aede09STomasz ZawadzkiChanging scheduler from dynamic back to static is no longer possible, 885a1aede09STomasz Zawadzkias there is no way of saving original SPDK thread distribution on reactors. 886a1aede09STomasz Zawadzki 887a1aede09STomasz Zawadzki### thread 888a1aede09STomasz Zawadzki 889a1aede09STomasz ZawadzkiAdded `spdk_thread_get_app_thread` which returns the first thread that was created using 890a1aede09STomasz Zawadzki`spdk_thread_create`. 891a1aede09STomasz Zawadzki 892a1aede09STomasz ZawadzkiAdded `spdk_thread_is_running`. This returns `true` for a running thread, or `false` if 893a1aede09STomasz Zawadzkiits exit process has started using `spdk_thread_exit`. 894a1aede09STomasz Zawadzki 895a1aede09STomasz ZawadzkiAdded API `spdk_spin_init`, `spdk_spin_destroy`, `spdk_spin_lock`, `spdk_spin_unlock`, and 896a1aede09STomasz Zawadzki`spdk_spin_held` to support spinlocks that are aware of the SPDK concurrency model. 897a1aede09STomasz Zawadzki 89862876270STomasz ZawadzkiAdded iobuf buffer pool, set of API calls for allocating data buffers across libraries. 89962876270STomasz ZawadzkiPlease see new API `spdk_iobuf_*`. 90062876270STomasz Zawadzki 901a1aede09STomasz Zawadzki### trace 902a1aede09STomasz Zawadzki 903a1aede09STomasz ZawadzkiNew `trace_get_info` RPC was added to get name of shared memory file, list of the 904a1aede09STomasz Zawadzkiavailable trace point groups and mask of the available trace points for each group. 9056aa4edc2SRichael Zhuang 90690a6407dSYifan Bian### ublk device 90790a6407dSYifan Bian 90890a6407dSYifan BianThe ublk application supports the ublk kernel driver. It's implemented as a ublk backend 90990a6407dSYifan Bianin spdk_tgt and could be started with specifying configuration. See the 91090a6407dSYifan Bian[ublk](https://www.kernel.org/doc/html/latest/block/ublk.html) documentation for more details. 91190a6407dSYifan Bian 91290a6407dSYifan Bianublk bdev could export a block device via Linux ublk. It will move this backend device into userspace 913a1aede09STomasz Zawadzkias `/dev/ublkb*`. Before to adding ublk device, need to create ublk target by RPC method. 914a1aede09STomasz Zawadzki 915a1aede09STomasz Zawadzki### util 916a1aede09STomasz Zawadzki 917a1aede09STomasz ZawadzkiNew API `spdk_fd_group_get_epoll_event` that returns the epoll(7) event that 918a1aede09STomasz Zawadzkicaused a function callback in file descriptor group to execute. 919a1aede09STomasz Zawadzki 92062876270STomasz ZawadzkiAdded API `spdk_strarray_from_string`, `spdk_strarray_dup` and `spdk_strarray_free` 92162876270STomasz Zawadzkifor handling arrays of strings. 92262876270STomasz Zawadzki 923a1aede09STomasz ZawadzkiA new API `spdk_strcpy_replace` was added to replace all occurrences of the search string 924a1aede09STomasz Zawadzkiwith the replacement string. 925a1aede09STomasz Zawadzki 926a1aede09STomasz ZawadzkiNew API `spdk_iov_memset()` was added to memset an iovec. 927a1aede09STomasz Zawadzki 928a1aede09STomasz ZawadzkiNew API `spdk_iov_one()` was added to initialize an iovec for a single buffer. 92990a6407dSYifan Bian 930896a25fbSTomasz Zawadzki## v22.09 93139169d28STomasz Zawadzki 932ef1bec00STomasz Zawadzki### accel 933bb432b4eStongkunkun 934ef1bec00STomasz ZawadzkiMany names were changed in the accel framework to make them consistent both with themselves and 935ef1bec00STomasz Zawadzkithe rest of SPDK. The primary public header file is now named `include/spdk/accel.h`. 936bb432b4eStongkunkun 937ef1bec00STomasz ZawadzkiAdded a new runtime RPC `accel_get_opc_assignments` to get a list of current opcode to engine 938ef1bec00STomasz Zawadzkiassignments. 939bb432b4eStongkunkun 940ef1bec00STomasz ZawadzkiAdded a new startup RPC `accel_assign_opc` to assign/override a specific opcode to 941ef1bec00STomasz Zawadzkian engine. 942bb432b4eStongkunkun 9436f338d4bSKrishna Kanth Reddy### bdev 9446f338d4bSKrishna Kanth Reddy 9456f338d4bSKrishna Kanth ReddyNew RPCs `bdev_xnvme_create` and `bdev_xnvme_delete` were added to support the xNVMe bdev. 9466f338d4bSKrishna Kanth Reddy 9471212b53fSShuhei MatsumotoA new API `spdk_bdev_for_each_bdev_io` was added to execute the function on the appropriate 9481212b53fSShuhei Matsumotothread for each bdev_io submitted to the bdev. 9491212b53fSShuhei Matsumoto 950cad6f55eSShuhei MatsumotoA new API `spdk_bdev_get_current_qd` was added to measure and return the queue depth from a 951cad6f55eSShuhei Matsumotobdev. This API is available even when queue depth sampling is disabled. 952cad6f55eSShuhei Matsumoto 9535accac26STomasz ZawadzkiAdded `spdk_bdev_seek_data`, `spdk_bdev_seek_hole` and `spdk_bdev_io_get_seek_offset` functions 9545accac26STomasz Zawadzkithat start from a given offset and seek for next data or for next hole. At this time only 9555accac26STomasz Zawadzkisupported by lvol bdev module. 9565accac26STomasz Zawadzki 9575accac26STomasz ZawadzkiA new parameter `io_drain_timeout` has been added to `spdk_bdev` structure. It controls how long 9585accac26STomasz Zawadzkia bdev reset must wait for IO to complete prior to issuing a reset to the underlying device. 9595accac26STomasz ZawadzkiIf there is no outstanding IO at the end of that period, the reset is skipped. 9605accac26STomasz ZawadzkiBest defined for bdevs that share an underlying bdev, such as multiple lvol bdevs sharing 9615accac26STomasz Zawadzkian nvme device, to avoid unnecessarily resetting the underlying bdev and affecting other 9625accac26STomasz Zawadzkibdevs that are sharing it. 9635accac26STomasz ZawadzkiModifying this field is optional. Setting the value to 0 keeps the original behavior 9645accac26STomasz Zawadzkito always send resets immediately, even if there is no I/O outstanding. 9655accac26STomasz Zawadzki 96688833020Syupeng### blobstore 96788833020Syupeng 968ef1bec00STomasz ZawadzkiReserve space for `used_clusters` bitmap. The reserved space could be used for blobstore growing 96988833020Syupengin the future. 97088833020Syupeng 9712e7a7fe5SEvgeniy KochetovAdded `is_zeroes` operation to `spdk_bs_dev`. It allows to detect if logical blocks are backed 9722e7a7fe5SEvgeniy Kochetovby zeroes device and do a shortcut in copy-on-write flow by excluding copy part from zeroes device. 9732e7a7fe5SEvgeniy Kochetov 9745accac26STomasz ZawadzkiAdded `spdk_blob_get_next_allocated_io_unit` and `spdk_blob_get_next_unallocated_io_unit` functions 9755accac26STomasz Zawadzkithat start from a given offset and seek for first io_unit belonging to an allocated cluster 9765accac26STomasz Zawadzkior first io_unit belonging to an unallocated cluster. 9775accac26STomasz Zawadzki 9785accac26STomasz ZawadzkiAdded `spdk_bs_grow` function to grow blobstore size if the underlying bdev size is increased. 9795accac26STomasz ZawadzkiThis is used by lvol bdev via `bdev_lvol_grow_lvstore` RPC. 9805accac26STomasz Zawadzki 9815accac26STomasz Zawadzki### daos 9825accac26STomasz Zawadzki 9835accac26STomasz ZawadzkiAdded new DAOS bdev module, that creates SPDK block device on top of DAOS DFS. 9845accac26STomasz ZawadzkiPlease see [documentation](https://spdk.io/doc/bdev.html#bdev_config_daos) for more details. 9855accac26STomasz Zawadzki 9865accac26STomasz Zawadzki### env 9875accac26STomasz Zawadzki 9885accac26STomasz ZawadzkiAdded `spdk_pci_register_device_provider` and matching `SPDK_PCI_REGISTER_DEVICE_PROVIDER` 9895accac26STomasz Zawadzkifunctions for registering PCI device providers. That allow the VMD driver to be notified 9905accac26STomasz Zawadzkiwhen users want to attach a device under a given BDF and when a device is detached. 9915accac26STomasz Zawadzki 992ef1bec00STomasz Zawadzki### init 993ef1bec00STomasz Zawadzki 994ef1bec00STomasz Zawadzki`spdk_subsystem_init_from_json_config` now fails if the JSON configuration file is not 995ef1bec00STomasz Zawadzkian object with an array named "subsystems". 996ef1bec00STomasz Zawadzki 9975accac26STomasz Zawadzki### iscsi 9985accac26STomasz Zawadzki 9995accac26STomasz ZawadzkiAdded `bdev_iscsi_set_options` RPC to modify options of the iSCSI bdev module. 10005accac26STomasz Zawadzki 1001ef1bec00STomasz Zawadzki### json 1002ef1bec00STomasz Zawadzki 1003ef1bec00STomasz ZawadzkiAdded `spdk_json_find` API return errcode: EPROTOTYPE - json not enclosed in {}. 1004ef1bec00STomasz Zawadzki`spdk_json_find` now returns -EPROTOTYPE instead of -ENOENT if the object parameter 1005ef1bec00STomasz Zawadzkidoes not point to a JSON object (i.e. is not enclosed with {}). 1006ef1bec00STomasz Zawadzki 100788833020Syupeng### lvol 100888833020Syupeng 1009ef1bec00STomasz ZawadzkiAdd `num_md_pages_per_cluster_ratio` parameter to the `bdev_lvol_create_lvstore` RPC. 1010ef1bec00STomasz ZawadzkiCalculate `num_md_pages` from `num_md_pages_per_cluster_ratio`, and pass it to `spdk_bs_opts`. 1011ef1bec00STomasz Zawadzki 1012ef1bec00STomasz Zawadzki### nvme 1013ef1bec00STomasz Zawadzki 1014ef1bec00STomasz ZawadzkiAdded SPDK_NVME_TRANSPORT_CUSTOM_FABRICS to enum `spdk_nvme_transport_type` to support custom 1015ef1bec00STomasz Zawadzkifabric transport. SPDK_NVME_TRANSPORT_CUSTOM was intended to be non-fabric custom transport. 1016ef1bec00STomasz Zawadzki 1017ef1bec00STomasz ZawadzkiAdded a new function `spdk_nvme_ns_cmd_verify` to submit a Verify Command to a Namespace. 1018ef1bec00STomasz Zawadzki 1019ef1bec00STomasz ZawadzkiAdded `spdk_nvme_ctrlr_disable_read_changed_ns_list_log_page` to allow an application to 1020ef1bec00STomasz Zawadzkitell the driver to not read the CHANGED_NS_LIST log page in response to a NS_ATTR_CHANGED 1021ef1bec00STomasz ZawadzkiAEN. When called the application is required to read this log page instead to clear the 1022ef1bec00STomasz ZawadzkiAEN. 1023ef1bec00STomasz Zawadzki 1024ef1bec00STomasz ZawadzkiAdded `psk` field to `spdk_nvme_ctrlr_opts` struct in order to enable SSL socket implementation 1025ef1bec00STomasz Zawadzkiof TCP connection and set the PSK. Applicable for TCP transport only. 1026ef1bec00STomasz Zawadzki 1027ef1bec00STomasz Zawadzki### raid 1028ef1bec00STomasz Zawadzki 1029ef1bec00STomasz ZawadzkiRenamed the `raid5` module to `raid5f` to reflect that it is not a traditional 1030ef1bec00STomasz ZawadzkiRAID5 implementation - only full stripe writes are supported, partial stripe 1031ef1bec00STomasz Zawadzkiwrites (read-modify-write) are not. 103288833020Syupeng 10337104c833SBoris Glimcher### rpc 10347104c833SBoris Glimcher 103535f7f0ceSBoris GlimcherAdded `psk` parameter to `bdev_nvme_attach_controller` RPC in order to enable SSL socket implementation 103635f7f0ceSBoris Glimcherof TCP connection and set the PSK. Applicable for TCP transport only. 103735f7f0ceSBoris Glimcher 1038806744b7SBoris GlimcherNew options `enable_ktls` and `tls_version` were added to the `sock_impl_set_options` structure. 10396212597bSBoris GlimcherNew options `psk_key` and `psk_identity` were added to the `sock_impl_set_options` structure. 10407104c833SBoris Glimcher 1041f656eed6SYifan BianAdded warning message for `bdev_rbd_create`, if it is used without -c. 1042f656eed6SYifan Bian`bdev_rbd_create()` API without specifying -c is deprecated and will be removed in future release. 1043f656eed6SYifan Bian 1044f0441b29SKonrad SztyberRenamed `enable_vmd` RPC to `vmd_enable` to make it consistent with our naming scheme of 1045f0441b29SKonrad Sztyber`<subsystem>_<action>`. For now, the old name is still available, but is marked as deprecated. 1046f0441b29SKonrad Sztyber 1047515419acSAleksey MarchukNew function `spdk_rpc_get_method_state_mask` was added to RPC library. 1048515419acSAleksey Marchuk 1049ef1bec00STomasz Zawadzki### sma 105083a4b155SArtur Paszkiewicz 1051ef1bec00STomasz ZawadzkiExtended `VolumeParameters` with crypto parameters allowing the user to configure crypto when 1052ef1bec00STomasz Zawadzkiattaching a volume to a device. This interface is now supported by all upstream device types 1053ef1bec00STomasz Zawadzki(nvmf-tcp, virtio-blk, vfio-user) using `bdev_crypto`. Users must specify the crypto engine to use 1054ef1bec00STomasz Zawadzkiunder `crypto` section in config. It is also possible to register out-of-tree crypto engines by 1055ef1bec00STomasz Zawadzkiinheriting from the `CryptoEngine` class. 105683a4b155SArtur Paszkiewicz 1057ef1bec00STomasz ZawadzkiAdded two new methods: `SetQos` and `GetQosCapabilities` allowing the user to configure QoS on a 1058ef1bec00STomasz Zawadzkiper-device or per-volume level. Not all QoS settings have to be supported by each device, so users 1059ef1bec00STomasz Zawadzkican use `GetQosCapabilities` to query them for that. All upstream device types support QoS on a 1060ef1bec00STomasz Zawadzkiper-volume level using bdev layer's QoS mechanism. 1061081f080aSBen Walker 1062ef1bec00STomasz Zawadzki### sock 1063c6ecddccSpaul luse 1064ef1bec00STomasz ZawadzkiAdded new `ssl` based socket implementation, the code is located in `module/sock/posix`. 1065ef1bec00STomasz ZawadzkiFor now we are using hard-coded PSK and only support TLS 1.3. 106635f7f0ceSBoris Glimcher 1067503835eeSBlachut, Bartosz### util 1068503835eeSBlachut, Bartosz 1069503835eeSBlachut, BartoszAdded new functions: `spdk_hexlify` and `spdk_unhexlify`. 1070503835eeSBlachut, Bartosz 107169c448a3SArtur PaszkiewiczA new API `spdk_xor_gen` was added to generate XOR from multiple source buffers. It is going to be 107269c448a3SArtur Paszkiewiczused by `raid5f` for calculating parity. 107369c448a3SArtur Paszkiewicz 10745accac26STomasz Zawadzki### vfu_tgt 10755accac26STomasz Zawadzki 10765accac26STomasz ZawadzkiAdded vfu_tgt library abstraction based on libvfio-user for PCI device emulation. 10775accac26STomasz ZawadzkiBesides the NVMe device emulation, its now possible to emulate virtio-blk and virtio-scsi 10785accac26STomasz Zawadzkidevices. 10795accac26STomasz Zawadzki 1080f869197bSJim Harris### virtio 1081f869197bSJim Harris 1082f869197bSJim Harrisvirtio-vhost-user no longer tries to support dynamic memory allocation. The vhost target does 1083f869197bSJim Harrisnot support the high rate of SET_MEM_TABLE vhost messages that result from dynamic memory 1084f869197bSJim Harrisallocation, so a virtio-vhost-user device will now present an ERRLOG, assert, and skip the 1085f869197bSJim HarrisSET_MEM_TABLE vhost message if a memory notification is received outside of the normal device 1086f869197bSJim Harrisstart/stop. Applications using the virtio library in vhost-user mode should now pre-allocate 1087f869197bSJim Harristhe application's memory using the -s/--mem-size option and use single shared memory file 1088f869197bSJim Harrissegments using the -g/--single-file-segments option. 1089f869197bSJim Harris 10905accac26STomasz ZawadzkiAdded `vfio-user` transport type for virtio-blk and virtio-scsi devices. 10915accac26STomasz Zawadzki 1092cdffb297SKonrad Sztyber### vmd 1093cdffb297SKonrad Sztyber 1094cdffb297SKonrad SztyberFixed hotplug when a device is inserted in a slot in which a disk was already enumerated previously. 1095cdffb297SKonrad SztyberAdded two new RPCs: `vmd_remove_device` simulating a hotremove, and `vmd_rescan`, which rescans all 1096cdffb297SKonrad Sztyberbuses managed by the VMD driver and hotplugs all newfound devices. 1097cdffb297SKonrad Sztyber 109839169d28STomasz Zawadzki## v22.05 1099edd27df2STomasz Zawadzki 110087cfed84Szhangduan### sock 110187cfed84Szhangduan 110287cfed84SzhangduanA new option `ack_timeout` was added to the `spdk_sock_opts` structure. 110387cfed84Szhangduan 110405dd3c0bSChunsong Feng### util 110505dd3c0bSChunsong Feng 110605dd3c0bSChunsong FengA new parameter `bounce_iovcnt` was added to `spdk_dif_generate_copy` and `spdk_dif_verify_copy`. 110705dd3c0bSChunsong FengThe `bounce_iovcnt` is used to specify the number of bounce_iov to support multiple block-aligned 110805dd3c0bSChunsong Fengfragment copies. 110905dd3c0bSChunsong Feng 1110dabca256Syidong0635A new API `spdk_copy_iovs_to_buf` and `spdk_copy_buf_to_iovs` were added to copy iovs to buf or 1111dabca256Syidong0635copy buf to iovs. There're many cases need to use these two APIs. 1112dabca256Syidong0635 11130badf81eSJim Harris### bdev 11140badf81eSJim Harris 11150badf81eSJim HarrisRemoved deprecated spdk_bdev_module_finish_done(). Use spdk_bdev_module_fini_done() instead. 11160badf81eSJim Harris 111796c007d3SShuhei MatsumotoA new API `spdk_bdev_unregister_by_name` was added to handle race conditions correctly. 111896c007d3SShuhei Matsumoto 1119428b17a0SShuhei MatsumotoNew APIs, `spdk_for_each_bdev` and `spdk_for_each_bdev_leaf`, were added to provide iteration 1120428b17a0SShuhei Matsumotosafe for race conditions. 1121428b17a0SShuhei Matsumoto 11222a6a6448SShuhei MatsumotoA new RPC `bdev_nvme_get_io_paths` was added to get all active I/O paths. 11232a6a6448SShuhei Matsumoto 112422b77a3cSShuhei MatsumotoA new RPC `bdev_nvme_set_preferred_path` was added to set preferred I/O path for an NVMe bdev 112522b77a3cSShuhei Matsumotowhen in multipath mode. This RPC does not support NVMe bdevs in failover mode. 112622b77a3cSShuhei Matsumoto 11278f9b9775SShuhei MatsumotoA new RPC `bdev_nvme_set_multipath_policy` was added to set multipath policy of a NVMe bdev 11288f9b9775SShuhei Matsumotoin multipath mode. 11298f9b9775SShuhei Matsumoto 113000d46b80SShuhei MatsumotoA new option `disable_auto_failback` was added to the `bdev_nvme_set_options` RPC to disable 113100d46b80SShuhei Matsumotoautomatic failback. 113200d46b80SShuhei Matsumoto 1133ffef30aeSpaul luse### idxd / dsa 11347d63e716Spaul luse 11357d63e716Spaul luseA new parameter `flags` was added to all low level submission and preparation 11367d63e716Spaul luseAPIs to enable the caller to pass operation flags per the DSA specification. 11377d63e716Spaul luse 11388951c157Spaul luseA new flag 'SPDK_IDXD_FLAG_PERSISTENT' was added to let DSA know that 11398951c157Spaul lusethe destination is persistent. 11408951c157Spaul luse 1141ffef30aeSpaul luseThe RPC `idxd_scan_accel_engine` has been renamed to `dsa_scan_accel_engine` 1142ffef30aeSpaul luse 1143b483811fSpaul luseThe RPC `iaa_scan_accel_engine` has been added. 1144b483811fSpaul luse 1145ffef30aeSpaul luseMany HW related structs/functions with the name `idxd` have been renamed `dsa` 1146ffef30aeSpaul luseto more accurately represent the HW they are associated with. 1147ffef30aeSpaul luse 11480ff560eaSpaul luseTwo new functions were added to the library `spdk_idxd_submit_compress` and 11490ff560eaSpaul luse`spdk_idxd_submit_decompress` 11500ff560eaSpaul luse 115112c40f05Spaul luse### accel_fw 115212c40f05Spaul luse 115312c40f05Spaul luseA new parameter `flags` was added to accel API. 115412c40f05Spaul luseThe APIs include: 115512c40f05Spaul luse`spdk_accel_submit_copy` 115612c40f05Spaul luse`spdk_accel_submit_dualcast` 115712c40f05Spaul luse`spdk_accel_submit_fill` 115812c40f05Spaul luse`spdk_accel_submit_copy_crc32c` 115912c40f05Spaul luse`spdk_accel_submit_copy_crc32cv` 11600ff560eaSpaul luse`spdk_accel_submit_compress` 11610ff560eaSpaul luse`spdk_accel_submit_decompress` 116212c40f05Spaul luse 11638951c157Spaul luseA new flag `ACCEL_FLAG_PERSISTENT` was added to indicate the target memory is PMEM. 11648951c157Spaul luse 1165e68aebd5Spaul luseThe API `spdk_accel_get_capabilities` has been removed. 1166e68aebd5Spaul luse 116745f24aebSYuriy Umanets### crypto 116845f24aebSYuriy Umanets 116945f24aebSYuriy UmanetsSupport for AES_XTS was added for MLX5 polled mode driver (pmd). 117045f24aebSYuriy Umanets 11711434e255SYuriy Umanetsbdev_crypto_create RPC now requires hexlified 'key' and 'key2' params for all pmd drivers. 11721434e255SYuriy UmanetsUnhexlifying is performed during RPC command processing and the vbdev crypto module runs on 11731434e255SYuriy Umanetsbinary keys as before. 11741434e255SYuriy Umanets 1175fa649869SKonrad Sztyber### bdev 1176fa649869SKonrad Sztyber 1177fa649869SKonrad SztyberAdded a timeout option to the `bdev_get_bdevs` RPC. It allows the user to specify the amount of 1178fa649869SKonrad Sztybertime to wait until a bdev with a given name appears in the system. 1179fa649869SKonrad Sztyber 11807a0c901aSMichael Haeuptle### bdev_nvme 11817a0c901aSMichael Haeuptle 11827a0c901aSMichael HaeuptleAdded `bdev_nvme_add_error_injection` and `bdev_nvme_remove_error_injection` RPCs to add and 11837a0c901aSMichael Haeuptleremove NVMe error injections. 11847a0c901aSMichael Haeuptle 11850fba8dc8SShuhei MatsumotoNew parameters, `ctrlr_loss_timeout_sec`, `reconnect_delay_sec`, and `fast_io_fail_timeout_sec`, are 11860fba8dc8SShuhei Matsumotoadded to the RPC `bdev_nvme_set_options`. They can be overridden if they are given by the RPC 11870fba8dc8SShuhei Matsumoto`bdev_nvme_attach_controller`. 11880fba8dc8SShuhei Matsumoto 1189a2360845SAlexey Marchuk### blobstore 1190a2360845SAlexey Marchuk 1191a2360845SAlexey MarchukNew functions `spdk_blob_io_writev_ext` and `spdk_blob_io_readv_ext` are added. The new functions accept 1192a2360845SAlexey Marchuk`spdk_blob_ext_io_opts` structure with extended IO request options. 1193a2360845SAlexey Marchuk 1194a71cd521SAlexis Lescouet### event 1195a71cd521SAlexis Lescouet 1196a71cd521SAlexis LescouetAdded `msg_mempool_size` parameter to `spdk_reactors_init` and `spdk_thread_lib_init_ext`. 1197a71cd521SAlexis LescouetThe size of `g_spdk_msg_mempool` can now be controlled through the same-named 1198a71cd521SAlexis Lescouetuser option of `spdk_app_opts` structure. 1199a71cd521SAlexis Lescouet 12000f3f107dSShuhei Matsumoto### nvme 12010f3f107dSShuhei Matsumoto 12020f3f107dSShuhei MatsumotoThe API `spdk_nvme_ctrlr_prepare_for_reset()` was deprecated. The functionality provided by the 12030f3f107dSShuhei Matsumoto`spdk_nvme_ctrlr_prepare_for_reset()` was merged into the API `spdk_nvme_ctrlr_disconnect()`. 12040f3f107dSShuhei Matsumoto 1205e8fdde52SJim Harris### nvmf 1206e8fdde52SJim Harris 1207e8fdde52SJim HarrisRemoved deprecated max_qpairs_per_ctrlr parameter from nvmf_create_transport RPC. Use 1208e8fdde52SJim Harrismax_io_qpairs_per_ctrlr instead. 1209e8fdde52SJim Harris 121025bc221cSJim HarrisDeprecated the ability for hosts to connect to the discovery subsystem automatically on any 121125bc221cSJim Harrisexisting listener. Users should now explicitly add listeners for the discovery subsystem. 121225bc221cSJim HarrisHost can still connect to the discovery subsystem as before, but a warning message will be 121325bc221cSJim Harrisemitted if no listener was configured for the transport ID of the incoming connection. 121425bc221cSJim Harris 1215dd174597SRui ChangAdded adaptive interrupt feature for vfio-user transport. New parameter `disable_adaptive_irq` 1216dd174597SRui Changis added to the RPC `nvmf_create_transport`. 1217dd174597SRui Chang 12185f270928SJohn Levon### thread 12195f270928SJohn Levon 12205f270928SJohn LevonAdded `spdk_thread_exec_msg()` API. 12215f270928SJohn Levon 1222900d0499SKrzysztof Karas### scheduler 1223900d0499SKrzysztof Karas 1224900d0499SKrzysztof Karas`framework_set_scheduler` can now be called after application initialization. 1225900d0499SKrzysztof KarasAdded callbacks to set custom parameters specific for each scheduler implementation 1226900d0499SKrzysztof Karasand `framework_get_scheduler` to retrieve them. 1227900d0499SKrzysztof Karas 1228900d0499SKrzysztof KarasAdded `dynamic` scheduler options: load_limit, core_limit, core_busy. Their descriptions 1229900d0499SKrzysztof Karasare available in JSON-RPC document, in section 1230900d0499SKrzysztof Karas[framework_set_scheduler](jsonrpc.html#rpc_framework_set_scheduler). 1231900d0499SKrzysztof Karas 123264eebbd1Syupeng### raid 123364eebbd1Syupeng 123464eebbd1SyupengAdd concat as a special raid module. The concat module could create a virtual bdev. The 123564eebbd1Syupengvirtual bdev combines multiple underlying bdevs together. The layout of the underlying 123664eebbd1Syupengbdevs is one after another. The concat bdev is extendable. When the free space of the 123764eebbd1Syupengconcat bdev is not enough, the user can deconstruct the concat bdev, then reconstruct it 123864eebbd1Syupengwith an additional underlying bdev. 123964eebbd1Syupeng 12409bff828fSRichael Zhuang### sock 12419bff828fSRichael Zhuang 12429bff828fSRichael ZhuangAllow MSG_ZEROCOPY flag to be set or not according to data size, which can be enabled and 12439bff828fSRichael Zhuangset by setting "zerocopy_threshold". zerocopy_threshold = 0 means disable this function; 12449bff828fSRichael Zhuangzerocopy_threshold > 0 means enable it and use this value as the threshold. 12459bff828fSRichael Zhuang 12469bff828fSRichael Zhuang### rpc 12479bff828fSRichael Zhuang 12489bff828fSRichael ZhuangIntroduced `zerocopy_threshold` to enable zerocopy on send for server sockets according to 12499bff828fSRichael Zhuangdata size to be flushed. 12509bff828fSRichael Zhuang 1251edd27df2STomasz Zawadzki## v22.01 1252077d0f3eSTomasz Zawadzki 1253fbb24d0eSpaul luse### accel 1254fbb24d0eSpaul luse 1255fbb24d0eSpaul luseThe batching capability was removed. Batching is now considered an implementation 1256fbb24d0eSpaul lusedetail of the low level drivers. 1257fbb24d0eSpaul luse 12584495bda4SShuhei Matsumoto### bdev 12594495bda4SShuhei Matsumoto 126045777e1bSShuhei MatsumotoThe NVMe bdev module supports multipath and improved I/O error resiliency. 126145777e1bSShuhei Matsumoto 12624495bda4SShuhei MatsumotoThe parameter `retry_count` of the RPC `bdev_nvme_set_options` was deprecated and will be 126343adb646SShuhei Matsumotoremoved in SPDK 22.04, and the parameter `transport_retry_count` is added and used instead. 126443adb646SShuhei Matsumoto 126543adb646SShuhei MatsumotoAn new parameter `bdev_retry_count` is added to the RPC `bdev_nvme_set_options`. 12664495bda4SShuhei Matsumoto 126745777e1bSShuhei MatsumotoNew parameters, `ctrlr_loss_timeout_sec`, `reconnect_delay_sec`, and `fast_io_fail_timeout_sec`, are 126845777e1bSShuhei Matsumotoadded to the RPC `bdev_nvme_attach_controller`. 126945777e1bSShuhei Matsumoto 127045777e1bSShuhei MatsumotoAn new parameter `num_io_queues` is added to `bdev_nvme_attach_controller` RPC to allow specifying amount 127145777e1bSShuhei Matsumotoof requested IO queues. 127245777e1bSShuhei Matsumoto 127340530635STomasz ZawadzkiAdded `key_file` parameter to the `rbd_register_cluster` RPC. It is an optional parameter to 127420c8a3b8STan Longspecify a keyring file to connect to a RADOS cluster. 127520c8a3b8STan Long 1276234a9ad9STomasz ZawadzkiAdded `spdk_bdev_get_zone_id` API to retrieve zone_id for a certain LBA. 1277234a9ad9STomasz Zawadzki 127840530635STomasz Zawadzki### bdev_aio 127940530635STomasz Zawadzki 128040530635STomasz ZawadzkiAdded `bdev_aio_rescan` RPC to allow rescanning the size of aio bdev. 128140530635STomasz Zawadzki 1282234a9ad9STomasz Zawadzki### bdev_nvme 1283234a9ad9STomasz Zawadzki 1284234a9ad9STomasz ZawadzkiAdded discovery service to bdev_nvme module, which now can connect to a discovery controller. 1285234a9ad9STomasz Zawadzkibdev_nvme will connect to all current and future subsystems in the discovery controller. 1286234a9ad9STomasz ZawadzkiAdded `bdev_nvme_start_discovery` and `bdev_nvme_stop_discovery` RPC. 1287234a9ad9STomasz Zawadzki 1288234a9ad9STomasz Zawadzki### dpdk 1289234a9ad9STomasz Zawadzki 1290234a9ad9STomasz ZawadzkiUpdated DPDK submodule to DPDK 21.11. 1291234a9ad9STomasz Zawadzki 129240530635STomasz Zawadzki### env 129340530635STomasz Zawadzki 129440530635STomasz ZawadzkiAdded `spdk_pci_for_each_device`. 129540530635STomasz Zawadzki 129640530635STomasz ZawadzkiRemoved `spdk_pci_get_first_device` and `spdk_pci_get_next_device`. These APIs were unsafe, because 129740530635STomasz Zawadzkithey did not account for PCI devices being inserted or removed while the caller was using handles 129840530635STomasz Zawadzkireturned from these APIs. Existing users of these APIs should switch to `spdk_pci_for_each_device` 129940530635STomasz Zawadzkiinstead. 130040530635STomasz Zawadzki 130140530635STomasz ZawadzkiAdded 3 experimental APIs to handle PCI device interrupts (`spdk_pci_device_enable_interrupt`, 130240530635STomasz Zawadzki`spdk_pci_device_disable_interrupt`, `spdk_pci_device_get_interrupt_efd`). 130340530635STomasz Zawadzki 1304234a9ad9STomasz ZawadzkiAdded `framework_get_pci_devices` RPC to list PCIe devices attached to an SPDK application. 1305234a9ad9STomasz Zawadzki 130640530635STomasz Zawadzki### idxd 130740530635STomasz Zawadzki 130840530635STomasz ZawadzkiMany APIs are now vectored rather than scalar, meaning they take iovecs instead of individual pointers. 130940530635STomasz Zawadzki 1310234a9ad9STomasz Zawadzki### json 1311234a9ad9STomasz Zawadzki 1312234a9ad9STomasz ZawadzkiAdded `spdk_json_write_bytearray` API to serialize a buffer as a hex string. 1313234a9ad9STomasz Zawadzki 13147a0a2800SShuhei Matsumoto### nvme 13157a0a2800SShuhei Matsumoto 131640530635STomasz ZawadzkiAPI `spdk_nvme_trtype_is_fabrics` was added to return existing transport type 131740530635STomasz Zawadzkiis fabric or not. 131840530635STomasz Zawadzki 131940530635STomasz ZawadzkiAPI `spdk_nvme_poll_group_remove` was limited to be available only for a 132040530635STomasz Zawadzkidisconnected qpair in the group. 132140530635STomasz Zawadzki 13227a0a2800SShuhei MatsumotoNew APIs, `spdk_nvme_ctrlr_disconnect`, `spdk_nvme_ctrlr_reconnect_async`, and 13237a0a2800SShuhei Matsumoto`spdk_nvme_ctrlr_reconnect_poll_async`, have been added to improve error recovery, and 13247a0a2800SShuhei Matsumotothe existing APIs,`spdk_nvme_ctrlr_reset_async` and `spdk_nvme_ctrlr_reset_poll_async` 13257a0a2800SShuhei Matsumotowere deprecated. 13267a0a2800SShuhei Matsumoto 1327234a9ad9STomasz ZawadzkiAdded `spdk_nvme_ctrlr_get_discovery_log_page` API for getting the full discovery log page 1328234a9ad9STomasz Zawadzkifrom a discovery controller. 1329234a9ad9STomasz Zawadzki 133079727986SJim Harris### nvmf 133179727986SJim Harris 1332236cc3a1STomasz ZawadzkiAdded support for zero-copy operations in the NVMe-oF TCP target. It can be enabled via 1333236cc3a1STomasz Zawadzkithe `zcopy` parameter when creating a transport. The zero-copy operations are only used 1334236cc3a1STomasz Zawadzkifor requests not using in-capsule data. 1335236cc3a1STomasz Zawadzki 133640530635STomasz ZawadzkiAdded a `subsystem` parameter to `spdk_nvmf_transport_stop_listen_async`. When not NULL, 133779727986SJim Harrisit will only disconnect qpairs for controllers associated with the specified subsystem. 133879727986SJim Harris 1339234a9ad9STomasz ZawadzkiRemoved accept poller from transport layer. Each transport can have its own policy of 1340234a9ad9STomasz Zawadzkihandling new connections. To notify transport layer `spdk_nvmf_poll_group_add` and 1341234a9ad9STomasz Zawadzki`spdk_nvmf_tgt_new_qpair` can be used. 1342234a9ad9STomasz Zawadzki 13436b7e9d0aSGangCao### scsi 13446b7e9d0aSGangCao 13456b7e9d0aSGangCaoStructure `spdk_scsi_lun` has been extended with new member `resizing` so that SCSI layer now reports 13466b7e9d0aSGangCaounit attention for disk resize. 13476b7e9d0aSGangCao 1348234a9ad9STomasz Zawadzki### trace 1349234a9ad9STomasz Zawadzki 1350234a9ad9STomasz ZawadzkiAdded `spdk_trace_create_tpoint_group_mask` to return tracepoint group mask from 1351234a9ad9STomasz Zawadzkia tracepoint group name. 1352234a9ad9STomasz Zawadzki 1353234a9ad9STomasz ZawadzkiAdded `trace_set_tpoint_mask` and `trace_clear_tpoint_mask` RPC to allow enabling 1354234a9ad9STomasz Zawadzkiindividual traces. 1355234a9ad9STomasz Zawadzki 1356234a9ad9STomasz Zawadzki### util 1357234a9ad9STomasz Zawadzki 1358234a9ad9STomasz ZawadzkiAdded `spdk_ioviter_first` and `spdk_ioviter_next` to iterate over two iovecs and 1359234a9ad9STomasz Zawadzkiyield pointers to common length segments. 1360234a9ad9STomasz Zawadzki 13616301f891STomasz Zawadzki### sock 13626301f891STomasz Zawadzki 13636301f891STomasz ZawadzkiA new parameter `hint` is added to `spdk_sock_get_optimal_sock_group`. It allows to suggest 13646301f891STomasz Zawadzkia poll group when no optimal poll group is found. 13656301f891STomasz Zawadzki 1366077d0f3eSTomasz Zawadzki## v21.10 1367789f8b85STomasz Zawadzki 13683d8904c6SAlexey MarchukStructure `spdk_nvmf_target_opts` has been extended with new member `discovery_filter` which allows to specify 13693d8904c6SAlexey Marchukfiltering rules applied during discovery log generation. Refer to `enum spdk_nvmf_tgt_discovery_filter` for more info. 13703d8904c6SAlexey Marchuk 1371c3a58489SAlexey Marchuk### bdev 1372c3a58489SAlexey Marchuk 1373c3a58489SAlexey MarchukNew API `spdk_bdev_get_memory_domains` has been added, it allows to get SPDK memory domains used by bdev. 1374c3a58489SAlexey Marchuk 1375ac6f2bddSAlexey MarchukNew API functions `spdk_bdev_readv_blocks_ext` and `spdk_bdev_writev_blocks_ext` have been added. 1376ac6f2bddSAlexey MarchukThese functions accept `spdk_bdev_ext_io_opts` structure with extended IO request 1377ac6f2bddSAlexey Marchukoptions, e.g. DMA memory domain which describes data that may belong to another memory domain and 1378ac6f2bddSAlexey Marchukcan't be accessed directly. 1379ac6f2bddSAlexey Marchuk 1380413d25b0STomasz ZawadzkiAdded `async_fini_start` to allow bdev modules to complete the `fini_start` asynchronously, 1381413d25b0STomasz Zawadzkiwith new `spdk_bdev_module_fini_start_done` API. 1382413d25b0STomasz Zawadzki 1383511fe155STomasz ZawadzkiDeprecated `spdk_bdev_module_finish_done()` API, which will be removed in SPDK 22.01. 1384511fe155STomasz ZawadzkiBdev modules should use `spdk_bdev_module_fini_done()` instead. 1385511fe155STomasz Zawadzki 138693e2ff5aSTomasz ZawadzkiThe `ocssd` bdev has been removed. The Open Channel specification has been largely superseded by 138793e2ff5aSTomasz Zawadzkizoned namespaces, few if any devices have been brought to market, and there is little reason to 1388d39c4443SBen Walkercontinue to support this. OCSSD support in the nvme driver will remain for now. 1389d39c4443SBen Walker 13904e527910SAlexey Marchuk### dma 13914e527910SAlexey Marchuk 13924e527910SAlexey MarchukA new library, lib/dma, has been added. This library provides the necessary infrastructure for 13934e527910SAlexey Marchukhandling systems and devices with multiple memory domains. For example, a PCIe add-in card with an 13944e527910SAlexey MarchukSoC may be running SPDK on the SoC. That SoC has its own local memory, but SPDK may be controlling 13954e527910SAlexey Marchukdevices that can also access the host system memory. This library provides infrastructure to enumerate 13964e527910SAlexey Marchukthe memory domains and request hardware perform DMA transfers between them. 13974e527910SAlexey Marchuk 139893e2ff5aSTomasz Zawadzki### dpdk 139993e2ff5aSTomasz Zawadzki 140093e2ff5aSTomasz ZawadzkiUpdated DPDK submodule to DPDK 21.08. 140193e2ff5aSTomasz Zawadzki 1402a89d15e4SAndreas Economides### event 1403a89d15e4SAndreas Economides 1404a89d15e4SAndreas EconomidesAdded the `disable_signal_handlers` flag to the `spdk_app_opts` struct. 1405a89d15e4SAndreas Economides 140693e2ff5aSTomasz Zawadzki### idxd 140793e2ff5aSTomasz Zawadzki 140893e2ff5aSTomasz ZawadzkiAdded `spdk_idxd_get_socket` to query the socket that the idxd device 140993e2ff5aSTomasz Zawadzkiis on. 141093e2ff5aSTomasz Zawadzki 1411890f1ae3STomasz Zawadzki### json 1412890f1ae3STomasz Zawadzki 1413890f1ae3STomasz ZawadzkiAdded API to allow for writing and decoding of new types: 1414890f1ae3STomasz Zawadzki 1415890f1ae3STomasz Zawadzki- `spdk_json_write_named_uint16` 1416890f1ae3STomasz Zawadzki- `spdk_json_write_named_uint8` 1417890f1ae3STomasz Zawadzki- `spdk_json_write_uint16` 1418890f1ae3STomasz Zawadzki- `spdk_json_write_uint8` 1419890f1ae3STomasz Zawadzki- `spdk_json_number_to_uint8` 1420890f1ae3STomasz Zawadzki- `spdk_json_decode_uint8` 1421890f1ae3STomasz Zawadzki 142201936d2eSChangpeng Liu### log 142301936d2eSChangpeng Liu 142401936d2eSChangpeng LiuAdded API `spdk_log_to_syslog_level` to return syslog level based on SPDK's 142501936d2eSChangpeng Liulog level. 142601936d2eSChangpeng Liu 1427a422d8b0SAlexey Marchuk### nvme 1428a422d8b0SAlexey Marchuk 1429490c83c6SKrishna Kanth ReddyAdded new functions `spdk_nvme_zns_set_zone_desc_ext` and `spdk_nvme_zns_ext_report_zones` 1430490c83c6SKrishna Kanth Reddyto set zone descriptor extension and to get extended zone report respectively. 1431490c83c6SKrishna Kanth Reddy 14329381d8d3SAlexey MarchukNew API `spdk_nvme_ctrlr_get_memory_domains` has been added, it allows to get SPDK memory domains used by nvme controller. 1433a422d8b0SAlexey Marchuk 1434110335f1SAlexey MarchukNew API functions `spdk_nvme_ns_cmd_readv_ext` and `spdk_nvme_ns_cmd_writev_ext` 1435110335f1SAlexey Marchukhave been added. These functions accept `spdk_nvme_ns_cmd_ext_io_opts` structure with extended IO request 1436110335f1SAlexey Marchukoptions, e.g. DMA memory domain which describes data that may belong to another memory domain and 1437110335f1SAlexey Marchukcan't be accessed directly. 1438110335f1SAlexey Marchuk 1439fec55c84SKrishna Kanth ReddyAdded a new function `spdk_nvme_ctrlr_get_regs_bpinfo` to get boot partition info of a controller. 1440fec55c84SKrishna Kanth ReddyAdded new functions `spdk_nvme_ctrlr_write_boot_partition`, 1441fec55c84SKrishna Kanth Reddy`spdk_nvme_ctrlr_read_boot_partition_start` and `spdk_nvme_ctrlr_read_boot_partition_poll` 1442fec55c84SKrishna Kanth Reddyto write and read the boot partitions of a controller. 1443fec55c84SKrishna Kanth Reddy 14443875f287SBen WalkerAdded `spdk_nvme_ctrlr_get_opts` to retrieve the current controller options. 14453875f287SBen Walker 1446890f1ae3STomasz ZawadzkiAdded `async_mode` to `spdk_nvme_io_qpair_opts` to enable creation of submission and completion 1447890f1ae3STomasz Zawadzkiqueues asynchronously. This mode is currently supported at PCIe layer, 1448890f1ae3STomasz Zawadzkiwhich tracks the qpair creation with state machine and returns to the user immediately. 1449890f1ae3STomasz ZawadzkiDefault mode is set to false to create io qpairs synchronously. 1450890f1ae3STomasz Zawadzki 1451890f1ae3STomasz ZawadzkiAdded `spdk_nvme_ctrlr_get_regs_cc` to retrieve NVMe controller CC (Configuration) register. 1452890f1ae3STomasz Zawadzki 1453890f1ae3STomasz ZawadzkiAdded `spdk_nvme_ctrlr_prepare_for_reset` to inform the driver that the application is preparing 1454890f1ae3STomasz Zawadzkito reset the specified NVMe controller. This function allows the driver to make decisions 1455890f1ae3STomasz Zawadzkiknowing that a reset is about to happen. 1456890f1ae3STomasz Zawadzki 145793e2ff5aSTomasz Zawadzki### nvmf 14583c5cff61SKrzysztof Karas 145993e2ff5aSTomasz ZawadzkiAdded `oncs` to `struct spdk_nvmf_ctrlr_data` so that the transport layer 146093e2ff5aSTomasz Zawadzkican decide support RESERVATION feature or not. 146193e2ff5aSTomasz Zawadzki 146293e2ff5aSTomasz ZawadzkiAn `opts_size` element was added in the `spdk_nvmf_ns_opts` structure to solve the 146393e2ff5aSTomasz ZawadzkiABI compatibility issue between different SPDK version. An new option `anagrpid` was 146493e2ff5aSTomasz Zawadzkiadded in the `spdk_nvmf_ns_opts` structure. 146593e2ff5aSTomasz Zawadzki 146693e2ff5aSTomasz ZawadzkiAn new parameter `anagrpid` was added to the RPC `nvmf_subsystem_add_ns`. 146793e2ff5aSTomasz Zawadzki 146893e2ff5aSTomasz ZawadzkiAn new parameter `anagrpid` was added to the RPC `nvmf_subsystem_listener_set_ana_state`. 146993e2ff5aSTomasz Zawadzki 147093e2ff5aSTomasz Zawadzki`spdk_nvmf_subsystem_destroy` is now can be asynchronous, it accepts a callback and callback argument. 147193e2ff5aSTomasz Zawadzki 147293e2ff5aSTomasz ZawadzkiA new parameter, `poll_groups_mask` was added to the `nvmf_set_config` RPC that allows specifying 147393e2ff5aSTomasz Zawadzkia subset of cores for the nvmf poll groups. This helps to avoid imbalances when some cores are 147493e2ff5aSTomasz Zawadzkibusy with periodic timer tasks that run very frequently. 14753c5cff61SKrzysztof Karas 1476890f1ae3STomasz ZawadzkiA new parameter, `commit` was added to `nvmf_bdev_ctrlr_end_zcopy` that allows indicating whether 1477890f1ae3STomasz Zawadzkithe buffers should be committed. 1478890f1ae3STomasz Zawadzki 1479890f1ae3STomasz ZawadzkiAdded `listen_dump_opts` to `spdk_nvmf_transport_ops` so that the transport layer can display 1480890f1ae3STomasz Zawadzkilisten opts. 1481890f1ae3STomasz Zawadzki 1482890f1ae3STomasz ZawadzkiAdded `fabrics_connect_timeout_us` to `bdev_nvme_attach_controller` RPC to allow specifying 1483890f1ae3STomasz Zawadzkitimeout for connect operation. 1484890f1ae3STomasz Zawadzki 1485890f1ae3STomasz ZawadzkiAdded `multipath` to `bdev_nvme_attach_controller` RPC to allow specifying multipath behavior. 1486890f1ae3STomasz Zawadzki 1487890f1ae3STomasz Zawadzki### scheduler 1488890f1ae3STomasz Zawadzki 1489890f1ae3STomasz ZawadzkiNew API for implementing schedulers and governors. Please see `include/spdk/scheduler.h` for details. 1490890f1ae3STomasz Zawadzki 1491f61d81e4SShuhei Matsumoto### scsi 1492f61d81e4SShuhei Matsumoto 1493f61d81e4SShuhei MatsumotoNew functions, `spdk_scsi_dev_get_first_lun` and `spdk_scsi_dev_get_next_lun` 1494f61d81e4SShuhei Matsumotohave been added to iterate LUNs of a SCSI device. 1495f61d81e4SShuhei Matsumoto 14965e877275SShuhei MatsumotoEach SCSI device supports 256 LUNs at the maximum now and the macro constant 14975e877275SShuhei Matsumoto`SPDK_SCSI_DEV_MAX_LUN` was removed. 14985e877275SShuhei Matsumoto 1499890f1ae3STomasz Zawadzki### trace_parser 1500890f1ae3STomasz Zawadzki 1501890f1ae3STomasz ZawadzkiA new library, lib/trace_parser, has been added. This library provides functions that parse traces 1502890f1ae3STomasz Zawadzkirecorded by an SPDK application. That includes merging traces from multiple cores, 1503890f1ae3STomasz Zawadzkisorting them by their timestamp and constructing trace entries spanning across multiple buffers. 1504890f1ae3STomasz Zawadzki 150517199cdcSJohn Levon### util 150617199cdcSJohn Levon 150717199cdcSJohn LevonThe `spdk_fd_group_add` API now takes a `name` parameter. 150817199cdcSJohn Levon 15097239e113SMaciej Wawryk## v21.07 15105f106e26STomasz Zawadzki 1511be8f5a39Spaul luse### accel_fw 1512be8f5a39Spaul luse 1513be8f5a39Spaul luseAdded API `spdk_accel_submit_copy_crc32c` to perform a CRC32C while copying data. 1514be8f5a39Spaul luse 1515db71eb6aSpaul luseAdded API `spdk_accel_batch_prep_copy_crc32c` to batch CRC32C + copy commands. 1516db71eb6aSpaul luse 151771f0600cSpaul luseAdded API `spdk_accel_submit_copy_crc32cv` to submit chained CRC32C + copy commands. 151871f0600cSpaul luse 1519c1a41845Ssunshihao520### bdev 15200e3d4adaSShuhei Matsumoto 15218595ff7bSTomasz ZawadzkiChange `spdk_bdev_read_blocks_with_md` arg offset definition from int64_t to uint64_t. 1522c1a41845Ssunshihao520 15230e3d4adaSShuhei MatsumotoRed-black tree has been used to organize the bdev names and aliases uniformly 15240e3d4adaSShuhei Matsumototo provide faster lookup. 15250e3d4adaSShuhei Matsumoto 15268595ff7bSTomasz ZawadzkiRemoved ZCOPY emulation: The bdev module can be checked to see if it supports ZCOPY 15278595ff7bSTomasz Zawadzkiand if not supported then use existing READ/WRITE commands. 15288595ff7bSTomasz Zawadzki 15298595ff7bSTomasz ZawadzkiAdded iov to spdk_bdev_zcopy_start. 15308595ff7bSTomasz Zawadzki 1531706aa1ffSTomasz Zawadzki### dpdk 1532706aa1ffSTomasz Zawadzki 15339d4fbc13SKrzysztof KarasUpdated DPDK submodule to DPDK 21.05. 1534706aa1ffSTomasz Zawadzki 15354e0ca20aSZiye Yang### idxd 15364e0ca20aSZiye Yang 15378595ff7bSTomasz ZawadzkiRemove the `probe_cb` parameter in `spdk_idxd_probe` function. And remove the definition 15388595ff7bSTomasz Zawadzkiof `spdk_idxd_probe_cb` function pointer. It should be implemented in idxd_user.c. 15394e0ca20aSZiye Yang 15401076008eSpaul luseAdded API `spdk_idxd_submit_copy_crc32c` to perform a CRC32C while copying data. 15411076008eSpaul luse 1542cfd37e28Spaul luseAdded API `spdk_idxd_batch_prep_copy_crc32c` to prepare a batch operation to perform 1543cfd37e28Spaul lusea CRC32C while copying data. 1544cfd37e28Spaul luse 15452ed914f8SZiye YangWe have userspace idxd driver under accel_engine library (module/accel/idxd/accel_engine). 15462ed914f8SZiye YangAnd kernel idxd driver usage is also added under the accel_engine library. This approach 15472ed914f8SZiye Yangimplemented a wrapper library to use IDXD device by leveraging the kernel DSA driver in 15482ed914f8SZiye YangSPDK idxd library (lib/idxd). Then users can leverage the RPC later to configure how to 15492ed914f8SZiye Yanguse the DSA device by user space driver or kernel driver. 15502ed914f8SZiye Yang 1551e0e71665STomasz Zawadzki### init 1552e0e71665STomasz Zawadzki 1553e0e71665STomasz ZawadzkiAdded new `init` library that initializes the SPDK subsystems, which previously was 1554e0e71665STomasz Zawadzkiinternal to application framework. That functionality has been made public and for 1555e0e71665STomasz Zawadzkiuse by applications which don't leverage SPDK's application framework. 1556e0e71665STomasz Zawadzki 155711d76e8cSShuhei Matsumoto### iscsi 155811d76e8cSShuhei Matsumoto 155911d76e8cSShuhei MatsumotoNew parameters, `pdu_pool_size`, `immediate_data_pool_size`, and `data_out_pool_size`, 156011d76e8cSShuhei Matsumotowere added to the RPC `iscsi_set_options` to run iSCSI target with varying amount of 156111d76e8cSShuhei Matsumotoavailable memory. 156211d76e8cSShuhei Matsumoto 15638595ff7bSTomasz Zawadzki### json 1564b85127ccSZiye Yang 15658595ff7bSTomasz ZawadzkiAdded API `spdk_json_write_named_uint128` and `spdk_json_write_uint128` to perform 15668595ff7bSTomasz Zawadzkithe uint128 related data. 1567b832f99fSyupeng 1568e0e71665STomasz Zawadzki### net 1569e0e71665STomasz Zawadzki 1570e0e71665STomasz ZawadzkiRemoved deprecated `net` library. 1571e0e71665STomasz Zawadzki 15725818b42fSmatthewbAdded support for ZCOPY. ZCOPY is used in preference to READ and WRITE if the 15735818b42fSmatthewbbdev module supports ZCOPY and the bdev module has ZCOPY enabled. 15745818b42fSmatthewb 15757a12f481SKrishna Kanth Reddy### nvme 15767a12f481SKrishna Kanth Reddy 1577695425c7SChangpeng Liu`spdk_nvme_map_prps` and `spdk_nvme_map_cmd` were moved to nvmf/vfio-user as internal APIs 1578695425c7SChangpeng Liuas vfio-user is the only user for the above two APIs. 1579695425c7SChangpeng Liu 15807a12f481SKrishna Kanth ReddyAdded a new function `spdk_nvme_ns_cmd_copy` to submit a Simple Copy Command to a Namespace. 15817a12f481SKrishna Kanth Reddy 15828595ff7bSTomasz ZawadzkiUpdate the `spdk_nvme_generic_command_status_code` structure with new status code 15838595ff7bSTomasz Zawadzkiaccording to the definition in NVMe 1.4 spec. 1584252430a0SZiye Yang 15858595ff7bSTomasz Zawadzki`spdk_nvme_ctrlr_get_default_ctrlr_opts` now sets `use_cmb_sqs` to false. This means 158674c88aa6SJim Harristhat if a controller has a CMB and supports SQs in the CMB, SPDK will not use 15878595ff7bSTomasz Zawadzkithe CMB for SQs by default - the user must set `use_cmb_sqs` to true in 15888595ff7bSTomasz Zawadzkithe `spdk_nvme_ctrlr_opts` structure prior to controller attach. 1589815ce363SJim Harris 15904fe4040aSShuhei MatsumotoAdd a new function `spdk_nvme_detach_poll` to simplify a common use case to continue 15914fe4040aSShuhei Matsumotopolling until all detachments complete. 15924fe4040aSShuhei Matsumoto 15938595ff7bSTomasz ZawadzkiAdded new argument `timeout_admin_us` to `spdk_nvme_ctrlr_register_timeout_callback` so callers 15945288c4dfSMatt Dummcan specify a different timeout for admin commands vs. io commands. 15955288c4dfSMatt Dumm 15963959e397SShuhei MatsumotoAn existing function `spdk_nvme_detach_async` was updated to add one or more detachments 15973959e397SShuhei Matsumototo an active context while it is being polled. 15983959e397SShuhei Matsumoto 1599efbd101bSShuhei MatsumotoRename a variable in the member `cmic` of the struct `spdk_nvme_ctrlr_data` from 1600efbd101bSShuhei Matsumoto`multi_host` to `multi_ctrlr`. The variable means that the NVM subsystem may have two or 1601efbd101bSShuhei Matsumotomore controllers if set to 1. However `multi_host` had indicated a particular use case 1602efbd101bSShuhei Matsumotosuch that the NVM subsystem is used by multiple hosts. 1603efbd101bSShuhei Matsumoto 1604e0715c2aSShuhei MatsumotoA new option `disable_read_ana_log_page` was added to struct `spdk_nvme_ctrlr_opts` to disable 1605e0715c2aSShuhei Matsumotoreading ANA log page. The upper layer is expected to read ANA log page instead if `true`. 1606e0715c2aSShuhei MatsumotoThe default value is `false`. 1607e0715c2aSShuhei Matsumoto 1608ac24039dSJonathan TehNew APIs, `spdk_nvme_ctrlr_reset_async` and `spdk_nvme_ctrlr_reset_poll_async`, have been added to 1609ac24039dSJonathan Tehreset a controller asynchronously. 1610ac24039dSJonathan Teh 1611153f03cfSJonathan TehNew RPC `bdev_nvme_reset_controller` was added, to reset an NVMe controller. 1612153f03cfSJonathan Teh 1613e0e71665STomasz ZawadzkiAdded `spdk_nvme_ns_get_nguid` function to get NGUID for the given namespace. 1614e0e71665STomasz Zawadzki 1615e0e71665STomasz ZawadzkiAdded `spdk_nvme_ctrlr_is_fabrics` function to indicate whether a ctrlr handle 1616e0e71665STomasz Zawadzkiis associated with a fabrics controller. 1617e0e71665STomasz Zawadzki 16188595ff7bSTomasz Zawadzki### nvmf 16198595ff7bSTomasz Zawadzki 16208595ff7bSTomasz ZawadzkiAdded `min_cntlid` and `max_cntlid` to `nvmf_create_subsystem` to limit the controller ID range. 1621e0e71665STomasz ZawadzkiAdded `spdk_nvmf_subsystem_get_min_cntlid` and `spdk_nvmf_subsystem_get_max_cntlid` to request those values. 16228595ff7bSTomasz Zawadzki 16238595ff7bSTomasz Zawadzki`spdk_nvmf_request_get_buffers_multi` API is removed. 16248595ff7bSTomasz Zawadzki 16258595ff7bSTomasz ZawadzkiAdded the `nvmf_set_crdt` RPC for setting command retry delay times. 16268595ff7bSTomasz Zawadzki 1627e0e71665STomasz ZawadzkiExpanded `spdk_nvmf_poll_group_stat` with current qpair count statistics. 1628e0e71665STomasz Zawadzki 1629c97eb5ecSTomasz ZawadzkiRemoved following deprecated APIs: 16307c2524b8SMaciej Wawryk 1631c97eb5ecSTomasz Zawadzki- `spdk_nvmf_poll_group_get_stat` (function in `nvmf.h`), 1632c97eb5ecSTomasz Zawadzki- `spdk_nvmf_transport_poll_group_get_stat` (function in `nvmf.h`), 1633c97eb5ecSTomasz Zawadzki- `spdk_nvmf_transport_poll_group_free_stat`(function in `nvmf.h`), 1634c97eb5ecSTomasz Zawadzki- `spdk_nvmf_rdma_device_stat` (struct in `nvmf.h`), 1635c97eb5ecSTomasz Zawadzki- `spdk_nvmf_transport_poll_group_stat` (struct in `nvmf.h`), 1636c97eb5ecSTomasz Zawadzki- `poll_group_get_stat` (transport op in `nvmf_transport.h`), 1637c97eb5ecSTomasz Zawadzki- `poll_group_free_stat` (transport op in `nvmf_transport.h`). 1638c97eb5ecSTomasz Zawadzki 1639e18eaee2SZiye Yang### rpc 1640e18eaee2SZiye Yang 1641e18eaee2SZiye YangNew RPC `bdev_rbd_register_cluster` and `bdev_rbd_unregister_cluster` was added, it allows to create 1642e18eaee2SZiye Yangand delete the rados object cluster, then users can choose the cluster to create related rbd 1643e18eaee2SZiye Yangdevice. 1644e18eaee2SZiye Yang 16458595ff7bSTomasz ZawadzkiRevised `bdev_rbd_create` parameter, it allows to use an optional parameter `--cluster-name` 16465c016026SZiye Yangto create a rbd bdev with an already registered Rados Cluster Object. 16475c016026SZiye Yang 1648c3cf9ec2SZiye YangNew RPC `bdev_rbd_get_clusters_info` was added, it allows to get the info of the registered 1649c3cf9ec2SZiye YangRados Cluster names. 1650c3cf9ec2SZiye Yang 16518595ff7bSTomasz ZawadzkiNew optional parameter, `timeout_admin_us`, added to the bdev_nvme_set_options RPC. 165267fbfdd8SMatt Dumm 1653928db416Syidong0635Revised a parameter `--stripe-size_kb` to `--stripe-size-kb` of `bdev_raid_create` method 1654928db416Syidong0635provided in `scripts/rpc.py` for consistency. 1655928db416Syidong0635 1656e5d5b3ebSZiye YangAn new optional parameter `config_kernel_mode` was added to the RPC `idxd_scan_accel_engine`, 1657e5d5b3ebSZiye Yangand this is used to enable using the kernel mode IDXD driver. 1658e5d5b3ebSZiye Yang 165929b3da96STomasz ZawadzkiRemoved deprecated parameter `enable-zerocopy-send` of RPC `sock_impl_set_options`, 166029b3da96STomasz Zawadzkiuse `enable-zerocopy-send-server` or `enable-zerocopy-send-client` instead. 166129b3da96STomasz ZawadzkiRemoved deprecated parameter `disable-zerocopy-send` of RPC `sock_impl_set_options`, 166229b3da96STomasz Zawadzkiuse `disable-zerocopy-send-server` or `disable-zerocopy-send-client` instead. 166329b3da96STomasz Zawadzki 16640ac1bd07STomasz Zawadzki### rpm 16650ac1bd07STomasz Zawadzki 16660ac1bd07STomasz ZawadzkiRemoved deprecated `pkg/spdk.spec`, please use `rpmbuild/spdk.spec` instead. 16670ac1bd07STomasz ZawadzkiSee [RPM documentation](https://spdk.io/doc/rpm.html) for more details. 16680ac1bd07STomasz Zawadzki 16690e3d4adaSShuhei Matsumoto### thread 16700e3d4adaSShuhei Matsumoto 16710e3d4adaSShuhei MatsumotoRed-black tree has been used for timed pollers to provide faster insertion and deletion 16720e3d4adaSShuhei Matsumotoand for io_devices to provide faster lookup. 16730e3d4adaSShuhei Matsumoto 1674e0e71665STomasz ZawadzkiRemoved `spdk_io_channel` structure from public header and moved it to thread_internal.h. 1675e0e71665STomasz Zawadzki 1676e0e71665STomasz Zawadzki### trace 1677e0e71665STomasz Zawadzki 1678e0e71665STomasz ZawadzkiAdded `spdk_trace_register_description_ext` function to register variable number of tracepoint arguments. 1679e0e71665STomasz Zawadzki 1680e0e71665STomasz ZawadzkiAdded ability to chain multiple trace entries together to extend the size of the argument buffer. 1681e0e71665STomasz Zawadzki 16820e3d4adaSShuhei Matsumoto### util 16830e3d4adaSShuhei Matsumoto 16840e3d4adaSShuhei MatsumotoRed-black tree macros has been added by using the macros provided by the FreeBSD operating system 16850e3d4adaSShuhei Matsumotounder the same BSD license. 16860e3d4adaSShuhei Matsumoto 1687320ab72fSShuhei MatsumotoAdd an new macro `SPDK_SIZEOF_MEMBER` to get the size of a member of a struct. 1688320ab72fSShuhei Matsumoto 16898595ff7bSTomasz Zawadzki`spdk_crc32c_iov_update` function was added to support calculating the crc32c of the iovs. 16908595ff7bSTomasz Zawadzki 1691e0e71665STomasz ZawadzkiAdded zipf random number generator with power law probability distribution. 1692e0e71665STomasz ZawadzkiWhen applied to performance testing of block devices, it will select blocks over 1693e0e71665STomasz Zawadzkithe full range of LBAs, but will more frequently select lower-numbered LBAs. 1694e0e71665STomasz Zawadzki 16957239e113SMaciej Wawryk## v21.04 169619dddb3eSTomasz Zawadzki 169702614b0dSKrzysztof Karas### accel 16986153b4aaSZiye Yang 169902614b0dSKrzysztof KarasTwo new accelerated crc32 functions `spdk_accel_submit_crc32cv` and 170002614b0dSKrzysztof Karas`spdk_accel_batch_prep_crc32cv` are added in order to provide the 170102614b0dSKrzysztof Karaschained accelerated CRC32 computation support. 170230d83eb6Spaul luse 170320f1cf63SShuhei Matsumoto### bdev 170420f1cf63SShuhei Matsumoto 170520f1cf63SShuhei MatsumotoFor `bdev_ocssd_create` RPC, the optional parameter `range` was removed. 170620f1cf63SShuhei MatsumotoOnly one OCSSD bdev can be created for one OCSSD namespace. 170720f1cf63SShuhei Matsumoto 1708a6b1e2c5STomasz ZawadzkiRemoved the `spdk_bdev_open` from bdev library API. 170913f86897STomasz ZawadzkiRemoved the `spdk_vbdev_register` and `spdk_bdev_part_base_construct` from bdev module API. 171013f86897STomasz ZawadzkiRemoved the `config_text` function for bdev modules to report legacy config. 1711a6b1e2c5STomasz Zawadzki 1712ea315755STomasz ZawadzkiAdded `spdk_bdev_get_max_active_zones` API to display maximum number active zones of a given bdev. 1713ea315755STomasz Zawadzki 1714ea315755STomasz ZawadzkiAdded `spdk_bdev_get_max_zone_append_size` API to display maximum zone append data transfer size. 1715ea315755STomasz Zawadzki 1716ea315755STomasz Zawadzki### bdev_nvme 1717ea315755STomasz Zawadzki 1718ea315755STomasz ZawadzkiAdded support for zoned namespaces. 1719ea315755STomasz Zawadzki 17203e15b356STomasz Zawadzki### blobstore 17213e15b356STomasz Zawadzki 17223e15b356STomasz ZawadzkiRemoved the `spdk_bdev_create_bs_dev_from_desc` and `spdk_bdev_create_bs_dev` API. 17233e15b356STomasz Zawadzki 1724207e0583SJim Harris### env 1725207e0583SJim Harris 172602614b0dSKrzysztof KarasAdded `spdk_pci_device_allow` API to allow applications to add PCI addresses to 1727207e0583SJim Harristhe allowed list after the application has started. 1728207e0583SJim Harris 17294fb0b896STomasz ZawadzkiRemoved the `pci_whitelist`, `pci_blacklist` and `master_core` members of struct `spdk_env_opts`. 17304fb0b896STomasz Zawadzki 1731ea315755STomasz ZawadzkiAdded hotplug support based on uevent in `pci_event.c`. Added usage of this functionality in 1732ea315755STomasz Zawadzkinvme, virtio-scsi and virtio_blk libraries. Please see the new API `spdk_pci_event_listen`, 1733ea315755STomasz Zawadzki`spdk_pci_get_event`, `spdk_pci_register_error_handler` and `spdk_pci_unregister_error_handler`. 1734ea315755STomasz Zawadzki 1735a38d241cSTomasz Zawadzki### event 1736a38d241cSTomasz Zawadzki 1737a38d241cSTomasz ZawadzkiRemoved the `config_file`, `max_delay_us`, `pci_whitelist` 1738a38d241cSTomasz Zawadzkiand `pci_blacklist` members of struct `spdk_app_opts`. 1739a38d241cSTomasz Zawadzki 17408a1a8450Spaul luse### idxd 17418a1a8450Spaul luse 1742ea315755STomasz ZawadzkiA new API `spdk_idxd_device_needs_rebalance` was added so that users of the library 17438a1a8450Spaul lusecan know whether they need to rebalance the flow control for the channel 17448a1a8450Spaul lusethat was just added/removed. This is based on how the low level library 17458a1a8450Spaul luseshares devices amongst channels. 17468a1a8450Spaul luse 17478a1a8450Spaul luseThe API `spdk_idxd_reconfigure_chan` had the `num_channels` removed as this 17488a1a8450Spaul luseis now tracked in the library. The app makes use the new API above to 17498a1a8450Spaul lusedetermine whether to rebalance or not. This applies to `spdk_idxd_configure_chan` 17508a1a8450Spaul luseas well. 17518a1a8450Spaul luse 17528a1a8450Spaul luseThe API `spdk_idxd_put_channel` now returns the rebalance state for the 17538a1a8450Spaul luseunderlying device. 17548a1a8450Spaul luse 175502614b0dSKrzysztof Karas### iscsi 175602614b0dSKrzysztof Karas 175702614b0dSKrzysztof KarasA security vulnerability has been identified and fixed in the SPDK iSCSI target. 175802614b0dSKrzysztof KarasA TEXT PDU with no data, but CONTINUE flag set, would result in a NULL pointer dereference 175902614b0dSKrzysztof Karasand crash the SPDK iSCSI target process. All users of the SPDK iSCSI target 176002614b0dSKrzysztof Karasare recommended to update. All SPDK versions <= v21.01 are affected. 176102614b0dSKrzysztof Karas 176202614b0dSKrzysztof Karas### net 176302614b0dSKrzysztof Karas 176402614b0dSKrzysztof KarasThe net library is deprecated and will be removed in the 21.07 release. 176502614b0dSKrzysztof Karas 176602614b0dSKrzysztof Karas### nvme 176702614b0dSKrzysztof Karas 176802614b0dSKrzysztof KarasAdded a new function `spdk_nvme_ctrlr_get_regs_pmrcap` to get the PMR capabilities. 176902614b0dSKrzysztof Karas 177002614b0dSKrzysztof KarasAdded an accelerated table pointer in `spdk_nvme_poll_group` 177102614b0dSKrzysztof Karaswhich can be used to provide the accelerated functions by users with 177202614b0dSKrzysztof Karashardware engine, such as crc32c accelerated function. 177302614b0dSKrzysztof Karas 177402614b0dSKrzysztof KarasAdded new functions `spdk_nvme_ctrlr_get_pmrsz`, `spdk_nvme_ctrlr_enable_pmr`, 177502614b0dSKrzysztof Karas`spdk_nvme_ctrlr_disable_pmr`, `spdk_nvme_ctrlr_map_pmr` and `spdk_nvme_ctrlr_unmap_pmr`. 177602614b0dSKrzysztof Karas 177702614b0dSKrzysztof KarasAdded NVMe transport operations to enable, disable, map and unmap the PMR. 177802614b0dSKrzysztof Karas 177902614b0dSKrzysztof KarasAdded `spdk_nvme_qpair_get_optimal_poll_group` function and `qpair_get_optimal_poll_group` 178002614b0dSKrzysztof Karasfunction pointer in spdk_nvmf_transport_ops structure in order to add the qpair to the most 178102614b0dSKrzysztof Karassuitable polling group. 178202614b0dSKrzysztof Karas 178302614b0dSKrzysztof KarasAdded OPTPERF and namespace optimal performance fields to nvme_spec.h. 178402614b0dSKrzysztof Karas 178502614b0dSKrzysztof KarasAdded `spdk_nvme_set_hotplug_filter` API to allow applications to choose which 178602614b0dSKrzysztof Karashot-inserted SSDs should be probed. This is useful for use cases where multiple 178702614b0dSKrzysztof Karasindependent SPDK processes are running on one node. The filter function can 178802614b0dSKrzysztof Karasthen be implemented in these processes to decide which SSDs to probe based on 178902614b0dSKrzysztof Karasthe new SSD's PCI address. 179002614b0dSKrzysztof Karas 179102614b0dSKrzysztof KarasNew functions `spdk_nvme_poll_group_get_stats` and `spdk_nvme_poll_group_free_stats` 179202614b0dSKrzysztof Karaswere added. These functions allow to get transport statistics per NVME poll group. 179302614b0dSKrzysztof Karas 179402614b0dSKrzysztof KarasAdded `spdk_nvme_map_cmd` API to map the NVMe command with SGL cases. 179502614b0dSKrzysztof Karas 1796ea315755STomasz ZawadzkiAdded support for vector variant of ZNS zone append commands with new API 1797ea315755STomasz Zawadzki`spdk_nvme_zns_zone_appendv` and `spdk_nvme_zns_zone_appendv_with_md`. 1798ea315755STomasz Zawadzki 1799ea315755STomasz ZawadzkiAdded `spdk_nvme_zns_ns_get_max_open_zones` and `spdk_nvme_zns_ns_get_max_active_zones` API, 1800ea315755STomasz Zawadzkito display maximum number of open and active zones of the given namespace. 1801ea315755STomasz Zawadzki 1802ea315755STomasz ZawadzkiAdded `spdk_nvme_zns_ns_get_zone_size_sectors` API to provide size of zone in number of 1803ea315755STomasz Zawadzkisectors. 1804ea315755STomasz Zawadzki 1805ea315755STomasz ZawadzkiAdded `spdk_nvme_qpair_get_id` API to display the ID of the specified qpair. 1806ea315755STomasz Zawadzki 180702614b0dSKrzysztof Karas### nvmf 180802614b0dSKrzysztof Karas 180902614b0dSKrzysztof KarasRemoved the `spdk_nvmf_tgt_listen` and `spdk_nvmf_subsystem_add_ns` API. 181002614b0dSKrzysztof Karas 181102614b0dSKrzysztof KarasAdded new APIs: 181202614b0dSKrzysztof Karas 181302614b0dSKrzysztof Karas- `spdk_nvmf_poll_group_dump_stat` (function in `nvmf.h`). 181402614b0dSKrzysztof Karas- `poll_group_dump_stat` (transport op in `nvmf_transport.h`). 181502614b0dSKrzysztof Karas 18169a387721STomasz ZawadzkiThe following APIs have been deprecated and will be removed in SPDK 21.07: 181702614b0dSKrzysztof Karas 181802614b0dSKrzysztof Karas- `spdk_nvmf_poll_group_get_stat` (function in `nvmf.h`), 181902614b0dSKrzysztof Karas- `spdk_nvmf_transport_poll_group_get_stat` (function in `nvmf.h`), 182002614b0dSKrzysztof Karas- `spdk_nvmf_transport_poll_group_free_stat`(function in `nvmf.h`), 182102614b0dSKrzysztof Karas- `spdk_nvmf_rdma_device_stat` (struct in `nvmf.h`), 182202614b0dSKrzysztof Karas- `spdk_nvmf_transport_poll_group_stat` (struct in `nvmf.h`), 182302614b0dSKrzysztof Karas- `poll_group_get_stat` (transport op in `nvmf_transport.h`), 182402614b0dSKrzysztof Karas- `poll_group_free_stat` (transport op in `nvmf_transport.h`). 182502614b0dSKrzysztof Karas 182602614b0dSKrzysztof KarasSee header files for details. 182702614b0dSKrzysztof Karas 182802614b0dSKrzysztof KarasThe `trtype` field in JSON returned by `nvmf_get_stats` RPC contains now the name of the transport, 182902614b0dSKrzysztof Karaswhich is the same as the type for defined transports and more informative for a custom transport. 183002614b0dSKrzysztof Karas 1831ea315755STomasz ZawadzkiAdded `hdgst` and `ddgst` parameters to `bdev_nvme_attach_controller` RPC in order change 1832ea315755STomasz Zawadzkistate of TCP header and data digest. 1833ea315755STomasz Zawadzki 1834ea315755STomasz ZawadzkiAdded `num_cqe` parameter to `nvmf_create_transport` RPC to set number of completion queues (CQ) 1835ea315755STomasz Zawadzkifor RDMA transport. Useful when CQ resize operation is not supported, for example iWARP. 1836ea315755STomasz Zawadzki 183702614b0dSKrzysztof Karas### ocf 183802614b0dSKrzysztof Karas 183902614b0dSKrzysztof KarasUpdated OCF submodule to v20.12.2 184002614b0dSKrzysztof Karas 1841ea315755STomasz ZawadzkiAdded `bdev_ocf_set_cache_mode` RPC to dynamically switch cache mode of OCF bdev. 1842ea315755STomasz Zawadzki 1843268078c1SAmir HaroushOCF deprecation notice has removed as Huawei is picking up support for the OCF project. 1844268078c1SAmir Haroush 184502614b0dSKrzysztof Karas### opal 184602614b0dSKrzysztof Karas 184702614b0dSKrzysztof KarasRemoved the `spdk_opal_supported` API. 184802614b0dSKrzysztof Karas 184902614b0dSKrzysztof Karas### raid 185002614b0dSKrzysztof Karas 185102614b0dSKrzysztof KarasFor `bdev_raid_create` RPC, the deprecated parameter `strip_size` was removed. 185202614b0dSKrzysztof Karas 185302614b0dSKrzysztof Karas### rpc 185402614b0dSKrzysztof Karas 185502614b0dSKrzysztof KarasNew RPC `bdev_nvme_get_transport_statistics` was added, it allows to get transport statistics 185602614b0dSKrzysztof Karasof nvme poll groups. 185702614b0dSKrzysztof Karas 18582fd97e28SAlexey MarchukParameter `enable-zerocopy-send` of RPC `sock_impl_set_options` is deprecated and will be removed in SPDK 21.07, 18592fd97e28SAlexey Marchukuse `enable-zerocopy-send-server` or `enable-zerocopy-send-client` instead. 18602fd97e28SAlexey MarchukParameter `disable-zerocopy-send` of RPC `sock_impl_set_options` is deprecated and will be removed in SPDK 21.07, 18612fd97e28SAlexey Marchukuse `disable-zerocopy-send-server` or `disable-zerocopy-send-client` instead. 18622fd97e28SAlexey Marchuk 186364debe04SjiaqizhoAdded cmd_parser.py used to parse the args from argparse. There are 186464debe04Sjiaqizhotwo benefit to use command parser: 18657c2524b8SMaciej Wawryk 186664debe04Sjiaqizho- Simplify the definition of rpc method. It will reduce the rpc method code. 186764debe04Sjiaqizho- Make the rpc call more versatile. User can add private args into rpc method. 186864debe04Sjiaqizho 186902614b0dSKrzysztof Karas### rpm 187002614b0dSKrzysztof Karas 187102614b0dSKrzysztof KarasAdded support for new RPM spec, rpmbuild/spdk.spec, which can be used for packaging the 18729a387721STomasz ZawadzkiSPDK. The pkg/spdk.spec is considered to be deprecated and scheduled for removal in SPDK 21.07. 18739a387721STomasz ZawadzkiSee [RPM documentation](https://spdk.io/doc/rpm.html) for more details. 187402614b0dSKrzysztof Karas 187502614b0dSKrzysztof Karas### sock 187602614b0dSKrzysztof Karas 187702614b0dSKrzysztof KarasThe type of `enable_placement_id` in struct `spdk_sock_impl_opts` is changed from 187802614b0dSKrzysztof Karasbool to int. We can use RPC to configure different value of `enable_placement_id`. 187902614b0dSKrzysztof KarasThen we can leverage SO_INCOMING_CPU to get placement_id, which aims to utilize 188002614b0dSKrzysztof KarasCPU cache locality, enabled by setting enable_placement_id=2. 188102614b0dSKrzysztof Karas 18822cbc9d4dSSudheer MogilappagariA new socket placement mode called PLACEMENT_MARK has been added. Some NICs allow 18832cbc9d4dSSudheer Mogilappagarisockets to be marked using the SO_MARK socket option as a hint for which hardware 18842cbc9d4dSSudheer Mogilappagariqueue they should be associated with. This mode leverages that by setting the same 18852cbc9d4dSSudheer Mogilappagarivalue for all sockets within a poll group. 18862cbc9d4dSSudheer Mogilappagari 18878e85b675SAlexey MarchukNew parameters `enable_zerocopy_send_server` and `enable_zerocopy_send_client` were added 18888e85b675SAlexey Marchukto struct spdk_sock_impl_opts, these parameters enable or disable zero copy send for server 18898e85b675SAlexey Marchukand client sockets which are created using `spdk_sock_listen` and `spdk_sock_listen_ext` (server); 18908e85b675SAlexey Marchuk`spdk_sock_connect` and `spdk_sock_connect_ext` (client) functions. Existing parameter 18918e85b675SAlexey Marchuk`enable_zerocopy_send` enables or disables zero copy send for both server and client sockets. 18928e85b675SAlexey Marchuk 189302614b0dSKrzysztof Karas### thread 189402614b0dSKrzysztof Karas 189502614b0dSKrzysztof KarasA new API `spdk_io_channel_get_io_device` was added to get the io_device for the specified 189602614b0dSKrzysztof KarasI/O channel. 189702614b0dSKrzysztof Karas 189802614b0dSKrzysztof KarasAdded `spdk_thread_set_interrupt_mode` function in order to set present spdk_thread into 189902614b0dSKrzysztof Karasinterrupt mode or back to poll mode. It is valid only when thread interrupt facility is 190002614b0dSKrzysztof Karasenabled by `spdk_interrupt_mode_enable`. 190102614b0dSKrzysztof Karas 190202614b0dSKrzysztof KarasAdded `spdk_poller_register_interrupt` function to mark that the poller is capable of 190302614b0dSKrzysztof Karasentering interrupt mode. Callback function will be called when the poller must transition 190402614b0dSKrzysztof Karasinto or out of interrupt mode. 190502614b0dSKrzysztof Karas 190602614b0dSKrzysztof Karas### virtio 190702614b0dSKrzysztof Karas 190802614b0dSKrzysztof KarasAdded the `bdev_virtio_blk_set_hotplug` RPC for the virtio blk pci device. 190902614b0dSKrzysztof Karas 19107239e113SMaciej Wawryk## v21.01 191102614b0dSKrzysztof Karas 1912d3d077ccSZiye Yang### bdev 1913d3d077ccSZiye Yang 1914d3d077ccSZiye YangAn `opts_size` element was added in the `spdk_bdev_opts` structure to solve the 1915f1f51f2bSTomasz ZawadzkiABI compatibility issue between different SPDK version. And also add `opts_size` 1916f420b9efSZiye Yangparameter in spdk_bdev_get_opts function. Two fields `small_buf_pool_size` and 1917f420b9efSZiye Yang`large_buf_pool_size` were added into spdk_bdev_opts, which were used to determine 1918f420b9efSZiye Yangthe small and large buffer pool size of the whole bdev module. 19193de9887dSZiye Yang 192077b6f4bcSTomasz ZawadzkiA new API `spdk_bdev_wait_for_examine` was added to allow for checking state of 1921e57bb1afSTomasz Zawadzkiexamine process. Along with corresponding `bdev_wait_for_examine` RPC, which 1922e57bb1afSTomasz Zawadzkiis now always called during `spdk_bdev_subsystem_config_json` making sure 1923e57bb1afSTomasz Zawadzkievery bdev is ready to be used. 192477b6f4bcSTomasz Zawadzki 1925021ff6edSLiu XiaodongA new API `spdk_bdev_io_get_aio_status` was added for getting the status of 1926021ff6edSLiu Xiaodongbdev_io as Linux AIO errno. Also `spdk_bdev_io_complete_aio_status` function 1927021ff6edSLiu Xiaodongand `SPDK_BDEV_IO_STATUS_AIO_ERROR` were added for bdev module to complete 1928021ff6edSLiu Xiaodonga bdev_io with Linux AIO errno. 1929021ff6edSLiu Xiaodong 193043c20701STomasz ZawadzkiA new API `spdk_bdev_get_module_name` was added for getting block device module name. 193143c20701STomasz ZawadzkiAlso `spdk_bdev_get_module_ctx` was added to obtain a bdev module context for 193243c20701STomasz Zawadzkithe block device opened by the specified descriptor. 193343c20701STomasz Zawadzki 193443c20701STomasz ZawadzkiAdded `max_segment_size` and `max_num_segments` to `spdk_bdev` structure for 193543c20701STomasz Zawadzkibdev modules to specify splitting requirements. 193643c20701STomasz Zawadzki 19373de9887dSZiye Yang### blob 19383de9887dSZiye Yang 19393de9887dSZiye YangAn `opts_size` element was added in the `spdk_bs_opts` structure to solve the 1940f1f51f2bSTomasz ZawadzkiABI compatibility issue between different SPDK version. And also add `opts_size` 19413de9887dSZiye Yangparameter in `spdk_bs_opts_init` function. 1942d3d077ccSZiye Yang 1943b47f0f20SZiye YangAn `opts_size` element was added in the `spdk_blob_opts` structure to solve the 1944f1f51f2bSTomasz ZawadzkiABI compatibility issue between different SPDK version. And also add `opts_size` 1945b47f0f20SZiye Yangparameter in `spdk_blob_opts_init` function. 1946b47f0f20SZiye Yang 19479472eecbSZiye YangAn `opts_size` element was added in the `spdk_blob_open_opts` structure to solve the 1948f1f51f2bSTomasz ZawadzkiABI compatibility issue between different SPDK version. And also add `opts_size` 19499472eecbSZiye Yangparameter in `spdk_blob_open_opts_init` function. 19509472eecbSZiye Yang 1951bc76a832STomasz Zawadzki### build 1952bc76a832STomasz Zawadzki 1953bc76a832STomasz ZawadzkiSPDK now generates pkg-config files to simplify the process of determining which 1954bc76a832STomasz Zawadzkilibraries must be linked into an SPDK application. 1955bc76a832STomasz Zawadzki 19568f40b231STomasz Zawadzki### dpdk 19578f40b231STomasz Zawadzki 19588f40b231STomasz ZawadzkiUpdated DPDK submodule to DPDK 20.11. 19598f40b231STomasz Zawadzki 1960aa22321aSTomasz ZawadzkiRemoved `--with-igb-uio-driver` configure option. Since DPDK 20.11 igb_uio driver 1961aa22321aSTomasz Zawadzkiwas moved to separate dpdk-kmods repository. If required, users need to refer to 1962aa22321aSTomasz Zawadzkidpdk-kmods repository to build the driver. 1963aa22321aSTomasz Zawadzki 1964bc76a832STomasz Zawadzki### env 1965bc76a832STomasz Zawadzki 1966f1f51f2bSTomasz ZawadzkiThe `pci_whitelist`, `pci_blacklist` and `master_core` members of struct `spdk_env_opts` 1967f1f51f2bSTomasz Zawadzkihave been deprecated. The new members are named `pci_allowed`, `pci_blocked` and 1968f1f51f2bSTomasz Zawadzki`main_core` respectively. 1969bc76a832STomasz Zawadzki 1970bc76a832STomasz ZawadzkiAn `opts_size` element was added in the `spdk_app_opts` structure 1971f1f51f2bSTomasz Zawadzkito solve the ABI compatibility issue between different SPDK version. An `opts_size` 1972bc76a832STomasz Zawadzkiparameter is added into `spdk_app_opts_init` function. 1973bc76a832STomasz Zawadzki 1974bc76a832STomasz Zawadzki### event 1975bc76a832STomasz Zawadzki 1976f1f51f2bSTomasz ZawadzkiThe `pci_whitelist` and `pci_blacklist` members of struct `spdk_app_opts` have been 1977f1f51f2bSTomasz Zawadzkideprecated. The new members are named `pci_allowed` and `pci_blocked` respectively. 1978bc76a832STomasz Zawadzki 1979f1f51f2bSTomasz ZawadzkiThe `--pci-blacklist` command line option has been deprecated, replaced with 1980f1f51f2bSTomasz Zawadzki`--pci-blocked`. 1981bc76a832STomasz Zawadzki 1982f1f51f2bSTomasz ZawadzkiThe `--pci-whitelist/-W` command line options have been deprecated, replaced with 1983f1f51f2bSTomasz Zawadzki`--pci-allowed/-A`. 1984bc76a832STomasz Zawadzki 1985c15af452STomasz ZawadzkiAdded new experimental `dynamic` scheduler that rebalances idle threads, adjusts CPU frequency 1986c15af452STomasz Zawadzkiusing dpdk_governor and turns idle reactor cores to interrupt mode. Please see 1987c15af452STomasz Zawadzki[scheduler documentation](https://www.spdk.io/doc/scheduler.html) for details. 1988c15af452STomasz Zawadzki 1989bc76a832STomasz Zawadzki## ioat 1990bc76a832STomasz Zawadzki 1991f1f51f2bSTomasz ZawadzkiThe PCI BDF whitelist option has been removed from the `ioat_scan_accel_engine` RPC. 1992f1f51f2bSTomasz ZawadzkiIOAT PCI functions can still be allowed or denied using SPDK application command 1993bc76a832STomasz Zawadzkiline options. 1994bc76a832STomasz Zawadzki 1995bc76a832STomasz Zawadzki### isa-l 1996bc76a832STomasz Zawadzki 1997bc76a832STomasz ZawadzkiUpdated ISA-L submodule to v2.30.0. 1998bc76a832STomasz Zawadzki 1999bc76a832STomasz Zawadzki### json 2000bc76a832STomasz Zawadzki 2001bc76a832STomasz ZawadzkiA new API `spdk_jsonrpc_send_bool_response` was added to allow sending response for 2002bc76a832STomasz Zawadzkiwriting json bool results into one function. 2003f1f51f2bSTomasz ZawadzkiUpdate API `bdev_nvme_set_options` and add a `keep_alive_timeout_ms` parameter. Now you 2004f1f51f2bSTomasz Zawadzkican specify the `keep_alive_timeout` before creating NVMe bdev. 2005bc76a832STomasz Zawadzki 2006bc76a832STomasz Zawadzki### nbd 2007bc76a832STomasz Zawadzki 2008bc76a832STomasz ZawadzkiChange the return type of function `spdk_nbd_stop` from void to int. And update the 2009bc76a832STomasz Zawadzki`spdk_nbd_fini` with two parameters to make its behavior from sync to async. 2010bc76a832STomasz Zawadzki 201102d3d439SMichael Haeuptle### nvme 201202d3d439SMichael Haeuptle 2013e69af13dSsunshihao520Directives support was added to the NVMe driver. 2014e69af13dSsunshihao520 2015f1f51f2bSTomasz ZawadzkiTwo async APIs `spdk_nvme_ctrlr_cmd_directive_receive` and `spdk_nvme_ctrlr_cmd_directive_send` 20165fba455dSsunshihao520are added for Directive Send and Directive Receive command, respectively. 20175fba455dSsunshihao520 201802d3d439SMichael HaeuptleAdded a new function `spdk_nvme_ctrlr_reset_subsystem` to perform a NVMe 2019f1f51f2bSTomasz Zawadzkisubsystem reset. Note: The NVMe-oF target does not support the subsystem reset yet. 20206308a24fSChangpeng Liu 2021f1f51f2bSTomasz ZawadzkiAdd a new function `spdk_nvme_bytes_to_numd` to transfer bytes to number of 20221572882aSsunshihao520dwords. 20236308a24fSChangpeng Liu 20246308a24fSChangpeng LiuAdded a new custom transport `SPDK_NVME_TRANSPORT_VFIOUSER` to enable NVMe 20256308a24fSChangpeng Liudriver running with NVMe over vfio-user target. 20266308a24fSChangpeng Liu 20273ff9c136SChangpengAdded the vfio-user custom transport implementation in NVMe driver which can connect 20283ff9c136SChangpengto NVMe over vfio-user target via vfio-user transport. 20293ff9c136SChangpeng 203043c20701STomasz ZawadzkiAdded a new function `spdk_nvme_ctrlr_set_remove_cb` to remove or override 203143c20701STomasz Zawadzki`remove_cb` and `remove_ctx` specified when the controller was probed. 203243c20701STomasz Zawadzki 203343c20701STomasz ZawadzkiAdded support for ZNS zone append command with new API `spdk_nvme_zns_zone_append` and 203443c20701STomasz Zawadzki`spdk_nvme_zns_zone_append_with_md`. 203543c20701STomasz Zawadzki 2036fce94287SMadhu Adav MJ### nvmf 2037fce94287SMadhu Adav MJ 2038f1f51f2bSTomasz Zawadzki`nvmf_fc_lld_fini` now takes callback and hence updating FC Broadcom LLD driver 20399f0b1d76SNaresh Gottumukkalato the latest is required. 20409f0b1d76SNaresh Gottumukkala 204161dfdd2aSNaresh GottumukkalaFC transport supported primary tagging and VMID. 204261dfdd2aSNaresh Gottumukkala 2043fd7c1ff2SZiye YangBroadcom FC LLD driver and SPDK NVMe-oF FC transport consolidated one LLD API, 2044fd7c1ff2SZiye Yang`nvmf_fc_init_poller_queues` into another LLD API `nvmf_fc_init_q`. 2045fd7c1ff2SZiye YangHence updating Broadcom FC LLD driver to the latest is required. 2046fd7c1ff2SZiye Yang 20470d98a949SNaresh GottumukkalaThe functions `destroy` and `qpair_fini` in the transport interface now accept a 2048f1f51f2bSTomasz Zawadzki`cb_fn` and `cb_arg` to call upon completion, and their execution can be asynchronous. 2049ccd96eadSNaresh Gottumukkala 2050f1f51f2bSTomasz ZawadzkiThe SPDK NVMe-oF target now supports async event notification for discovery log changes. 2051fce94287SMadhu Adav MJThis allows the initiator to create persistent connection to discovery controller and 2052fce94287SMadhu Adav MJbe notified of any discovery log changes. 2053fce94287SMadhu Adav MJ 20543b16c6ddSZiye YangAn `opts_size` element was added in the `spdk_nvmf_transport_opts` structure 2055a2f0b6e4SJosh Sorefto solve the ABI compatibility issue between different SPDK version. And also add 2056f1f51f2bSTomasz Zawadzki`opts_size` parameter in `spdk_nvmf_transport_opts_init` function. 20573b16c6ddSZiye Yang 2058f1f51f2bSTomasz ZawadzkiAdded a new custom vfio-user transport implementation in NVMe-oF which can provide 20593ff9c136SChangpengemulated NVMe devices to QEMU and SPDK NVMe driver. 20603ff9c136SChangpeng 206143c20701STomasz ZawadzkiAdded new API `spdk_nvmf_tgt_listen_ext` that uses `spdk_nvmf_listen_opts` to allow 206243c20701STomasz Zawadzkipassing generic options to specific transport. This functionality replaces one provided 206343c20701STomasz Zawadzkiwith `nvmf_subsystem_set_options`. Also removed `nvmf_subsystem_set_options` RPC 206443c20701STomasz Zawadzkithat allowed transport specific options within subsystem. 206543c20701STomasz Zawadzki 206643c20701STomasz ZawadzkiThe `trsvcid` in `nvmf_subsystem_add_listener` RPC is now optional. 206743c20701STomasz Zawadzki 2068312a9d60SBen WalkerPausing a subsystem now only pauses all admin queues. This allows for the 2069312a9d60SBen Walkermanagement of hosts and listeners, plus the addition of namespaces without a 2070312a9d60SBen Walkerfull subsystem pause. Additionally, the target now allows for pausing 2071312a9d60SBen Walkerindividual namespaces within a subsystem. To remove a namespace from a 2072312a9d60SBen Walkersubsystem, only the specific namespace must be paused. I/O will continue to 2073312a9d60SBen Walkerother namespaces while these operations execute. 2074312a9d60SBen Walker 2075d4ad1f9cSShuhei Matsumoto### rpc 2076d4ad1f9cSShuhei Matsumoto 2077d4ad1f9cSShuhei MatsumotoAn new optional parameter `wait` was added to the RPC `iscsi_create_portal_group`, 2078d4ad1f9cSShuhei Matsumotoand an new RPC `iscsi_start_portal_group` was added. They will be used not to start 2079d4ad1f9cSShuhei Matsumotolistening on portals for a portal group until all associated target nodes are created 2080d4ad1f9cSShuhei Matsumotoat startup, otherwise some iSCSI initiators may fail to re-login when SPDK iSCSI 2081d4ad1f9cSShuhei Matsumototarget application restarts. 2082d4ad1f9cSShuhei Matsumoto 2083f420b9efSZiye YangTwo optional parameter `--small-buf-pool-size` and `--large-buf-pool-size` were added 2084f420b9efSZiye Yanginto `bdev_set_options` function. 2085f420b9efSZiye Yang 208643c20701STomasz Zawadzki### vhost 208743c20701STomasz Zawadzki 208843c20701STomasz ZawadzkiAdded optional `packed_ring_recovery` parameter to `vhost_create_blk_controller` RPC 208943c20701STomasz Zawadzkienabling packed ring live recovery. 209043c20701STomasz Zawadzki 20917239e113SMaciej Wawryk## v20.10 2092809ab045STomasz Zawadzki 20939e89645bSTomasz Zawadzki### accel 20949e89645bSTomasz Zawadzki 20959e89645bSTomasz ZawadzkiNew APIs `spdk_accel_batch_cancel` and `spdk_idxd_batch_cancel` were added to allow 20969e89645bSTomasz Zawadzkicancelling a batch sequence. 20979e89645bSTomasz Zawadzki 2098db8bd995SShuhei Matsumoto### bdev 2099db8bd995SShuhei Matsumoto 2100db8bd995SShuhei MatsumotoA new `spdk_bdev_part_base_construct_ext` function has been added and the 2101db8bd995SShuhei Matsumoto`spdk_bdev_part_base_construct` has been deprecated. The 2102db8bd995SShuhei Matsumoto`spdk_bdev_part_base_construct_ext` function takes bdev name as an argument instead 2103db8bd995SShuhei Matsumotoof bdev structure to avoid a race condition that can happen when the bdev is being 210475fdd05eSTomasz Zawadzkiremoved between a call to get its structure based on a name and actually opening it. 2105db8bd995SShuhei Matsumoto 210628ebb8ccSTomasz ZawadzkiRemoved `spdk_bdev_config_text` function for bdev modules to report legacy config. 210728ebb8ccSTomasz Zawadzki 21086a72c19eSShuhei Matsumoto### blobstore 21096a72c19eSShuhei Matsumoto 21106a72c19eSShuhei MatsumotoA new `spdk_bdev_create_bs_dev_ext` function has been added and `spdk_bdev_create_bs_dev_from_desc` 21116a72c19eSShuhei Matsumotofunction has been deprecated. 21126a72c19eSShuhei Matsumoto 2113c7df7a4cSTomasz Zawadzki### dpdk 2114c7df7a4cSTomasz Zawadzki 2115c7df7a4cSTomasz ZawadzkiUpdated DPDK submodule to DPDK 20.08. 2116c7df7a4cSTomasz Zawadzki 21179e89645bSTomasz Zawadzki### env 21189e89645bSTomasz Zawadzki 21199e89645bSTomasz ZawadzkiA new API `spdk_mem_get_fd_and_offset` was added to get file descriptor and offset for 21209e89645bSTomasz Zawadzkia given virtual address. 21219e89645bSTomasz Zawadzki 21226511969cSTomasz Zawadzki### event 21236511969cSTomasz Zawadzki 21246511969cSTomasz ZawadzkiRemoved `spdk_subsystem_config` callback for submodules as part of legacy config removal. 21256511969cSTomasz Zawadzki 2126344bb693STomasz ZawadzkiRemoved `spdk_app_get_running_config` function that printed configuration in legacy format, 2127344bb693STomasz Zawadzkiand removed `usr1_handler` from `struct spdk_app_opts` callback that was used to call it. 2128344bb693STomasz Zawadzki 212967109ff8SMaciej SzwedAdded SPDK thread scheduler framework which is used to rebalance load among CPU cores. 213067109ff8SMaciej SzwedThe scheduler implementation is pluggable and two schedulers are added first, `static` scheduler 213167109ff8SMaciej Szwedand `gscheduler` scheduler. 213267109ff8SMaciej Szwed 213367109ff8SMaciej Szwed`static` scheduler is used by default and does not reschedule threads and keeps the initial 213467109ff8SMaciej Szwedassignments. 213567109ff8SMaciej Szwed 213667109ff8SMaciej SzwedCPU frequency governor framework and implementation are also added. 213767109ff8SMaciej Szwed`dpdk_governor` is the first implementation and is based on rte_power library of DPDK. 213867109ff8SMaciej Szwed`gscheduler` scheduler utilizes the CPU frequency governor. 213967109ff8SMaciej Szwed 214067109ff8SMaciej SzwedScheduler and governor frameworks are experimental features. 214167109ff8SMaciej Szwed 21421cb73242STomasz Zawadzki### fio 21431cb73242STomasz Zawadzki 21441cb73242STomasz ZawadzkiBdev fio_plugin no longer supports legacy configuration files. Options `spdk_conf` and 21451cb73242STomasz Zawadzki`spdk_json_conf` have to point to valid JSON configuration. 21461cb73242STomasz Zawadzki 2147ccdbe656STomasz Zawadzki### gpt 2148ccdbe656STomasz Zawadzki 2149ccdbe656STomasz ZawadzkiRemoved option to disable GPT probing via legacy configuration. Please use generic 2150ccdbe656STomasz Zawadzkibdev functionality to replicate the behavior. See `bdev_set_options --disable-auto-examine` 2151ccdbe656STomasz Zawadzkiand `bdev_examine` RPC. 2152ccdbe656STomasz Zawadzki 215335e54647STomasz Zawadzki### intel-ipsec-mb 215435e54647STomasz Zawadzki 215535e54647STomasz ZawadzkiUpdated intel-ipsec-mb submodule to v0.54 215635e54647STomasz Zawadzki 21570ed85362STomasz Zawadzki### isa-l 21580ed85362STomasz Zawadzki 21590ed85362STomasz ZawadzkiUpdated ISA-L submodule to v2.29.0. 21600ed85362STomasz Zawadzki 21615dcbf54bSShuhei Matsumoto### iscsi 21625dcbf54bSShuhei Matsumoto 21635dcbf54bSShuhei MatsumotoThe iSCSI target supports iSCSI login redirection feature to achieve fault tolerance 21645dcbf54bSShuhei Matsumotoand load balancing particularly in scale out iSCSI target system, which runs multiple 21655dcbf54bSShuhei MatsumotoSPDK iSCSI targets. 21665dcbf54bSShuhei Matsumoto 21679e89645bSTomasz Zawadzki### json 21689e89645bSTomasz Zawadzki 21699e89645bSTomasz ZawadzkiA new API `spdk_json_decode_object_relaxed` was added to allow parsing json values 21709e89645bSTomasz Zawadzkieven if decoder for a given key is not found. 21719e89645bSTomasz Zawadzki 21729e89645bSTomasz ZawadzkiA new API `spdk_json_free_object` was added to free memory allocated by `spdk_json_decode_object`. 21739e89645bSTomasz Zawadzki 217444ac74e8SShuhei Matsumoto### log 2175ffbddd4fSTomasz Zawadzki 2176ffbddd4fSTomasz ZawadzkiA log flag structure, `spdk_log_register_flag`, `spdk_log_get_first_flag`, 2177ffbddd4fSTomasz Zawadzki`spdk_log_get_next_flag` and macro `SPDK_LOG_REGISTER_COMPONENT`, have been added which 2178ffbddd4fSTomasz Zawadzkienable registering and interacting with log flags. Added `SPDK_INFOLOG`, `SPDK_DEBUGLOG` 2179ffbddd4fSTomasz Zawadzkiand `SPDK_LOGDUMP` macros to display logs for specified log flag. 2180ffbddd4fSTomasz Zawadzki 21818a76c248STomasz ZawadzkiThe log flags in the event framework `-L` and several SPDK applications has been enabled on 21828a76c248STomasz Zawadzkirelease builds of SPDK. On debug builds this option will additionally set 21838a76c248STomasz Zawadzkilog print level to `SPDK_LOG_DEBUG`. 21848a76c248STomasz Zawadzki 21859e89645bSTomasz ZawadzkiA new API `spdk_log_enable_timestamps` and new RPC `log_enable_timestamps` was added to 21869e89645bSTomasz Zawadzkitoggle log timestamps. 21879e89645bSTomasz Zawadzki 2188c7df7a4cSTomasz Zawadzki### miscellaneous 2189c7df7a4cSTomasz Zawadzki 2190c7df7a4cSTomasz ZawadzkiThe contents of the log_rpc library have been moved to the event library. The log_rpc 2191c7df7a4cSTomasz Zawadzkilibrary now no longer exists. 2192c7df7a4cSTomasz Zawadzki 2193c7df7a4cSTomasz ZawadzkiThe contents of the app_rpc library have been moved to the event library. The app_rpc 2194c7df7a4cSTomasz Zawadzkilibrary now no longer exists. 2195c7df7a4cSTomasz Zawadzki 2196c7df7a4cSTomasz ZawadzkiThe contents of the bdev_rpc library have been moved to the bdev library. The app_rpc 2197c7df7a4cSTomasz Zawadzkilibrary now no longer exists. 2198c7df7a4cSTomasz Zawadzki 2199c7df7a4cSTomasz ZawadzkiThe bdevperf application now disables the zcopy API by default. Prior to this change, 2200c7df7a4cSTomasz Zawadzkibdevperf enabled using the zcopy API by default which caused a performance impact of 2201c7df7a4cSTomasz Zawadzkiup to 25% on bdevs that don't natively support zcopy because the API emulates zero-copy 2202c7df7a4cSTomasz Zawadzkiby allocating a buffer. The bdevperf `-x` param was renamed to `-Z` and the default 2203c7df7a4cSTomasz Zawadzkivalue changed to false. For bdevs that support zcopy, use the -Z flag to enable 2204c7df7a4cSTomasz Zawadzkiusing zcopy API. 2205c7df7a4cSTomasz Zawadzki 22069e89645bSTomasz Zawadzki### net 22079e89645bSTomasz Zawadzki 22089e89645bSTomasz ZawadzkiNet framework intended for use by user-space TCP stacks was removed. 22099e89645bSTomasz Zawadzki 221044ac74e8SShuhei Matsumoto### nvme 221144ac74e8SShuhei Matsumoto 22129e89645bSTomasz ZawadzkiZoned Namespace Command Set support has been added to NVMe driver, see `nvme_zns.h` for details. 22139e89645bSTomasz Zawadzki 221444ac74e8SShuhei MatsumotoNew APIs, `spdk_nvme_detach_async` and `spdk_nvme_detach_poll_async`, have been added to 221544ac74e8SShuhei Matsumotodetach multiple controllers in parallel to mitigate lengthy shutdown notification of 221644ac74e8SShuhei Matsumotoa few NVMe SSDs. 221744ac74e8SShuhei Matsumoto 22189d3afe1fSShuhei MatsumotoNew APIs, `spdk_nvme_ns_get_ana_group_id` and `spdk_nvme_ns_get_ana_state`, have been 22199d3afe1fSShuhei Matsumotoadded to get ANA group ID and ANA state of the given namespace, respectively. 22209d3afe1fSShuhei Matsumoto 2221078ef4e5STomasz ZawadzkiIf no specific command set is requested (by setting the command_set member in the 2222078ef4e5STomasz Zawadzki`spdk_nvme_ctrlr_opts` structure), SPDK will automatically select the most appropriate 2223078ef4e5STomasz Zawadzkicommand set based on what the controller supports. 2224078ef4e5STomasz Zawadzki 222544ac74e8SShuhei Matsumoto### nvmf 222644ac74e8SShuhei Matsumoto 222744ac74e8SShuhei MatsumotoA new API `spdk_nvmf_subsystem_add_ns_ext` has been added and the API `spdk_nvmf_subsystem_add_ns` 222844ac74e8SShuhei Matsumotohas been deprecated. 222944ac74e8SShuhei Matsumoto 22309d3afe1fSShuhei MatsumotoThe NVMe-oF target now supports Asymmetric Namespace Access (ANA) Reporting to provide 22319d3afe1fSShuhei Matsumotomultipath to NVMe-oF initiator. 22329d3afe1fSShuhei Matsumoto 223375fdd05eSTomasz ZawadzkiAdd `no_wr_batching` parameter to `spdk_nvmf_transport_opts` struct to disable 2234c7df7a4cSTomasz ZawadzkiWork Requests batching in RDMA transport. 2235c7df7a4cSTomasz Zawadzki 2236c7df7a4cSTomasz ZawadzkiNVMf Target transports can now parse any additional JSON params in the nvmf_create_transport RPC 2237c7df7a4cSTomasz Zawadzkithrough the JSON context provided via spdk_nvmf_target_opts->transport_specific. 2238c7df7a4cSTomasz Zawadzki 22399e89645bSTomasz ZawadzkiA new RPC `nvmf_subsystem_set_options` was added to allow transport specific options within subsystem. 22409e89645bSTomasz Zawadzki 22419e89645bSTomasz ZawadzkiA new API `spdk_nvmf_transport_stop_listen_async` was added to stop accepting new connections 22429e89645bSTomasz Zawadzkiat the provided address. `nvmf_subsystem_remove_listener` RPC now uses this function. 22439e89645bSTomasz Zawadzki 22449e89645bSTomasz ZawadzkiA new API `spdk_nvmf_subsystem_disconnect_host` was added to disconnect all connections 22459e89645bSTomasz Zawadzkioriginating from the provided hostnqn. `nvmf_subsystem_remove_host` RPC now uses this function. 22469e89645bSTomasz Zawadzki 2247b3e230a1STomasz Zawadzki### ocf 2248b3e230a1STomasz Zawadzki 2249b3e230a1STomasz ZawadzkiUpdated OCF submodule to v20.03.1 2250b3e230a1STomasz Zawadzki 2251a6db2f35SZiye Yang### rpc 2252a6db2f35SZiye Yang 2253e99ac031SShuhei MatsumotoNew optional parameters, `enable_placement_id` and `enable_quickack` were added to the 2254e99ac031SShuhei Matsumoto`sock_impl_set_options` RPC. 2255a6db2f35SZiye Yang 22567e1a85afSShuhei MatsumotoA new RPC `bdev_examine_bdev` was added to allow users to examine a bdev explicitly. 22577e1a85afSShuhei MatsumotoIt can be used only if bdev_auto_examine is set to false by the RPC `bdev_set_options`. 22587e1a85afSShuhei Matsumoto 22594fe47d6fSAlexey MarchukNew optional parameters `no_wr_batching` and `control_msg_num` were added to the RPC 22604fe47d6fSAlexey Marchuk'nvmf_create_transport'. 2261bd3840a7SIvan Betsis 22625dcbf54bSShuhei MatsumotoNew RPCs, `iscsi_target_node_set_redirect` and `iscsi_target_node_request_logout`, have 22635dcbf54bSShuhei Matsumotobeen added, and a new optional parameter `private` has been added to the RPC 22645dcbf54bSShuhei Matsumoto`iscsi_create_portal_group` to support iSCSI login redirection feature. 22655dcbf54bSShuhei Matsumoto 22669d3afe1fSShuhei MatsumotoA new optional parameter `ana_reporting` was added to the RPC `nvmf_create_subsystem`, and 226724f373c5SAnil Veerabhadrappaa new RPC `nvmf_subsystem_listener_set_ana_state` was added for ANA reporting. 22689d3afe1fSShuhei Matsumoto 22699d3afe1fSShuhei MatsumotoNew RPCs, `nvmf_subsystem_get_listeners` and `nvmf_subsystem_get_qpairs`, were added to 22709d3afe1fSShuhei Matsumotoretrieve configuration of the NVMe-oF subsystem. 22719d3afe1fSShuhei Matsumoto 22725029fe14SLi Feng### scsi 22737e1a85afSShuhei Matsumoto 22745029fe14SLi FengTwo new APIs have been added `spdk_scsi_dev_construct_ext` and 22755029fe14SLi Feng`spdk_scsi_dev_add_lun_ext` that allow the upper layer(e.g. vhost-scsi) to 22765029fe14SLi Fengreceive the notification when the scsi bdev has been resized. 22775029fe14SLi Feng 22785029fe14SLi FengThe `spdk_scsi_dev_construct` and `spdk_scsi_dev_add_lun` eventually may be 22795029fe14SLi Fengdeprecated and removed. 22805029fe14SLi Feng 2281c7df7a4cSTomasz Zawadzki### sock 2282f766d1e4SDarek Stojaczyk 228375fdd05eSTomasz ZawadzkiThe `enable_placement_id` field was added in the `struct spdk_sock_impl_opts` to 2284c7df7a4cSTomasz Zawadzkimake the placement_id feature configurable by users. The default setting is 2285c7df7a4cSTomasz Zawadzkinot enabled. 2286c7df7a4cSTomasz Zawadzki 228775fdd05eSTomasz ZawadzkiThe `enable_quick_ack` field was added in the `struct spdk_sock_impl_opts` to enable 2288c7df7a4cSTomasz Zawadzkior disable quick ack for the POSIX sock module. The default setting is not enabled. 2289c7df7a4cSTomasz Zawadzki 2290c7df7a4cSTomasz Zawadzki### thread 2291c7df7a4cSTomasz Zawadzki 2292c7df7a4cSTomasz Zawadzki`fd_group` is applied to support interrupt mode. 2293c7df7a4cSTomasz ZawadzkiNew APIs were added to support an experimental interrupt mode. This allows modules or 2294c7df7a4cSTomasz Zawadzkilibraries to selectively register file descriptors that the spdk_thread can wait on, 2295c7df7a4cSTomasz Zawadzkias an alternative to polling. In v20.10, this functionality is enabled in a very small 2296c7df7a4cSTomasz Zawadzkisubset of SPDK libraries and modules. 2297c7df7a4cSTomasz Zawadzki 2298c7df7a4cSTomasz Zawadzki### util 2299c7df7a4cSTomasz Zawadzki 2300c7df7a4cSTomasz ZawadzkiA new utility named `fd_group` was add. It is now 2301c7df7a4cSTomasz Zawadzkiimplemented by epoll on Linux platform. It can be used by 2302c7df7a4cSTomasz Zawadzkispdk_thread and reactor to implement interrupt mode. 2303c7df7a4cSTomasz Zawadzki 23049e89645bSTomasz ZawadzkiAdded `spdk_bit_pool` utility, see `bit_pool.h` for details. 23059e89645bSTomasz Zawadzki 2306c7df7a4cSTomasz Zawadzki### vhost 2307c7df7a4cSTomasz Zawadzki 2308c7df7a4cSTomasz ZawadzkiSPDK has switched to DPDK's rte_vhost library since 19.07 release, removed the internal 2309c7df7a4cSTomasz Zawadzkirte_vhost library which is used for DPDK older than 19.05, removed the experimental vhost 2310c7df7a4cSTomasz Zawadzkinvme target which depends on the internal rte_vhost library. 2311f766d1e4SDarek Stojaczyk 23129e89645bSTomasz Zawadzki### vpp 23139e89645bSTomasz Zawadzki 23149e89645bSTomasz ZawadzkiRemoved socket abstraction for VPP. 23159e89645bSTomasz Zawadzki 231652aaee43STomasz Zawadzki## v20.07: SPDK CSI driver, new accel_fw commands, I/O abort support 23174f6fe261STomasz Zawadzki 2318c77c6559SDarek Stojaczykspdk_json_free_object() was added to free memory allocated by spdk_json_decode_object(). 2319c77c6559SDarek Stojaczyk 232091bca457SSeth Howell### accel 232191bca457SSeth Howell 232291bca457SSeth HowellA new API was added `spdk_accel_get_capabilities` that allows applications to 232391bca457SSeth Howellquery the capabilities of the currently enabled accel engine back-end. 232491bca457SSeth Howell 232591bca457SSeth HowellA new capability, CRC-32C, was added via `spdk_accel_submit_crc32c`. 232691bca457SSeth Howell 2327a2f0b6e4SJosh SorefThe software accel engine implementation has added support for CRC-32C. 232891bca457SSeth Howell 232991bca457SSeth HowellA new capability, compare, was added via `spdk_accel_submit_compare`. 233091bca457SSeth Howell 2331a2f0b6e4SJosh SorefThe software accel engine implementation has added support for compare. 233291bca457SSeth Howell 23337177e949SSeth HowellSeveral APIs were added to `accel_engine.h` to support batched submission 23347177e949SSeth Howellof operations. 23357177e949SSeth Howell 23367177e949SSeth HowellSeveral APIs were added to `accel_engine.h` to support dualcast operations. 23377177e949SSeth Howell 2338e9b3a0e1Spaul luse### accel_fw 2339e9b3a0e1Spaul luse 2340ee7e31f9Spaul luseThe accel_fw was updated to no longer require the app to allocate an 2341ee7e31f9Spaul luseaccel_task on its behalf. All public APIs now take a callback arg as 2342ee7e31f9Spaul lusethe parameter that used to be the accel_task. 2343ee7e31f9Spaul luse 2344f7d25cf7Spaul luseThe accel_fw API `spdk_accel_task_size` was removed as it is no longer 2345f7d25cf7Spaul luserequired. 2346f7d25cf7Spaul luse 2347e9b3a0e1Spaul luseThe accel_fw was updated to support compare, dualcast, crc32c. 2348e9b3a0e1Spaul luse 2349e9b3a0e1Spaul luseThe accel_fw introduced batching support for all commands in all plug-ins. 2350e9b3a0e1Spaul luseSee docs for detailed information. 2351e9b3a0e1Spaul luse 235291bca457SSeth Howell### bdev 235391bca457SSeth Howell 235491bca457SSeth HowellA new API `spdk_bdev_abort` has been added to submit abort requests to abort all I/Os 235591bca457SSeth Howellwhose callback context match to the bdev on the given channel. 235691bca457SSeth Howell 235791bca457SSeth Howell### build 235891bca457SSeth Howell 235991bca457SSeth HowellThe fio plugins now compile to `build/fio` and are named `spdk_bdev` and `spdk_nvme`. 236091bca457SSeth HowellExisting fio configuration files will need to be updated. 236191bca457SSeth Howell 236291bca457SSeth Howell### dpdk 236391bca457SSeth Howell 236491bca457SSeth HowellUpdated DPDK submodule to DPDK 20.05. 236591bca457SSeth Howell 23667177e949SSeth Howell### env 23677177e949SSeth Howell 23687177e949SSeth HowellSeveral new APIs have been added to provide greater flexibility in registering and 23697177e949SSeth Howellaccessing polled mode PCI drivers. See `env.h` for more details. 23707177e949SSeth Howell 2371e9b3a0e1Spaul luse### idxd 2372e9b3a0e1Spaul luse 2373e9b3a0e1Spaul luseThe idxd library and plug-in module for the accel_fw were updated to support 2374e9b3a0e1Spaul luseall accel_fw commands as well as batching. Batching is supported both 2375e9b3a0e1Spaul lusethrough the library and the plug-in module. 2376e9b3a0e1Spaul luse 237791bca457SSeth HowellIDXD engine support for CRC-32C has been added. 237891bca457SSeth Howell 23796a9e923dSpaul luse### ioat 23806a9e923dSpaul luse 23816a9e923dSpaul luseA new API `spdk_ioat_get_max_descriptors` was added. 23826a9e923dSpaul luse 238391bca457SSeth Howell### nvme 238491bca457SSeth Howell 23857177e949SSeth HowellAn `opts_size`element was added in the `spdk_nvme_ctrlr_opts` structure 2386a2f0b6e4SJosh Sorefto solve the ABI compatibility issue between different SPDK version. 238791bca457SSeth Howell 238891bca457SSeth HowellA new API `spdk_nvme_ctrlr_cmd_abort_ext` has been added to abort previously submitted 238991bca457SSeth Howellcommands whose callback argument match. 239091bca457SSeth Howell 23917177e949SSeth HowellConvenience functions, `spdk_nvme_print_command` and `spdk_nvme-print_completion` were added 23927177e949SSeth Howellto the public API. 23937177e949SSeth Howell 23947177e949SSeth HowellA new function, `spdk_nvmf_cuse_update_namespaces`, updates the cuse representation of an NVMe 23957177e949SSeth Howellcontroller. 23967177e949SSeth Howell 23977177e949SSeth HowellA new function `qpair_iterate_requests` has been added to the nvme transport interface. ALl 23987177e949SSeth Howellimplementations of the transport interface will have to implement that function. 23997177e949SSeth Howell 2400c37cf9fbSBen Walker### nvmf 2401c37cf9fbSBen Walker 2402c37cf9fbSBen WalkerThe NVMe-oF target no longer supports connecting scheduling configuration and instead 2403c37cf9fbSBen Walkeralways uses what was previously called "transport" scheduling. 2404c37cf9fbSBen Walker 240577ab6f28SBen Walker`spdk_nvmf_tgt_accept` no longer exists. The accept process now occurs automatically after 240677ab6f28SBen Walkerthe creation of an nvmf target and queue pairs are assigned to poll groups by the underlying 240777ab6f28SBen Walkertransport. Further, `spdk_nvmf_transport_ops` has changed such that the accept function 240877ab6f28SBen Walkerpointer no longer takes a function pointer as an argument. Instead, transports should call 24095584232cSBen Walker`spdk_nvmf_tgt_new_qpair` whenever they previously would have called that callback. 2410ff24db74SBen Walker 241145a2d804SShuhei MatsumotoThe NVMe-oF target now supports aborting any submitted NVM or Admin command. Previously, 241245a2d804SShuhei Matsumotothe NVMe-oF target could abort only Asynchronous Event Request commands. 241345a2d804SShuhei Matsumoto 2414daee62a0SAlexey Marchuk### rdma 2415daee62a0SAlexey Marchuk 2416daee62a0SAlexey MarchukA new `rdma` library has been added. It is an abstraction layer over different RDMA providers. 2417daee62a0SAlexey MarchukTwo providers are available - verbs (used by default when RDMA is enabled or enabled explicitly 2418daee62a0SAlexey Marchukusing --with-rdma=verbs) and mlx5 Direct Verbs aka DV (enabled by --with-rdma=mlx5_dv). 2419daee62a0SAlexey MarchukUsing mlx5_dv requires libmlx5 installed on the system. 2420daee62a0SAlexey Marchuk 24211551197dSAlexey Marchuk### rpc 24221551197dSAlexey Marchuk 24231551197dSAlexey MarchukParameter `-p` or `--max-qpairs-per-ctrlr` of `nvmf_create_transport` RPC command accepted by the 24247177e949SSeth Howellrpc.py script is deprecated, new parameter `-m` or `--max-io-qpairs-per-ctrlr` was added. 24251551197dSAlexey Marchuk 2426b1074c49SEvgeniy KochetovAdded `sock_impl_get_options` and `sock_impl_set_options` RPC methods. 2427b1074c49SEvgeniy Kochetov 242891bca457SSeth HowellCommand line parameters `-r` and `--rpc-socket` will longer accept TCP ports. RPC server 242991bca457SSeth Howellmust now be started on a Unix domain socket. Exposing RPC on the network, as well as providing 243091bca457SSeth Howellproper authentication (if needed) is now a responsibility of the user. 243191bca457SSeth Howell 24327177e949SSeth HowellThe `bdev_set_options` RPC has a new option, `bdev_auto_examine` to control the auto examine function 24337177e949SSeth Howellof bdev modules. 24347177e949SSeth Howell 24357177e949SSeth HowellNew RPCs `sock_impl_get_options` and `sock_impl_set_options` been added to expose new socket features. 24367177e949SSeth HowellSee `sock` section for more details. 24377177e949SSeth Howell 2438eb0faf26SEvgeniy Kochetov### sock 2439eb0faf26SEvgeniy Kochetov 2440eb0faf26SEvgeniy KochetovAdded `spdk_sock_impl_get_opts` and `spdk_sock_impl_set_opts` functions to set/get socket layer configuration 2441eb0faf26SEvgeniy Kochetovoptions. Options can be set independently for each implementation. 2442eb0faf26SEvgeniy Kochetov 244374b184e7SEvgeniy KochetovAdded `recv_buf_size` and 'send_buf_size' socket layer options. They are used only in posix implementation. 244474b184e7SEvgeniy Kochetov 2445a445e45fSZiye YangAdded `uring` based socket implementation, the code is located in module/sock/uring. This feature is only 2446a445e45fSZiye Yangavailable in Linux which requires kernel version is greater than 5.4.3. Currently, our CI pool added the uring 2447a445e45fSZiye Yangbased socket tests for iSCSI target and also the tests for SPDK NVMe-oF tcp transport. 2448a445e45fSZiye Yang 244963c5e51eSEvgeniy KochetovAdded `enable_recv_pipe` socket layer option to allow disabling of double buffering on receive. 245063c5e51eSEvgeniy KochetovNew option is used only in posix implementation. 245163c5e51eSEvgeniy Kochetov 245229f31a90SEvgeniy KochetovAdded `enable_zerocopy_send` socket layer option to allow disabling of zero copy flow on send. 245329f31a90SEvgeniy KochetovNew option is used only in posix implementation. 245429f31a90SEvgeniy Kochetov 24557177e949SSeth Howell### util 24567177e949SSeth Howell 24577177e949SSeth HowellSome previously exposed CRC32 functions have been removed from the public API - 24587177e949SSeth Howell`spdk_crc32_update`, `spdk_crc32_table_init`, and the `spdk_crc32_table` struct. 24597177e949SSeth Howell 2460b62bfbf6SShuhei Matsumoto### vhost 2461b62bfbf6SShuhei Matsumoto 2462b62bfbf6SShuhei MatsumotoThe function `spdk_vhost_blk_get_dev` has been removed. 2463b62bfbf6SShuhei Matsumoto 246452aaee43STomasz Zawadzki## v20.04: SPDK Top, IDXD, NVMe qpair groups 24657c6b5747STomasz Zawadzki 2466b57103a0Spaul luseIDXD engine support for compare has been added. 2467b57103a0Spaul luse 24681fa071d3STomasz Zawadzki### configuration 24691fa071d3STomasz Zawadzki 24701fa071d3STomasz ZawadzkiLegacy INI style configuration for SPDK applications has been deprecated and will be 24711fa071d3STomasz Zawadzkiremoved in future release. 24721fa071d3STomasz ZawadzkiPlease switch to JSON-RPC configuration files and/or RPC driven run-time configuration. 24731fa071d3STomasz Zawadzki 24746607e124SSeth Howell### copy 24756607e124SSeth Howell 24766607e124SSeth HowellThe copy engine library, modules and public APIs have been renamed. Use of the word `copy` 24776607e124SSeth Howellhas been replaced with the word `accel` short for accelerator in preparation for adding new 24786607e124SSeth Howellcapabilities in the future. Additionally, APIs for what was previously called the `memcpy` 24796607e124SSeth Howellengine have been renamed to identify the engine as a software accelerator. 24806607e124SSeth Howell 24816607e124SSeth Howell### crypto 24826607e124SSeth Howell 24836607e124SSeth HowellSupport for AES_XTS was added for the QAT polled mode driver (pmd). The create RPC 24846607e124SSeth Howell`bdev_crypto_create` has 2 new optional parameters: cipher and key2. Cipher can be either 24856607e124SSeth HowellAES_CBC (default) or AES_XTS. AES_XTS is only valid when using the QAT polled mode driver. 24866607e124SSeth HowellThe key2 parameter is the second key required for AES_XTS. 24876607e124SSeth Howell 24886607e124SSeth Howell### event 24896607e124SSeth Howell 24906607e124SSeth HowellReactors now accumulate CPU stats and they are retrieved by the RPC `framework_get_reactors`. 24916607e124SSeth Howell 2492d8db5622Spaul luse### idxd 2493d8db5622Spaul luse 2494d8db5622Spaul luseIDXD support was added in the form of a low level library that can directly 2495d8db5622Spaul luseutilize the IDXD offload engine as well as an accel plug-in module allowing for use 2496d8db5622Spaul lusewith the generic accel framework API. IDXD is the first in a family of offload 2497d8db5622Spaul luseengines that share the same interface, specifically DSA is added here. More info 2498d8db5622Spaul lusecan be found here: https://01.org/blogs/2019/introducing-intel-data-streaming-accelerator 2499d8db5622Spaul luse 25006607e124SSeth HowellMuch of the implementation models IOAT, however the low level interfaces are very 2501d8db5622Spaul lusedifferent. The RPC to enable IDXD requires a configuration number as well. The 25026607e124SSeth Howellcode includes two pre-defined configurations of IDXD groups/work queues/engines. A future 2503d8db5622Spaul luseversion will provide an interface to allow for setting of individual configuration 2504d8db5622Spaul luseparameters. 2505d8db5622Spaul luse 2506d8db5622Spaul luseIDXD is not yet available so this feature should be considered experimental. It will 2507d8db5622Spaul lusebe built up with additional documentation as an ongoing activity. 2508d8db5622Spaul luse 25096607e124SSeth Howell### iscsi 251074e5708bSShuhei Matsumoto 251174e5708bSShuhei MatsumotoThe iSCSI target now creates a lightweight thread per poll group instead of assuming a pool 251274e5708bSShuhei Matsumotoof lightweight threads already exist at start up time. A poll group is a collection of 251374e5708bSShuhei Matsumotounrelated iSCSI connections. Each poll group is only accessed from the associated 251474e5708bSShuhei Matsumotolightweight thread. 251574e5708bSShuhei Matsumoto 251685f72985SSeth Howell### ftl 251785f72985SSeth Howell 251885f72985SSeth HowellSeveral changes have been made to the `spdk_ftl_conf`, `spdk_ftl_dev_init_ops`, and 251985f72985SSeth Howell`spdk_ftl_attrs` structs. Please see `include/spdk/ftl.h` for more details. 252085f72985SSeth Howell 25216607e124SSeth Howell### miscellaneous 252293be26a5SKarol Latecki 25236607e124SSeth HowellThe `--json-ignore-init-errors` command line parameter has been added to ignore 25246607e124SSeth Howellinitialization errors on JSON config load. 25256607e124SSeth Howell 25266607e124SSeth HowellThe public header file io_channel.h has been removed. Please use thread.h which has the 25276607e124SSeth Howellexact same API. 25286607e124SSeth Howell 25296607e124SSeth Howell### nvme 25306607e124SSeth Howell 25316607e124SSeth HowellExported internal nvme_ctrlr_cmd_security_receive/send() APIs as public APIs with "the spdk_" 25326607e124SSeth Howellprefix. 25336607e124SSeth Howell 25346607e124SSeth HowellAdded `priority` field in `spdk_nvme_transport_id`, this field is used to specify the priority 25356607e124SSeth Howellof the NVMe-oF connection, and currently it is used for NVMe-oF tcp connection. 2536ce6171d4SKonrad Sztyber 253785f72985SSeth HowellA new poll group API has been added to allow for pooling of nvme qpairs across a single 253885f72985SSeth Howellentity which can be polled for completions. This new API consists of the `spdk_nvme_poll_group` 253985f72985SSeth Howellfamily of functions. As a result of this new API, all NVMe transports are expected to implement 254085f72985SSeth Howellseveral poll group related functions. 254185f72985SSeth Howell 254285f72985SSeth HowellA new flag, `create_only`, has been added to the `spdk_nvme_io_qpair_opts` structure. This flag 254385f72985SSeth Howellallows a user to call `spdk_nvme_ctrlr_get_default_io_qpair` without also connecting the qpair 254485f72985SSeth Howellwithin the context of that call. 254585f72985SSeth Howell 254685f72985SSeth HowellAs a result of the `create_only` flag, two new API functions, `spdk_nvme_ctrlr_connect_io_qpair` 254785f72985SSeth Howelland `spdk_nvme_ctrlr_disconnect_io_qpair`, have been added to facilitate connecting newly created 254885f72985SSeth Howellqpairs (for example, after they have been added to a poll group) and disconnecting qpairs without 254985f72985SSeth Howelldestroying them (for example to disconnect a qpair before migrating it to a new poll group and 255085f72985SSeth Howellreconnecting it). 255185f72985SSeth Howell 255285f72985SSeth HowellThe functions `spdk_nvme_ctrlr_alloc_cmb_io_buffer` and `spdk_nvme_ctrlr_free_cmb_io_buffer` 255385f72985SSeth Howellhave been changed to `spdk_nvme_ctrlr_map_cmb` and `spdk_nvme_ctrlr_unmap_cmb` respectively. 255485f72985SSeth Howell 255585f72985SSeth HowellAn additional function, `spdk_nvme_ctrlr_reserve_cmb`, has been added to facilitate reserving 255685f72985SSeth Howellthe entire size of the controller memory buffer for data transfer. 255785f72985SSeth Howell 255885f72985SSeth Howell### nvme_cuse 255985f72985SSeth Howell 256085f72985SSeth Howell`spdk_nvme_cuse_get_ctrlr_name` now takes two additional parameters, `char *name` which 256185f72985SSeth Howellstores the pointer to the controller name, and `size_t *size` which stores the length of 256285f72985SSeth Howellthe name. The return type has also been changed from char * to int. 256385f72985SSeth Howell 256485f72985SSeth Howell`spdk_nvme_cuse_get_ns_name` now takes two additional parameters, `char *name` which 256585f72985SSeth Howellstores the pointer to the namespace name, and `size_t *size` which stores the length of 256685f72985SSeth Howellthe name. The return type has also been changed from char * to int. 256785f72985SSeth Howell 256885f72985SSeth Howell### nvme_opal 256985f72985SSeth Howell 257085f72985SSeth HowellSeveral public OPAL structure definitions have been changed since the last release. 257185f72985SSeth Howell 25722fa51eebSShuhei Matsumoto### nvmf 257374e5708bSShuhei Matsumoto 25742fa51eebSShuhei Matsumoto`spdk_nvmf_poll_group_destroy()` is now asynchronous and accepts a completion callback. 25752fa51eebSShuhei Matsumoto 257674e5708bSShuhei MatsumotoThe NVMe-oF target now creates a lightweight thread per poll group instead of assuming a pool 257774e5708bSShuhei Matsumotoof lightweight threads already exist at start up time. A poll group is a collection of 257874e5708bSShuhei Matsumotounrelated NVMe-oF connections. Each poll group is only accessed from the associated 257974e5708bSShuhei Matsumotolightweight thread. 258074e5708bSShuhei Matsumoto 258185f72985SSeth HowellA new struct, `spdk_nvmf_subsystem_listener`, has been added to encapsulate the subsystem specific 258285f72985SSeth Howellnature of a listener object. 258385f72985SSeth Howell 258485f72985SSeth Howell`spdk_nvmf_tgt_listen` no longer accepts a callback function or argument. It also returns an 258585f72985SSeth Howellint to indicate the status of the listen call. 258685f72985SSeth Howell 258785f72985SSeth HowellThe execution of `spdk_nvme_poll_group_destroy` is now asynchronous and the function accepts 258885f72985SSeth Howella cb_fn and cb_arg to call upon completion. 258985f72985SSeth Howell 259085f72985SSeth HowellThe execution of `spdk_nvmf_subsystem_add_listener` is now asynchronous and the function accepts 259185f72985SSeth Howella cb_fn and cb_arg to call upon completion. 259285f72985SSeth Howell 259385f72985SSeth HowellThe `nvmf_transport.h` header has been made public to allow custom NVMe-oF transports to integrate 259485f72985SSeth Howellwith NVMe-oF libraries without using internal APIs. 259585f72985SSeth Howell 25966607e124SSeth Howell### ocf 25978e7d6e1bSDarek Stojaczyk 25986607e124SSeth HowellUpdated the OCF submodule to OCF v20.03 25998e7d6e1bSDarek Stojaczyk 26006607e124SSeth HowellNew version of OCF comes with API changes and bug fixes 2601ded6d2c7SShuhei Matsumoto 260274e5708bSShuhei Matsumoto### rpc 260374e5708bSShuhei Matsumoto 260474e5708bSShuhei MatsumotoA new RPC `thread_set_cpumask` has been added to set the cpumask of the thread 260574e5708bSShuhei Matsumototo the specified value. 260674e5708bSShuhei Matsumoto 26076607e124SSeth HowellA new RPC `thread_get_pollers` has been added to retrieve pollers from SPDK threads. 260874e5708bSShuhei Matsumoto 26096607e124SSeth HowellA new RPC `thread_get_io_channels` has been added to retrieve I/O channels from SPDK threads. 261074e5708bSShuhei Matsumoto 26116607e124SSeth HowellA new RPC `bdev_rbd_resize` has been added to resize Ceph RBD bdevs. 26126607e124SSeth Howell 26136607e124SSeth Howell### sock 26146607e124SSeth Howell 26156607e124SSeth HowellThe `spdk_sock_set_priority` function has been removed since the feature to set the sock priority 26166607e124SSeth Howellwill be contained in two new functions, i.e., `spdk_sock_listen_ext` and `spdk_sock_connect_ext`. 26176607e124SSeth HowellUsers may now specify the priority of the socket in the opts that they want to use. 26186a29c6a9SLiang Yan 261985f72985SSeth Howell### spdk_top 262085f72985SSeth Howell 262185f72985SSeth HowellA new application, `spdk_top`, has been added which allows users to monitor resource consumption 262285f72985SSeth Howellby a running SPDK application. More information on this application can be found in 262385f72985SSeth Howell`app/spdk_top/README`. 262485f72985SSeth Howell 262574e5708bSShuhei Matsumoto### thread 262674e5708bSShuhei Matsumoto 262774e5708bSShuhei MatsumotoA new function `spdk_thread_lib_init_ext` has been added, and the function 262874e5708bSShuhei Matsumoto`spdk_thread_lib_init` has been deprecated. The user of `spdk_thread_lib_init_ext` is 262974e5708bSShuhei Matsumotoexpected to implement both functions `spdk_thread_op_fn` and `spdk_thread_op_supported_fn`. 263074e5708bSShuhei Matsumoto`spdk_thread_op_supported_fn` is called to check whether the SPDK thread operation 263174e5708bSShuhei Matsumotois supported. `spdk_thread_op_fn` is called to execute the SPDK thread operation. 263274e5708bSShuhei MatsumotoCurrent SPDK operation types are `SPDK_THREAD_OP_NEW` and `SPDK_THREAD_OP_RESCHED`. 263374e5708bSShuhei MatsumotoThe operation `SPDK_THREAD_OP_NEW` is called each time a new thread is created. 263474e5708bSShuhei MatsumotoThe operation `SPDK_THREAD_OP_RESCHED` is called when SPDK thread needs to be rescheduled. 263574e5708bSShuhei Matsumoto 26366607e124SSeth HowellA unique ID has been added for each created SPDK thread, it is retrieved by a new function 263774e5708bSShuhei Matsumoto`spdk_thread_get_id`, and the SPDK thread which has the specific ID is got by 263874e5708bSShuhei Matsumotoa new function `spdk_thread_get_by_id`. 263974e5708bSShuhei Matsumoto 264074e5708bSShuhei MatsumotoA new function `spdk_thread_cpumask` has been added to set the current thread's cpumask 264174e5708bSShuhei Matsumototo the specified value. The function requires the operation `SPDK_THREAD_OP_RESCHED` 264274e5708bSShuhei Matsumotois supported. 264374e5708bSShuhei Matsumoto 264474e5708bSShuhei MatsumotoA new function `spdk_poller_register_named` has been added to set arbitrary name to the 264574e5708bSShuhei Matsumotocreated poller. If NULL, the name is set to the pointer of the poller function. 264674e5708bSShuhei Matsumoto 264774e5708bSShuhei MatsumotoThe function `spdk_thread_poll` now measures run time per call correctly on multiple SPDK 264874e5708bSShuhei Matsumotothreads configuration, and a new function `spdk_thread_get_last_tsc` has been added to use together. 264974e5708bSShuhei Matsumoto 265074e5708bSShuhei MatsumotoVoluntary termination of SPDK thread has been supported by refining the functions `spdk_thread_exit` 265174e5708bSShuhei Matsumotoand `spdk_thread_poll`. 265274e5708bSShuhei Matsumoto 26536607e124SSeth Howell### util 26546607e124SSeth Howell 26556607e124SSeth HowellNew functions `spdk_sn32_lt` and `spdk_sn32_gt` have been added. They compare two sequence 26566607e124SSeth Howellnumbers based on serial number arithmetic. 26576607e124SSeth Howell 265874e5708bSShuhei Matsumoto### vhost 265974e5708bSShuhei Matsumoto 266074e5708bSShuhei MatsumotoPoll groups per session have been replaced by SPDK threads per vhost controller. 266174e5708bSShuhei Matsumoto 26626607e124SSeth Howell### vmd 26638ad1f4bfSZiye Yang 26646607e124SSeth HowellA new function, `spdk_vmd_fini`, has been added. It releases all resources acquired by the VMD 26656607e124SSeth Howelllibrary through the `spdk_vmd_init` call. 26668ad1f4bfSZiye Yang 266752aaee43STomasz Zawadzki## v20.01: Optimized thin provisioning, FTL bdev, VMD hot plug, FUSED support 2668583f4063STomasz Zawadzki 266964021521SSeth Howell### bdev 267064021521SSeth Howell 267164021521SSeth HowellA new function, `spdk_bdev_set_timeout`, has been added to set per descriptor I/O timeouts. 267264021521SSeth Howell 267364021521SSeth HowellA new class of functions `spdk_bdev_compare*`, have been added to allow native bdev support 267464021521SSeth Howellof block comparisons and compare-and-write. 267564021521SSeth Howell 267664021521SSeth HowellA new class of bdev events, `SPDK_BDEV_EVENT_MEDIA_MANAGEMENT`, has been added to allow bdevs 267764021521SSeth Howellwhich expose raw media to alert all I/O channels of pending media management events. 267864021521SSeth Howell 267964021521SSeth HowellA new API was added `spdk_bdev_io_get_aux_buf` allowing the caller to request 268064021521SSeth Howellan auxiliary buffer for its own private use. The API is used in the same manner that 268164021521SSeth Howell`spdk_bdev_io_get_buf` is used and the length of the buffer is always the same as the 268264021521SSeth Howellbdev_io primary buffer. 'spdk_bdev_io_put_aux_buf' frees the allocated auxiliary 268364021521SSeth Howellbuffer. 268464021521SSeth Howell 2685967fa2d7SSeth Howell### blobfs 2686967fa2d7SSeth Howell 2687967fa2d7SSeth HowellAdded boolean return value for function spdk_fs_set_cache_size to indicate its operation result. 2688967fa2d7SSeth Howell 2689967fa2d7SSeth HowellAdded `blobfs_set_cache_size` RPC method to set cache size for blobstore filesystem. 2690967fa2d7SSeth Howell 2691353252b1STomasz Zawadzki### blobstore 2692353252b1STomasz Zawadzki 2693353252b1STomasz ZawadzkiAdded new `use_extent_table` option to `spdk_blob_opts` for creating blobs with Extent Table descriptor. 2694353252b1STomasz ZawadzkiUsing this metadata format, dramatically decreases number of writes required to persist each cluster allocation 2695353252b1STomasz Zawadzkifor thin provisioned blobs. Extent Table descriptor is enabled by default. 2696353252b1STomasz ZawadzkiSee the [Blobstore Programmer's Guide](https://spdk.io/doc/blob.html#blob_pg_cluster_layout) for more details. 2697353252b1STomasz Zawadzki 2698967fa2d7SSeth Howell### dpdk 2699967fa2d7SSeth Howell 2700967fa2d7SSeth HowellUpdated DPDK submodule to DPDK 19.11. 2701967fa2d7SSeth Howell 2702967fa2d7SSeth Howell### env_dpdk 2703967fa2d7SSeth Howell 2704967fa2d7SSeth Howell`spdk_env_dpdk_post_init` now takes a boolean, `legacy_mem`, as an argument. 2705967fa2d7SSeth Howell 2706967fa2d7SSeth HowellA new function, `spdk_env_dpdk_dump_mem_stats`, prints information about the memory consumed by DPDK to a file specified by 2707967fa2d7SSeth Howellthe user. A new utility, `scripts/dpdk_mem_info.py`, wraps this function and prints the output in an easy to read way. 2708967fa2d7SSeth Howell 2709967fa2d7SSeth Howell### event 2710967fa2d7SSeth Howell 2711967fa2d7SSeth HowellThe functions `spdk_reactor_enable_framework_monitor_context_switch()` and 2712967fa2d7SSeth Howell`spdk_reactor_framework_monitor_context_switch_enabled()` have been changed to 2713967fa2d7SSeth Howell`spdk_framework_enable_context_switch_monitor()` and 2714967fa2d7SSeth Howell`spdk_framework_context_switch_monitor_enabled()`, respectively. 2715967fa2d7SSeth Howell 271679fc6ed2SWojciech Malikowski### ftl 271779fc6ed2SWojciech Malikowski 271879fc6ed2SWojciech MalikowskiAll NVMe dependencies were removed from ftl library. 271979fc6ed2SWojciech MalikowskiFrom now ftl library is using bdev_zone API. 272079fc6ed2SWojciech Malikowskibdev_ftl becomes virtual bdev. 272179fc6ed2SWojciech Malikowski 272279fc6ed2SWojciech Malikowski`ctrlr` and `trid` fields in `spdk_ftl_dev_init_opts` structure were replaced by 272379fc6ed2SWojciech Malikowski`base_bdev_desc`. 272479fc6ed2SWojciech Malikowski 272579fc6ed2SWojciech Malikowski`bdev_ftl_create` RPC method `trtype` and `traddr` parameters were replaced by `base_bdev` 272679fc6ed2SWojciech Malikowskiparameter. 272779fc6ed2SWojciech Malikowski 272879fc6ed2SWojciech Malikowski`spdk_ftl_module_init` and `spdk_ftl_module_fini` functions were removed. 272979fc6ed2SWojciech Malikowski 273079fc6ed2SWojciech Malikowski`spdk_ftl_punit_range` and `ftl_module_init_opts` structures were removed. 273179fc6ed2SWojciech Malikowski 27329889ab2dSRichael Zhuang### isa-l 27339889ab2dSRichael Zhuang 27349889ab2dSRichael ZhuangUpdated ISA-L submodule to commit f3993f5c0b6911 which includes implementation and 27359889ab2dSRichael Zhuangoptimization for aarch64. 27369889ab2dSRichael Zhuang 27378cad9cc1SRichael ZhuangEnabled ISA-L on aarch64 by default in addition to x86. 27388cad9cc1SRichael Zhuang 2739967fa2d7SSeth Howell### nvme 27404036f95bSJim Harris 2741967fa2d7SSeth Howell`delayed_pcie_doorbell` parameter in `spdk_nvme_io_qpair_opts` was renamed to `delay_cmd_submit` 2742967fa2d7SSeth Howellto allow reuse in other transports. 274364021521SSeth Howell 2744967fa2d7SSeth HowellAdded RDMA WR batching to NVMf RDMA initiator. Send and receive WRs are chained together 2745967fa2d7SSeth Howelland posted with a single call to ibv_post_send(receive) in the next call to qpair completion 2746967fa2d7SSeth Howellprocessing function. Batching is controlled by 'delay_cmd_submit' qpair option. 274764021521SSeth Howell 2748967fa2d7SSeth HowellThe NVMe-oF initiator now supports plugging out of tree NVMe-oF transports. In order 2749967fa2d7SSeth Howellto facilitate this feature, several small API changes have been made: 27504036f95bSJim Harris 2751967fa2d7SSeth HowellThe `spdk_nvme_transport_id` struct now contains a trstring member used to identify the transport. 2752967fa2d7SSeth HowellA new function, `spdk_nvme_transport_available_by_name`, has been added. 2753967fa2d7SSeth HowellA function table, `spdk_nvme_transport_ops`, and macro, `SPDK_NVME_TRANSPORT_REGISTER`, have been added which 2754967fa2d7SSeth Howellenable registering out of tree transports. 27552f249aceSXiaodong Liu 2756967fa2d7SSeth HowellA new function, `spdk_nvme_ns_supports_compare`, allows a user to check whether a given namespace supports the compare 2757967fa2d7SSeth Howelloperation. 27582f249aceSXiaodong Liu 2759967fa2d7SSeth HowellA new family of functions, `spdk_nvme_ns_compare*`, give the user access to submitting compare commands to NVMe namespaces. 2760967fa2d7SSeth Howell 2761967fa2d7SSeth HowellA new function, `spdk_nvme_ctrlr_cmd_get_log_page_ext`, gives users more granular control over the command dwords sent in 2762967fa2d7SSeth Howelllog page requests. 2763138e6daeSXiaodong Liu 2764c3227517SZiye Yang### nvmf 2765c3227517SZiye Yang 2766c3227517SZiye YangAdd SockPriority option in [Transport] section, this can be used for NVMe-oF target 2767a2f0b6e4SJosh Sorefon TCP transport to set sock priority for the incoming TCP connections. 2768c3227517SZiye Yang 276974304315SSeth HowellThe NVMe-oF target now supports plugging out of tree NVMe-oF transports. In order 277074304315SSeth Howellto facilitate this feature, several small API changes have been made: 277174304315SSeth Howell 277274304315SSeth HowellThe `spdk_nvme_transport_id` struct now contains a trstring member used to identify the transport. 277374304315SSeth Howell`spdk_nvmf_tgt_get_transport`, `spdk_nvmf_transport_opts_init`, and `spdk_nvmf_transport_create` all have been 277474304315SSeth Howellmodified to take a string. 277574304315SSeth HowellA function table, `spdk_nvmf_transport_ops`, and macro, `SPDK_NVMF_TRANSPORT_REGISTER`, have been added which 277674304315SSeth Howellenable registering out of tree transports. 277774304315SSeth Howell 27782167c68dSJan KrylAdd `spdk_nvmf_tgt_stop_listen()` that can be used to stop listening for 27792167c68dSJan Krylincoming connections for specified target and trid. Listener is not stopped 27802167c68dSJan Krylimplicitly upon destruction of a subsystem any more. 278174304315SSeth Howell 278264021521SSeth HowellA custom NVMe admin command handler has been added which allows the user to use the real drive 278364021521SSeth Howellattributes from one of the target NVMe drives when reporting drive attributes to the initiator. 278464021521SSeth HowellThis handler can be enabled via the `nvmf_set_config` RPC. 278564021521SSeth HowellNote: In a future version of SPDK, this handler will be enabled by default. 278664021521SSeth Howell 278764021521SSeth HowellThe SPDK target and initiator both now include compare-and-write functionality with one caveat. If using the RDMA transport, 278864021521SSeth Howellthe target expects the initiator to send both the compare command and write command either with, or without inline data. The 278964021521SSeth HowellSPDK initiator currently respects this requirement, but this note is included as a flag for other initiators attempting 279064021521SSeth Howellcompatibility with this version of SPDK. 279164021521SSeth Howell 279294966468SAlexey MarchukThe `spdk_nvme_ctrlr_opts` struct has been extended with new field `transport_ack_timeout` which allows 279394966468SAlexey Marchukto configure transport ACK timeout. Applicable for RDMA transport only. 279494966468SAlexey Marchuk 2795542be879SEvgeniy Kochetov### rpc 2796542be879SEvgeniy Kochetov 279764021521SSeth HowellA new RPC, `bdev_zone_block_create`, enables creating an emulated zoned bdev on top of a standard block device. 2798542be879SEvgeniy Kochetov 279964021521SSeth HowellA new RPC, `bdev_ocssd_create`, enables creating an emulated zoned bdev on top of an Open Channel SSD. 280064021521SSeth Howell 280164021521SSeth HowellA new RPC, `blobfs_set_cache_size`, enables managing blobfs cache size. 280264021521SSeth Howell 280364021521SSeth HowellA new RPC, `env_dpdk_get_mem_stats`, has been added to facilitate reading DPDK related memory 280464021521SSeth Howellconsumption stats. Please see the env_dpdk section above for more details. 280564021521SSeth Howell 280664021521SSeth HowellA new RPC, `framework_get_reactors`, has been added to retrieve a list of all reactors. 280764021521SSeth Howell 280864021521SSeth Howell`bdev_ftl_create` now takes a `base_bdev` argument in lieu of `trtype`, `traddr`, and `punits`. 280964021521SSeth Howell 281064021521SSeth Howell`bdev_nvme_set_options` now allows users to disable I/O submission batching with the `-d` flag 281164021521SSeth Howell 281264021521SSeth Howell`bdev_nvme_cuse_register` now accepts a `name` parameter. 281364021521SSeth Howell 281464021521SSeth Howell`bdev_uring_create` now takes arguments for `bdev_name` and `block_size` 281564021521SSeth Howell 281664021521SSeth Howell`nvmf_set_config` now takes an argument to enable passthru of identify commands to base NVMe devices. 281764021521SSeth HowellPlease see the nvmf section above for more details. 2818876fdf2aSShuhei Matsumoto 2819967fa2d7SSeth Howell### scsi 2820c4acbcb7STomasz Zawadzki 2821967fa2d7SSeth Howell`spdk_scsi_lun_get_dif_ctx` now takes an additional argument of type `spdk_scsi_task`. 2822c4acbcb7STomasz Zawadzki 2823967fa2d7SSeth Howell### sock 282464021521SSeth Howell 2825967fa2d7SSeth HowellAdded spdk_sock_writev_async for performing asynchronous writes to sockets. This call will 2826967fa2d7SSeth Howellnever return EAGAIN, instead queueing internally until the data has all been sent. This can 2827967fa2d7SSeth Howellsimplify many code flows that create pollers to continue attempting to flush writes 2828967fa2d7SSeth Howellon sockets. 282964021521SSeth Howell 2830967fa2d7SSeth HowellAdded `impl_name` parameter in spdk_sock_listen and spdk_sock_connect functions. Users may now 2831967fa2d7SSeth Howellspecify the sock layer implementation they'd prefer to use. Valid implementations are currently 2832967fa2d7SSeth Howell"vpp" and "posix" and NULL, where NULL results in the previous behavior of the functions. 283364021521SSeth Howell 2834967fa2d7SSeth Howell### thread 283525c5e3f5SShuhei Matsumoto 2836967fa2d7SSeth Howell`spdk_thread_send_msg` now returns int indicating if the message was successfully 2837967fa2d7SSeth Howellsent. 2838967fa2d7SSeth Howell 2839967fa2d7SSeth HowellA new function `spdk_thread_send_critical_msg`, has been added to support sending a single message from 2840967fa2d7SSeth Howella context that may be interrupted, e.g. a signal handler. 2841967fa2d7SSeth Howell 2842967fa2d7SSeth HowellTwo new functions, `spdk_poller_pause`, and `spdk_poller_resume`, have been added to give greater control 2843967fa2d7SSeth Howellof pollers to the application owner. 2844967fa2d7SSeth Howell 2845967fa2d7SSeth Howell### util 2846967fa2d7SSeth Howell 2847967fa2d7SSeth Howell`spdk_pipe`, a new utility for buffering data from sockets or files for parsing 2848967fa2d7SSeth Howellhas been added. The public API is available at `include/spdk/pipe.h`. 284925c5e3f5SShuhei Matsumoto 2850adf90938SMaciej Szwed### bdev 2851adf90938SMaciej Szwed 2852adf90938SMaciej SzwedAdded spdk_bdev_io_get_nvme_fused_status function for translating bdev_io status to NVMe status 2853adf90938SMaciej Szwedcode for fused compare-and-write operation. 2854adf90938SMaciej Szwed 2855c1373391SMaciej SzwedAdded spdk_bdev_get_acwu function for getting block device atomic compare and write unit size. 2856c1373391SMaciej Szwed 285752aaee43STomasz Zawadzki## v19.10: Zoned bdev API, Opal bdev, NVMe character devices 28587fd404ddSTomasz Zawadzki 2859456d60a7STomasz Zawadzki### rpc 2860456d60a7STomasz Zawadzki 2861456d60a7STomasz ZawadzkiMany of SPDK's RPCs were renamed to be more consistent and intuitive in this release. 2862456d60a7STomasz ZawadzkiThe old names will continue to function, but will display a deprecation warning. 2863456d60a7STomasz Zawadzki 2864456d60a7STomasz ZawadzkiAdded optional parameters '--arbitration-burst' and '--low/medium/high-priority-weight' to 2865456d60a7STomasz Zawadzki'bdev_nvme_set_options' RPC method. 2866456d60a7STomasz Zawadzki 2867456d60a7STomasz ZawadzkiAdded optional parameter '--md-size' to 'construct_null_bdev' RPC method. 2868456d60a7STomasz Zawadzki 2869456d60a7STomasz ZawadzkiAdded optional parameters '--dif-type' and '--dif-is-head-of-md' to 'construct_null_bdev' 2870456d60a7STomasz ZawadzkiRPC method. 2871456d60a7STomasz Zawadzki 2872456d60a7STomasz ZawadzkiAdded `blobfs_detect` RPC method to detect whether a blobfs exists on given bdev. 2873456d60a7STomasz Zawadzki 2874456d60a7STomasz ZawadzkiAdded `blobfs_create` RPC method to build blobfs on given bdev. 2875456d60a7STomasz Zawadzki 2876456d60a7STomasz ZawadzkiAdded `blobfs_mount` RPC method to mount blobfs on given bdev to a host path by FUSE. 2877456d60a7STomasz ZawadzkiThen on the host path, user can directly do some file operations which will be mapped 2878456d60a7STomasz Zawadzkito blobfs. 2879456d60a7STomasz Zawadzki 288053b92a6cSMichael Haeuptle### bdev 288153b92a6cSMichael Haeuptle 288253b92a6cSMichael HaeuptleAdded new parameter `cdw0` to `spdk_bdev_io_complete_nvme_status()` and 288353b92a6cSMichael Haeuptle`spdk_bdev_io_get_nvme_status()` that allows setting/getting 288453b92a6cSMichael Haeuptlethe NVMe completion queue DW0 entry. This allows vendor specific IO commands 2885a2f0b6e4SJosh Sorefto return command specific completion info back to the initiator. 288653b92a6cSMichael Haeuptle 2887cc25bd4aSTomasz ZawadzkiAdded `spdk_bdev_get_write_unit_size()` function for retrieving required number 2888cc25bd4aSTomasz Zawadzkiof logical blocks for write operation. 2889173353baSChunyang Hui 2890cc25bd4aSTomasz ZawadzkiNew zone-related fields were added to the result of the `get_bdevs` RPC call: 28913d8a0b19SKarol Latecki 2892cc25bd4aSTomasz Zawadzki- `zoned`: indicates whether the device is zoned or a regular 2893cc25bd4aSTomasz Zawadzki block device 2894cc25bd4aSTomasz Zawadzki- `zone_size`: number of blocks in a single zone 2895cc25bd4aSTomasz Zawadzki- `max_open_zones`: maximum number of open zones 2896cc25bd4aSTomasz Zawadzki- `optimal_open_zones`: optimal number of open zones 28973d8a0b19SKarol Latecki 2898cc25bd4aSTomasz ZawadzkiThe `zoned` field is a boolean and is always present, while the rest is only available for zoned 2899cc25bd4aSTomasz Zawadzkibdevs. 2900cc25bd4aSTomasz Zawadzki 2901808ad5f3STomasz ZawadzkiA new `spdk_bdev_open_ext` function has been added and `spdk_bdev_open` function has been deprecated. 2902cc25bd4aSTomasz ZawadzkiThe new open function introduces requirement to provide callback function that will be called by 2903808ad5f3STomasz Zawadzkiasynchronous event such as bdev removal. `spdk_bdev_open_ext` function takes bdev name as 2904cc25bd4aSTomasz Zawadzkian argument instead of bdev structure to avoid a race condition that can happen when the bdev 29053f912cf0SMichal Bergeris being removed between a call to get its structure based on a name and actually opening it. 2906cc25bd4aSTomasz Zawadzki 2907cc25bd4aSTomasz ZawadzkiNew 'resize' event has been added to notify about change of block count property of block device. 2908808ad5f3STomasz ZawadzkiEvent is delivered only if block device was opened with `spdk_bdev_open_ext` function. 2909173353baSChunyang Hui 29103b2993d1SWojciech Malikowski### bdev zone 29113b2993d1SWojciech Malikowski 29123b2993d1SWojciech MalikowskiAdded new public header for zoned bdev. Zoned bdev is an extension 29133b2993d1SWojciech Malikowskiof the bdev interface. 29143b2993d1SWojciech Malikowski 29153b2993d1SWojciech Malikowski`spdk_bdev_get_zone_size()`, `spdk_bdev_get_max_open_zones()`, `spdk_bdev_get_optimal_open_zones()` 29163b2993d1SWojciech MalikowskiAPIs were added for retrieving zoned device information. 29173b2993d1SWojciech Malikowski`spdk_bdev_get_zone_info()` API was added for retrieving information about zones in zoned 29183b2993d1SWojciech Malikowskidevice. 29193b2993d1SWojciech MalikowskiAdded `spdk_bdev_zone_management()` API for changing zone state. 29203b2993d1SWojciech Malikowski`spdk_bdev_zone_append()` and `spdk_bdev_zone_append_with_md()` APIs were added for 29213b2993d1SWojciech Malikowskiappending data to a zone. 29223b2993d1SWojciech MalikowskiAdded `spdk_bdev_io_get_append location()` function for retrieving append location for I/O. 2923808ad5f3STomasz ZawadzkiAdded `spdk_bdev_is_zoned()` function for checking if bdev supports zoned namespace semantics. 29243b2993d1SWojciech Malikowski 2925cc25bd4aSTomasz Zawadzki### bdev opal 292618ed0c7fSWojciech Malikowski 2927cc25bd4aSTomasz ZawadzkiEXPERIMENTAL: A new opal bdev has been added to support management of 2928cc25bd4aSTomasz ZawadzkiNVMe self-encrypting drives through the Opal specification. Users can 2929cc25bd4aSTomasz Zawadzkicreate opal bdevs from an NVMe namespace bdev, if the controller 2930cc25bd4aSTomasz Zawadzkicontaining that namespace supports Opal. Currently this is only 2931cc25bd4aSTomasz Zawadzkisupported for namespace ID=1. The following RPCs have been added to 2932cc25bd4aSTomasz Zawadzkisupport Opal: `bdev_nvme_opal_init`, `bdev_nvme_opal_revert`, 2933cc25bd4aSTomasz Zawadzki`bdev_opal_create`, `bdev_opal_delete`, `bdev_opal_get_info`, 2934cc25bd4aSTomasz Zawadzki`bdev_opal_new_user`, `bdev_opal_set_lock_state`. 2935cc25bd4aSTomasz ZawadzkiIt does not yet support recreating the opal bdevs after application restart. 2936cc25bd4aSTomasz ZawadzkiThis bdev module should be considered very experimental, and the RPCs may 2937cc25bd4aSTomasz Zawadzkichange significantly in future releases. 293818ed0c7fSWojciech Malikowski 2939cc25bd4aSTomasz Zawadzki### delay bdev 2940c94ecfaeSKonrad Sztyber 2941cc25bd4aSTomasz ZawadzkiThe `bdev_delay_update_latency` has been added to allow users to update 2942cc25bd4aSTomasz Zawadzkia latency value for a given delay bdev. 29437d6d95dbSSeth Howell 2944cc25bd4aSTomasz Zawadzki### compress bdev 29457d6d95dbSSeth Howell 2946cc25bd4aSTomasz ZawadzkiA new RPC `bdev_compress_get_orphans` has been added to list compress bdevs 2947cc25bd4aSTomasz Zawadzkithat were not loaded due to a missing pm metadata file. In this state they 2948cc25bd4aSTomasz Zawadzkican only be deleted. 294979d87671SSeth Howell 2950cc25bd4aSTomasz Zawadzki### null bdev 2951f8433aadSSeth Howell 2952cc25bd4aSTomasz ZawadzkiMetadata support has been added to Null bdev module. 2953208e089aSSeth Howell 2954cc25bd4aSTomasz ZawadzkiProtection information support has been added to Null bdev module. 29557fa15e28SXiaodong Liu 29562226750aSChangpeng Liu### nvme 29572226750aSChangpeng Liu 29582226750aSChangpeng LiuAdded `no_shn_notification` to NVMe controller initialization options, users can enable 29592226750aSChangpeng Liuit for NVMe controllers. When the option is enabled, the controller will not do the 29602226750aSChangpeng Liushutdown process and just disable the controller, users can start their application 29612226750aSChangpeng Liulater again to initialize the controller to the ready state. 29622226750aSChangpeng Liu 29636ad44e8bSChangpeng LiuA controller flag `SPDK_NVME_CTRLR_WRR_SUPPORTED` was added to indicate the controller 29646ad44e8bSChangpeng Liucan support weighted round robin arbitration feature with submission queue. 29656ad44e8bSChangpeng Liu 2966acb9849cSChangpeng LiuAdded `arbitration_burst` option for arbitration feature, and added three 2967acb9849cSChangpeng Liu`low/medium/high_priority_weight` options for weighted round robin arbitration. 2968acb9849cSChangpeng Liu 29696bcd3588SBenjamin SaundersAdded `spdk_nvme_ns_cmd_write_uncorrectable`. 29706bcd3588SBenjamin Saunders 2971eafc447eSSeth HowellAdded new error handling and reporting functionality. This includes several 2972eafc447eSSeth Howellnew API functions to facilitate applications recovering when a qpair or 2973eafc447eSSeth Howellcontroller fails. 2974eafc447eSSeth Howell 2975eafc447eSSeth Howell`spdk_nvme_ctrlr_reconnect_io_qpair` - Reconnects a failed I/O qpair. 2976eafc447eSSeth Howell`spdk_nvme_ctrlr_set_trid` - Sets the trid of an existing controller. Can be used to 2977eafc447eSSeth Howellchange the trid for failover cases. 2978eafc447eSSeth Howell`spdk_nvme_ctrlr_is_failed` - Returns the failed state of a controller. 2979eafc447eSSeth Howell`spdk_nvme_ctrlr_fail` - Forces a controller into a failed state. 2980eafc447eSSeth Howell 2981eafc447eSSeth HowellModified the return behavior of several API functions to better indicate to 2982eafc447eSSeth Howellapplications when a qpair is failed. This list of functions includes: 2983eafc447eSSeth Howell 2984eafc447eSSeth Howell`spdk_nvme_qpair_process_completions` 2985eafc447eSSeth Howell`spdk_nvme_ns_cmd_*` 2986eafc447eSSeth Howell`spdk_nvme_ctrlr_process_admin_completions` 2987eafc447eSSeth Howell`spdk_nvme_ctrlr_cmd_*` 2988eafc447eSSeth Howell 2989eafc447eSSeth HowellThese functions now return -ENXIO when the qpair or controller on which they 2990eafc447eSSeth Howelloperate is failed. 2991eafc447eSSeth Howell 2992e9b5bef8STomasz ZawadzkiEXPERIMENTAL: Added NVMe character device support to allow to create NVMe device nodes in Linux 2993e9b5bef8STomasz Zawadzkikernel for controller as well as for namespace and process ioctl requests as usual 2994e9b5bef8STomasz Zawadzkifrom linux environment. 2995e9b5bef8STomasz Zawadzki 2996cc25bd4aSTomasz Zawadzki### nvmf 2997cc25bd4aSTomasz Zawadzki 2998cc25bd4aSTomasz ZawadzkiThe `spdk_nvmf_tgt_create` function now accepts an object of type `spdk_nvmf_target_opts` 2999cc25bd4aSTomasz Zawadzkias its only parameter. This new structure contains the max_subsystems parameter previously 3000cc25bd4aSTomasz Zawadzkipassed into that function. 3001cc25bd4aSTomasz Zawadzki 3002cc25bd4aSTomasz ZawadzkiA new public API function `spdk_nvmf_get_tgt` has been added which allows users to 3003cc25bd4aSTomasz Zawadzkiretrieve a pointer to an `spdk_nvmf_tgt` object by supplying its name. In the special 3004cc25bd4aSTomasz Zawadzkicase where an RPC or application only creates a single target, this function can accept 3005cc25bd4aSTomasz Zawadzkia null name parameter and will return the only available target. 3006cc25bd4aSTomasz Zawadzki 3007cc25bd4aSTomasz ZawadzkiThe majority of the NVMe-oF RPCs now accept an optional tgt_name parameter. This will 3008cc25bd4aSTomasz Zawadzkiallow those RPCs to work with applications that create more than one target. 3009cc25bd4aSTomasz Zawadzki 3010cc25bd4aSTomasz ZawadzkiThree new NVMe-oF RPCs have been added `nvmf_create_target`, `nvmf_delete_target`, and 3011cc25bd4aSTomasz Zawadzki`nvmf_get_targets`. These new RPCs provide a basic interface for managing multiple target 3012cc25bd4aSTomasz Zawadzkiobjects. In SPDK the target object defines a unique discovery service. As of this release, 3013cc25bd4aSTomasz Zawadzkithese RPCs are not intended to be used with the in-tree SPDK target applications, spdk_tgt and 3014cc25bd4aSTomasz Zawadzkinvmf_tgt, which use a single, global target structure. As such, they are not included in scripts/rpc.py 3015cc25bd4aSTomasz Zawadzki 3016cc25bd4aSTomasz ZawadzkiThree new header functions have also been added to help deal with multiple targets. 3017cc25bd4aSTomasz Zawadzki`spdk_nvmf_tgt_get_name` takes a target pointer as an argument and returns its human readable name. 3018cc25bd4aSTomasz Zawadzki`spdk_nvmf_get_first_target` takes no arguments and returns the first target in the global list. 3019cc25bd4aSTomasz Zawadzki`spdk_nvmf_get_next_tgt` takes a target pointer as an argument and returns the next one in the global list. 3020cc25bd4aSTomasz Zawadzki 3021cc25bd4aSTomasz ZawadzkiThe `spdk_nvmf_tgt_accept` takes additional argument allowing to pass arbitrary context 3022cc25bd4aSTomasz Zawadzkiinformation to the `new_qpair` callback. This will simplify the code when having multiple 3023cc25bd4aSTomasz Zawadzkinvmf targets or when retrieving the context information from globals is not suitable. 3024cc25bd4aSTomasz Zawadzki 3025cc25bd4aSTomasz Zawadzki### blobstore 3026cc25bd4aSTomasz Zawadzki 3027808ad5f3STomasz ZawadzkiA new `spdk_bdev_create_bs_dev_from_desc` function has been added and `spdk_bdev_create_bs_dev` 3028cc25bd4aSTomasz Zawadzkifunction has been deprecated. 3029808ad5f3STomasz ZawadzkiThe new create function can cowork with `spdk_bdev_open_ext` function, which provides callback 3030cc25bd4aSTomasz Zawadzkifunction that will be called by asynchronous event such as bdev removal. 3031cc25bd4aSTomasz Zawadzki 3032cc25bd4aSTomasz Zawadzki### blobfs_bdev 3033cc25bd4aSTomasz Zawadzki 3034cc25bd4aSTomasz ZawadzkiA new blobfs module `bdev` has been added to simplify the operations of blobfs on bdev. 3035cc25bd4aSTomasz Zawadzki 3036808ad5f3STomasz ZawadzkiFunction `spdk_blobfs_bdev_detect` is added to detect whether blobfs exists on the given block device. 3037cc25bd4aSTomasz Zawadzki 3038808ad5f3STomasz ZawadzkiFunction `spdk_blobfs_bdev_create` is added to create a blobfs on the given block device. 3039cc25bd4aSTomasz Zawadzki 3040808ad5f3STomasz ZawadzkiFunction `spdk_blobfs_bdev_mount` is added to mount a blobfs on the given block device to 3041cc25bd4aSTomasz Zawadzkia host path by FUSE. Then, a new thread is created dedicatedly for one mountpoint to handle 3042cc25bd4aSTomasz ZawadzkiFUSE request by blobfs API. 3043cc25bd4aSTomasz Zawadzki 3044cc25bd4aSTomasz Zawadzki### build 3045cc25bd4aSTomasz Zawadzki 3046cc25bd4aSTomasz ZawadzkiOption to build FUSE components into blobfs_bdev module for mounting a blobfs filesystem. 3047cc25bd4aSTomasz ZawadzkiIt requires the installation of libfuse3. By default, it is disabled. And it will be 3048cc25bd4aSTomasz Zawadzkienabled if run `./configure` with `--with-fuse` option. 3049cc25bd4aSTomasz Zawadzki 305039e850d1SBen Walker### iSCSI 305139e850d1SBen Walker 305239e850d1SBen WalkerPortals may no longer be associated with a cpumask. The scheduling of 305339e850d1SBen Walkerconnections is moving to a more dynamic model. 305439e850d1SBen Walker 30551aa8e4e5SShuhei MatsumotoAn new RPC `iscsi_portal_group_set_auth` has been added to set CHAP authentication 30561aa8e4e5SShuhei Matsumotofor discovery sessions specific for the existing iSCSI portal group. This RPC overwrites 30571aa8e4e5SShuhei Matsumotothe setting by the global parameters for the iSCSI portal group. 30581aa8e4e5SShuhei Matsumoto 3059808ad5f3STomasz Zawadzki### socket 3060808ad5f3STomasz Zawadzki 3061808ad5f3STomasz ZawadzkiAdded `spdk_sock_is_connected` to check whether the socket is currently connected. 3062808ad5f3STomasz Zawadzki`spdk_sock_group_poll` now returns number of events on success. 3063808ad5f3STomasz Zawadzki 3064808ad5f3STomasz Zawadzki### env 3065808ad5f3STomasz Zawadzki 3066808ad5f3STomasz ZawadzkiAdded `spdk_pci_device_unclaim()` function to cleanup pci claim file. 3067808ad5f3STomasz Zawadzki 3068b85881ecSTomasz Zawadzki### event 3069b85881ecSTomasz Zawadzki 3070808ad5f3STomasz Zawadzki`framework_start_init` RPC no longer stops the application on error during 3071b85881ecSTomasz Zawadzkiinitialization. 3072b85881ecSTomasz Zawadzki 3073cc25bd4aSTomasz Zawadzki### DPDK 3074cc25bd4aSTomasz Zawadzki 3075cc25bd4aSTomasz ZawadzkiUpdated DPDK submodule to DPDK 19.08. 3076cc25bd4aSTomasz Zawadzki 3077cc25bd4aSTomasz Zawadzki### ocf 3078cc25bd4aSTomasz Zawadzki 3079cc25bd4aSTomasz ZawadzkiUpdated OCF submodule to OCF v19.06 3080cc25bd4aSTomasz Zawadzki 3081cc25bd4aSTomasz ZawadzkiAlong with update, new cache mode 'write only' was added. 3082cc25bd4aSTomasz Zawadzki 3083cc25bd4aSTomasz ZawadzkiNew cache modes added to use via RPC, wi - write invalidate and wa - write around. 3084cc25bd4aSTomasz Zawadzki 3085cc25bd4aSTomasz ZawadzkiNew version of OCF provides fully asynchronous management API. 3086cc25bd4aSTomasz Zawadzki 308752aaee43STomasz Zawadzki## v19.07: NVMe-oF FC Transport, VMD, NVMe-oF Persistent reservations, Bdev I/O with separate metadata 3088e60cf7e4STomasz Zawadzki 30898491b937SWojciech Malikowski### ftl 30908491b937SWojciech Malikowski 30918491b937SWojciech MalikowskiEXPERIMENTAL: Added ability to mirror writes to persistent write buffer cache 30928491b937SWojciech Malikowskito allow for recovery from dirty shutdown event. 30938491b937SWojciech Malikowski 30948491b937SWojciech MalikowskiAdded handling of Asynchronous Nand Management Events (ANM). 30958491b937SWojciech Malikowski 30967c088787SWojciech Malikowski### vmd 30977c088787SWojciech Malikowski 30987c088787SWojciech MalikowskiEXPERIMENTAL: Added Intel Volume Management Device (VMD) driver. VMD is an integrated 30997c088787SWojciech Malikowskicontroller inside the CPU PCIe root complex. It enables virtual HBAs for the connected 31007c088787SWojciech MalikowskiNVMe SSDs. `spdk_vmd_init()` enumerates NVMe SSDs behind VMD device and hook them into 31017c088787SWojciech MalikowskiSPDK PCI subsystem. `spdk_nvme_probe()` or `spdk_nvme_connect()` can be used to connect 31027c088787SWojciech MalikowskiNVMe driver to the device located at the given transport ID. 31037c088787SWojciech Malikowski 31047c088787SWojciech MalikowskiTo obtain transport ID of NVMe SSD behind VMD `spdk_lspci` can be used. 31057c088787SWojciech Malikowski 31067c088787SWojciech MalikowskiCurrent implementation does not support hotplug. 31077c088787SWojciech Malikowski 31086c9b6abfSChangpeng Liu### blobfs 31096c9b6abfSChangpeng Liu 31106c9b6abfSChangpeng LiuBlobfs file asynchronous operations were added to public APIs. 31116c9b6abfSChangpeng Liu 3112ad8bd8e3SChangpeng Liu### util 3113ad8bd8e3SChangpeng Liu 3114ad8bd8e3SChangpeng LiuA new file API `spdk_posix_file_load` was added to load file content into a data buffer. 3115ad8bd8e3SChangpeng Liu 3116f84744e9SShuhei MatsumotoNew APIs `spdk_dif_ctx_set_data_offset`, `spdk_dif_verify_stream`, 3117f84744e9SShuhei Matsumoto`spdk_dif_get_range_with_md`, `spdk_dif_get_length_with_md` have been added, 3118f84744e9SShuhei Matsumotoand existing APIs `spdk_dif_ctx_init`, `spdk_dif_set_md_interleave_iovs`, and 3119a2f0b6e4SJosh Soref`spdk_dif_generate_stream` have been refined to insert or strip DIF into iovs 3120a2f0b6e4SJosh Sorefwindows of any alignment. 3121f84744e9SShuhei Matsumoto 3122f84744e9SShuhei MatsumotoNew APIs `spdk_dif_ctx_set_remapped_init_ref_tag`, `spdk_dif_remap_ref_tag`, 3123f84744e9SShuhei Matsumotoand `spdk_dix_remap_ref_tag` have been added to remap DIF reference tag. 3124f84744e9SShuhei Matsumoto 3125f84744e9SShuhei MatsumotoNew APIs `spdk_dif_update_crc32c` and `spdk_dif_update_crc32c_stream` have been 3126f84744e9SShuhei Matsumotoadded to compute CRC-32C checksum for extended LBA payload. 3127f84744e9SShuhei Matsumoto 3128dcbe9e42STomasz ZawadzkiBdevperf and bdevio applications now support starting tests with application specific 3129dcbe9e42STomasz ZawadzkiRPCs. Please see helper Python scripts in their respective directories. 3130dcbe9e42STomasz ZawadzkiThis is a move towards simpler RPC-only configuration for all main 3131dcbe9e42STomasz Zawadzkiand auxiliary applications. 3132dcbe9e42STomasz Zawadzki 3133dcbe9e42STomasz ZawadzkiLegacy INI style configuration for SPDK applications will become deprecated in SPDK 19.10, 3134dcbe9e42STomasz Zawadzkiand removed in SPDK 20.01. Please consider moving to JSON-RPC configuration files and/or 3135dcbe9e42STomasz ZawadzkiRPC driven run-time configuration. 3136dcbe9e42STomasz Zawadzki 313736eb0ec5SBen Walker### nvmf 3138ed56a3d4SAnil Veerabhadrappa 313936eb0ec5SBen WalkerEXPERIMENTAL: A Fibre Channel transport that supports Broadcom HBAs has been 314036eb0ec5SBen Walkeradded. This depends on the FC HBA driver at 314136eb0ec5SBen Walkerhttps://github.com/ecdufcdrvr/bcmufctdrvr. See [the documentation](https://spdk.io/doc/nvmf.html#nvmf_fc_transport) 314236eb0ec5SBen Walkerfor more information. 3143350e429aSSeth Howell 31445317a9f7SChangpeng LiuPersistent reservation emulation has been added to the NVMe-oF target. Persistent reservation 31455317a9f7SChangpeng Liustate is stored in a JSON file on the local filesystem between target restart. To support this, 31465317a9f7SChangpeng Liuan optional parameter to the RPC method `nvmf_subsystem_add_ns` called `--ptpl-file` was added. 31475317a9f7SChangpeng LiuThis allows the user to specify which file to store the persistent reservation state in. Note 31485317a9f7SChangpeng Liuthat this is done per namespace. 31495317a9f7SChangpeng Liu 31506629202cSOr GerlitzThe c2h success optimization under which a command capsule response is not sent 3151e2c0d9a2SSeth Howellfor reads is turned on by default. A config knob was added to allow disabling 3152e2c0d9a2SSeth Howellthe optimization. This will mostly be used for integration testing with 5.0.x kernels 3153e2c0d9a2SSeth Howellwhile some compatibility fixes make their way down the pipeline for 5.1.x kernels. 31546629202cSOr Gerlitz 31556ad6a113SZiye YangThe sock priority setting of the TCP connection owned by the tcp transport is added. It is 31566ad6a113SZiye Yangused to optimize the TCP connection performance under designated traffic classes. And the 3157a2f0b6e4SJosh Sorefpriority is used to differentiate the sock priority between SPDK NVMe-oF TCP target application 31586ad6a113SZiye Yangand other TCP based applications. 31596ad6a113SZiye Yang 3160350e429aSSeth HowellShared receive queue can now be disabled even for NICs that support it using the 3161350e429aSSeth Howell`nvmf_create_transport` RPC method parameter `no_srq`. The actual use of a shared 3162350e429aSSeth Howellreceive queue is predicated on hardware support when this flag is not used. 3163350e429aSSeth Howell 3164750a4213SZiye Yangspdk_nvmf_get_optimal_poll_group was added, which is used to return the optimal 3165750a4213SZiye Yangpoll group for the qpair. And `ConnectionScheduler` configuration is added into the 3166750a4213SZiye Yang[Nvmf] section in etc/spdk/nvmf.conf.in to demonstrate how to configure the connection 3167750a4213SZiye Yangscheduling strategy among different spdk threads. 3168750a4213SZiye Yang 3169fca6ff8fSEvgeniy KochetovAdded infrastructure to retrieve global and per poll group NVMf statistics. 3170fca6ff8fSEvgeniy Kochetov 3171f84744e9SShuhei MatsumotoDIF strip and insert is now supported for TCP transport. When it is enabled, DIF 3172f84744e9SShuhei Matsumotosetting is not exposed to the NVMe-oF initiator, and DIF is attached into data 3173f84744e9SShuhei Matsumotofor write I/O and stripped from data for read I/O. 3174f84744e9SShuhei Matsumoto 3175f84744e9SShuhei MatsumotoAdded a field `dif_insert_or_strip` to struct spdk_nvmf_transport_opts, and 3176f84744e9SShuhei Matsumotoupdated the related rpc function nvmf_create_transport to make this 3177f84744e9SShuhei Matsumotoconfigurable parameter available to users. The `dif_insert_or_strip` is relevant 3178f84744e9SShuhei Matsumotofor TCP transport for now and used to configure the DIF strip and insert. 3179f84744e9SShuhei Matsumoto 318043bb4e6bSEvgeniy KochetovAdded infrastructure to retrieve NVMf transport statistics. 318143bb4e6bSEvgeniy Kochetov 318287201f17Swuzhouhui### notify 318387201f17Swuzhouhui 3184ab3f35b2SwuzhouhuiThe function `spdk_notify_get_types()` and `spdk_notify_get_events()` were 3185ab3f35b2Swuzhouhuirenamed to `spdk_notify_foreach_type()` and `spdk_notify_foreach_event()`, 3186ab3f35b2Swuzhouhuirespectively. And update type name of callback accordingly. 318787201f17Swuzhouhui 3188915270dbSJim Harris### bdev 3189915270dbSJim Harris 3190915270dbSJim HarrisThe format of the data returned by the get_bdevs_iostat RPC has changed to 3191915270dbSJim Harrismake it easier to parse. It now returns an object with a "ticks" object 3192915270dbSJim Harrisand "bdevs" array with the per-bdev statistics. 3193915270dbSJim Harris 31943fb4a66dSSeth HowellA new bdev module `delay` has been added which simulates a drive latency when placed 31953fb4a66dSSeth Howellon top of a Null bdev. This module is intended only for testing and can be created using 31963fb4a66dSSeth Howellthe new RPC `bdev_delay_create`. That RPC takes the name of the underlying bdev as well 31973fb4a66dSSeth Howellas average and p99 latency arguments for both read and write operations. Average latency is 31983fb4a66dSSeth Howelldefined as a value close to what you would expect a perf tool such as FIO to report back as 31993fb4a66dSSeth Howellthe mean latency of all I/O submitted to the drive. p99 latency is defined as the value one 32003fb4a66dSSeth Howellwould expect the drive to see the slowest 1% of I/O report. For underlying drives with already 32013fb4a66dSSeth Howellsignificant latency, the latency values provided to the drive will be additive. This should be 32023fb4a66dSSeth Howelltaken into account if trying to achieve an artificial latency on top of an nvme drive or aio device. 32033fb4a66dSSeth Howell 3204f84744e9SShuhei MatsumotoDIF reference tag remapping is now supported for partition type virtual bdev 3205f84744e9SShuhei Matsumotomodules. When using partition type virtual bdevs, block address space is 3206f84744e9SShuhei Matsumotoremapped during I/O processing and DIF reference tag is remapped accordingly. 3207f84744e9SShuhei Matsumoto 3208b3349cb0STomasz ZawadzkiAdded spdk_bdev_*_with_md() functions allowing for IO with metadata being transferred in 3209a2f0b6e4SJosh Sorefseparate buffer. To check support for separate metadata, use spdk_bdev_is_md_separate(). 3210b3349cb0STomasz Zawadzki 3211b3349cb0STomasz ZawadzkiAll bdevs now have a UUID. For devices whose backing hardware does not provide a UUID, 3212d8d2635dSpaul luseone is automatically generated. Across runs of SPDK, bdevs whose UUID is automatically 3213d8d2635dSpaul lusegenerated may change. 3214d8d2635dSpaul luse 3215d8d2635dSpaul luseA new virtual bdev module `compress` has been added to provide compression services on top of 3216d8d2635dSpaul lusea thinly provisioned logical volume. See documentation for complete details. 3217b3349cb0STomasz Zawadzki 3218f0dd2b78SJim Harris### nvme 3219f0dd2b78SJim Harris 322090520634SChangpeng LiuAdded an optional parameter `--io-queue-requests` to RPC `set_bdev_nvme_options`, which 322190520634SChangpeng Liucan be used to change the number of requests allocated for one NVMe I/O queue. For 322290520634SChangpeng Liuvery big I/O size, e.g. 128MiB, with this option user will not get an error due to 322390520634SChangpeng Liulimited requests in NVMe driver layer. 322490520634SChangpeng Liu 3225f0dd2b78SJim HarrisAdded spdk_nvme_ctrlr_get_transport_id() to get the transport ID from a 3226f0dd2b78SJim Harrispreviously attached controller. 3227f0dd2b78SJim Harris 3228a2f0b6e4SJosh SorefNvme Opal library spdk_opal_cmd deprecated. Adding separate command APIs. 3229755b4390SChunyang HuiNVMe Opal library add support for activating locking SP which will make the transaction 3230755b4390SChunyang Huifrom "Manufactured-Inactive" state to "Manufactured" state. Upon successfully invoking 3231755b4390SChunyang Huiof this method, lock and unlock features will be enabled. 3232fbd2f3fdSChunyang HuiNVMe Opal library add support for locking/unlocking range and list locking range info. 32338522624dSChunyang HuiNVMe opal library add support for multiuser. Admin can enable user and add user to specific 32348522624dSChunyang Huilocking range and the user can lock/unlock his range. 32359f988238SChunyang Hui 323618b504afSJames BergstenAdded spdk_nvme_ctrlr_io_cmd_raw_no_payload_build() allowing a caller to pass 323718b504afSJames Bergstena completely formed command to an NVMe submission queue (buffer addresses and all). 323818b504afSJames BergstenThis is supported on the PCIe transport only. 323918b504afSJames Bergsten 324018b504afSJames BergstenAdded spdk_nvme_get_ctrlr_registers() to return a pointer to the virtual address 324118b504afSJames Bergstenof the NVMe controller registers. This is supported on the PCIe transport only. 324218b504afSJames Bergsten 324318b504afSJames BergstenAdded additional options to the spdk_nvme_ctrlr_alloc_qpair() option parameter 324418b504afSJames Bergstenstructure to allow caller to override the virtual and optionally physical address 324518b504afSJames Bergstenof the submission and completion queue pair to be created. This is supported on 324618b504afSJames Bergstenthe PCIe transport only. 324718b504afSJames Bergsten 3248b3349cb0STomasz ZawadzkiAdded `disable_error_logging` to struct spdk_nvme_ctrlr_opts, which disables 3249b3349cb0STomasz Zawadzkilogging of failed requests. By default logging is enabled. 3250b3349cb0STomasz Zawadzki 3251b3349cb0STomasz ZawadzkiAdded spdk_nvme_qpair_print_command(), spdk_nvme_qpair_print_completion() and 3252b3349cb0STomasz Zawadzkispdk_nvme_cpl_get_status_string(). Allowing for easier display of error messages. 3253b3349cb0STomasz Zawadzki 3254b3349cb0STomasz ZawadzkiAdded support for NVMe Sanitize command. 3255b3349cb0STomasz Zawadzki 32561554a344SShuhei Matsumoto### env 32571554a344SShuhei Matsumoto 32581554a344SShuhei MatsumotoThe parameter `free_space` has been added to spdk_ring_enqueue() to wait when 32591554a344SShuhei Matsumotothe ring is almost full and resume when there is enough space available in 32601554a344SShuhei Matsumotothe ring. 32611554a344SShuhei Matsumoto 3262a57daa69SShuhei MatsumotoA new API `spdk_mempool_lookup` has been added to lookup the memory pool created 3263a57daa69SShuhei Matsumotoby the primary process. 3264a57daa69SShuhei Matsumoto 3265a30c5336SDarek StojaczykAdded spdk_pci_get_first_device() and spdk_pci_get_next_device() to allow 3266a30c5336SDarek Stojaczykiterating over PCI devices detected by SPDK. Because of this, all SPDK APIs 3267a30c5336SDarek Stojaczykto attach/detach PCI devices are no longer thread safe. They are now meant to 3268a30c5336SDarek Stojaczykbe called from only a single thread only, the same only that called spdk_env_init(). 3269a30c5336SDarek StojaczykThis applies to the newly added APIs as well. 3270a30c5336SDarek Stojaczyk 3271fda12fe0STomasz Zawadzki### vpp 3272fda12fe0STomasz Zawadzki 3273fda12fe0STomasz ZawadzkiSPDK now supports VPP version 19.04.2, up from VPP 18.01. 3274fda12fe0STomasz Zawadzki 3275fda12fe0STomasz ZawadzkiVPP socket abstraction now uses VPP Session API, instead of VLC (VPP Communications Library). 3276fda12fe0STomasz ZawadzkiThis allows for better control over sessions and queues. 3277fda12fe0STomasz ZawadzkiPlease see VPP documentation for more details: 3278fda12fe0STomasz Zawadzki[VPP Host Stack](https://wiki.fd.io/view/VPP/HostStack) 3279fda12fe0STomasz Zawadzki 32808bb174f8SZiye Yang### sock 32818bb174f8SZiye Yang 32828bb174f8SZiye YangAdd spdk_sock_get_optimal_sock_group(), which returns the optimal sock group for 32838bb174f8SZiye Yangthis socket. When a socket is created, it is often assigned to a sock group using 32848bb174f8SZiye Yangspdk_sock_group_add_sock so that a set of sockets can be polled more efficiently. 32858bb174f8SZiye YangFor some network devices, it is optimal to assign particular sockets to specific 32868bb174f8SZiye Yangsock groups. This API is intended to provide the user with that information. 32878bb174f8SZiye Yang 3288b09bd95aSZiye Yangspdk_sock_group_get_ctx() was added to return the context of the spdk_sock_group. 3289b09bd95aSZiye Yangspdk_sock_group_create() is updated to allow input the user provided ctx. 3290ecb4ea90SZiye Yangspdk_sock_set_priority() is added to set the priority of the socket. 3291b09bd95aSZiye Yang 32927535cdbdSEvgeniy Kochetov### rpc 32937535cdbdSEvgeniy Kochetov 32947535cdbdSEvgeniy KochetovAdded thread_get_stats RPC method to retrieve existing statistics. 32957535cdbdSEvgeniy Kochetov 3296a2f0b6e4SJosh SorefAdded nvmf_get_stats RPC method to retrieve NVMf subsystem statistics. 3297fca6ff8fSEvgeniy Kochetov 3298a30c5336SDarek StojaczykResponse buffers for RPC requests are now always pre-allocated, which implies 3299a30c5336SDarek Stojaczykthat all spdk_jsonrpc_begin_result() calls always succeed and return a valid 3300a30c5336SDarek Stojaczykbuffer for JSON response. RPC calls no longer need to check if the buffer is 3301a30c5336SDarek Stojaczyknon-NULL. 3302a30c5336SDarek Stojaczyk 3303a30c5336SDarek StojaczykAdded SPDK_RPC_REGISTER_ALIAS_DEPRECATED to help with deprecation process when 3304a30c5336SDarek Stojaczykrenaming existing RPC. First time a deprecated alias is used, it will print 3305a30c5336SDarek Stojaczyka warning message. 3306a30c5336SDarek Stojaczyk 3307a30c5336SDarek StojaczykRPC `get_rpc_methods` was renamed `rpc_get_methods`. The old name is still usable, 3308a30c5336SDarek Stojaczykbut is now deprecated. 3309a30c5336SDarek Stojaczyk 33109622c1cbSMaciej Szwed### blobstore 33119622c1cbSMaciej Szwed 33129622c1cbSMaciej SzwedA snapshot can now be deleted if there is only a single clone on top of it. 33139622c1cbSMaciej Szwed 3314a30c5336SDarek Stojaczyk### build 3315a30c5336SDarek Stojaczyk 3316bf7460f5SBen WalkerPreliminary support for cross compilation is now available. Targeting an older 3317bf7460f5SBen WalkerCPU on the same architecture using your native compiler can be accomplished by 3318bf7460f5SBen Walkerusing the `--target-arch` option to `configure` as follows: 3319a30c5336SDarek Stojaczyk 332063ee471bSMaciej Wawryk~~~bash 3321bf7460f5SBen Walker./configure --target-arch=broadwell 3322bf7460f5SBen Walker~~~ 3323bf7460f5SBen Walker 3324bf7460f5SBen WalkerAdditionally, some support for cross-compiling to other architectures has been 3325bf7460f5SBen Walkeradded via the `--cross-prefix` argument to `configure`. To cross-compile, set CC 3326bf7460f5SBen Walkerand CXX to the cross compilers, then run configure as follows: 3327bf7460f5SBen Walker 332863ee471bSMaciej Wawryk~~~bash 3329bf7460f5SBen Walker./configure --target-arch=aarm64 --cross-prefix=aarch64-linux-gnu 3330bf7460f5SBen Walker~~~ 3331a30c5336SDarek Stojaczyk 3332a30c5336SDarek Stojaczyk### vhost 3333a30c5336SDarek Stojaczyk 3334a3de1d1bSDarek StojaczykA security vulnerability has been identified and fixed in SPDK Vhost-SCSI target. 3335a3de1d1bSDarek StojaczykA malicious client (e.g. a virtual machine) could send a carefully prepared, 3336a3de1d1bSDarek Stojaczykinvalid I/O request to crash the entire SPDK process. All users of SPDK Vhost-SCSI 3337a3de1d1bSDarek Stojaczyktarget are strongly recommended to update. All SPDK versions < 19.07 are affected. 3338a3de1d1bSDarek Stojaczyk 3339a30c5336SDarek StojaczykBy default, SPDK will now rely on upstream DPDK's rte_vhost instead of its fork 3340a30c5336SDarek Stojaczyklocated inside SPDK repo. The internal fork is still kept around to support older 3341a30c5336SDarek StojaczykDPDK versions, but is considered legacy and will be eventually removed. 3342a30c5336SDarek Stojaczyk 3343a30c5336SDarek Stojaczyk`configure` will now automatically use the upstream rte_vhost if the used DPDK 3344a30c5336SDarek Stojaczykversion is >= 19.05. 3345a30c5336SDarek Stojaczyk 3346a30c5336SDarek Stojaczykspdk_vhost_init() is now asynchronous and accepts a completion callback. 3347a30c5336SDarek Stojaczyk 3348a3de1d1bSDarek Stojaczyk### iscsi target 3349a3de1d1bSDarek Stojaczyk 3350a3de1d1bSDarek StojaczykA security vulnerability has been identified and fixed in SPDK iSCSI target. 3351a3de1d1bSDarek StojaczykA malicious client (e.g. an iSCSI initiator) could send a carefully prepared, 3352a3de1d1bSDarek Stojaczykinvalid I/O request to crash the entire SPDK process. All users of SPDK iSCSI 3353a3de1d1bSDarek Stojaczyktarget are strongly recommended to update. All SPDK versions < 19.07 are affected. 3354a3de1d1bSDarek Stojaczyk 3355b3349cb0STomasz Zawadzki### thread 3356b3349cb0STomasz Zawadzki 3357b3349cb0STomasz ZawadzkiExposed spdk_set_thread() in order for applications to associate 3358b3349cb0STomasz Zawadzkiwith SPDK thread when necessary. 3359b3349cb0STomasz Zawadzki 3360b3349cb0STomasz ZawadzkiAdded spdk_thread_destroy() to allow framework polling the thread to 3361b3349cb0STomasz Zawadzkirelease resources associated with that thread. 3362b3349cb0STomasz Zawadzki 336352aaee43STomasz Zawadzki## v19.04: Compression bdev, Notification library, NVMe Opal support 33641982d4b1STomasz Zawadzki 3365bad30d53SChangpeng Liu### nvme 3366bad30d53SChangpeng Liu 336784245b72SChangpeng LiuAdded asynchronous probe support. New APIs spdk_nvme_probe_async(), 33680017ba8bSBen Walkerspdk_nvme_connect_async() and spdk_nvme_probe_poll_async() were added to enable 33690017ba8bSBen Walkerthis feature. spdk_nvme_probe_async() and spdk_nvme_connect_async() return a 33700017ba8bSBen Walkercontext associated with the specified controllers. Users then call 337184245b72SChangpeng Liuspdk_nvme_probe_poll_async() until it returns 0, indicating that the operation 33720017ba8bSBen Walkercompleted. 3373bad30d53SChangpeng Liu 3374cf0eac8cSBen WalkerA new qpair creation option, delay_pcie_doorbell, was added. This can be passed 33750017ba8bSBen Walkerto spdk_nvme_alloc_io_qpair(). This makes the I/O submission functions, such as 33760017ba8bSBen Walkerspdk_nvme_ns_writev(), skip ringing the submission queue doorbell. Instead the 33770017ba8bSBen Walkerdoorbell will be rung as necessary inside spdk_nvme_qpair_process_completions(). 33780017ba8bSBen WalkerThis can result in significantly fewer MMIO writes to the doorbell register 33790017ba8bSBen Walkerunder heavy load, greatly improving performance. 3380cf0eac8cSBen Walker 33810017ba8bSBen Walkerspdk_nvme_ctrlr_get_regs_cmbsz() was added to report the size of the controller 33820017ba8bSBen Walkermemory buffer, if available. 338351ab3788SChunyang Hui 33840017ba8bSBen Walkerspdk_nvme_ctrlr_get_flags() was added to return controller feature 33850017ba8bSBen Walkerflags. Two flags are currently tracked: 33860017ba8bSBen WalkerSPDK_NVME_CTRLR_SGL_SUPPORTED 33870017ba8bSBen WalkerSPDK_NVME_CTRLR_SECURITY_SEND_RECV_SUPPORTED 33880017ba8bSBen Walker 33890017ba8bSBen WalkerThe NVMe hotplug poller is now able to detach devices hot-removed from the system 339081523d9dSDarek Stojaczykvia `/sys/bus/pci/devices/<bdf>/remove` and `/sys/bus/pci/devices/<bdf>/driver/unbind`. 339181523d9dSDarek Stojaczyk 33920017ba8bSBen WalkerOpal support was added for scan, take ownership, revert TPer, and dumping device 33930017ba8bSBen Walkerinfo. The nvme_manage tool can be used to perform these operations. The public 33940017ba8bSBen WalkerAPI functions are spdk_nvme_ctrlr_security_receive() and 33950017ba8bSBen Walkerspdk_nvme_ctrlr_security_send(). This module should be considered experimental 33960017ba8bSBen Walkerpending additional features and tests. 33970017ba8bSBen Walker 33986b92b21dSShuhei MatsumotoThe NVMe-oF initiator is now able to transfer IO whose size is more than 128KiB 33996b92b21dSShuhei Matsumotoif the corresponding NVMe-oF target allows. 34006b92b21dSShuhei Matsumoto 34018a1acca6Spaul luse### raid 34028a1acca6Spaul luse 34038a1acca6Spaul luseAdded new strip_size_kb rpc param on create to replace the more ambiguous 34048a1acca6Spaul lusestrip_size. The strip_size rpc param is deprecated. 34058a1acca6Spaul luse 3406a6524cd1SMike CarlinChanged the raid bdev product_name from "Pooled Device" to "Raid Volume" 3407a6524cd1SMike Carlin 34087173e9bdSTomasz Zawadzki### thread 34097173e9bdSTomasz Zawadzki 341013c416c0SBen WalkerAdded spdk_thread_has_pollers() function to verify if there are any registered 341113c416c0SBen Walkerpollers to be run on the thread. Added spdk_thread_is_idle() function to check 341213c416c0SBen Walkerif there are any scheduled operations to be performed on the thread at given 341313c416c0SBen Walkertime. 34147173e9bdSTomasz Zawadzki 341513c416c0SBen Walkerspdk_thread_create() now takes an optional CPU affinity mask that is passed to 341613c416c0SBen Walkerthe scheduler. 341713c416c0SBen Walker 341813c416c0SBen Walkerspdk_thread_lib_init() now takes an optional context size. For each thread 341913c416c0SBen Walkercreated, an additional region of memory of this size will be allocated. A 342013c416c0SBen Walkerpointer to this region of memory can be obtained by calling 342113c416c0SBen Walkerspdk_thread_get_ctx(). The inverse operation is also available via 342213c416c0SBen Walkerspdk_thread_get_from_ctx(). 342313c416c0SBen Walker 342413c416c0SBen Walkerspdk_thread_poll() now optionally accepts the current time, in ticks. This can 342513c416c0SBen Walkerbe used to avoid some calls to spdk_get_ticks() internally. 3426154eb339STomasz Zawadzki 342759688f4dSDarek Stojaczykspdk_app_start() now only accepts a single context argument. 342859688f4dSDarek Stojaczyk 3429fb167991SShuhei Matsumoto### bdev 3430fb167991SShuhei Matsumoto 3431fb167991SShuhei MatsumotoAn new API `spdk_bdev_get_data_block_size` has been added to get size of data 3432fb167991SShuhei Matsumotoblock except for metadata. 3433fb167991SShuhei Matsumoto 3434bfd1e46eSJim Harrisspdk_vbdev_register() has been deprecated. spdk_bdev_register() should be used 3435bfd1e46eSJim Harrisinstead. 3436bfd1e46eSJim Harris 343784850dacSBen WalkerA mechanism for acquiring and releasing data buffers from bdev modules, used 343884850dacSBen Walkerto perform zero copy operations, was added. 343984850dacSBen Walker 3440f74643efSShuhei MatsumotoNew APIs spdk_bdev_get_md_size(), spdk_bdev_is_md_interleaved(), spdk_bdev_get_dif_type(), 3441f74643efSShuhei Matsumotospdk_bdev_is_dif_head_of_md(), and spdk_bdev_is_dif_check_enabled() have been 3442f74643efSShuhei Matsumotoadded to get metadata and DIF settings. 3443f74643efSShuhei Matsumoto 344463eef98cSDarek StojaczykBdevs claimed by the `examine_config` callback will be now further examined in the 344563eef98cSDarek Stojaczyk`examine_disk` callback. 344663eef98cSDarek Stojaczyk 344707316838STomasz Zawadzkispdk_bdev_io_get_io_channel() was added as a convenient way to get an io_channel 344807316838STomasz Zawadzkifrom a bdev_io. 344907316838STomasz Zawadzki 34500bf9a47cSTomasz Zawadzki### ocf 34510bf9a47cSTomasz Zawadzki 34520bf9a47cSTomasz ZawadzkiUpdated OCF submodule to OCF v19.3.2 34530bf9a47cSTomasz Zawadzki 34540bf9a47cSTomasz ZawadzkiAdded support for many-to-one configuration for OCF bdev. 34550bf9a47cSTomasz ZawadzkiMultiple core devices can now be cached on single cache device. 34560bf9a47cSTomasz Zawadzki 34570bf9a47cSTomasz ZawadzkiAdded persistent metadata support, allowing to restore cache state after shutdown. 34580bf9a47cSTomasz ZawadzkiDuring start of SPDK application, the devices are examined and if OCF metadata 34590bf9a47cSTomasz Zawadzkiis present - appropriate OCF bdevs will be recreated. 34600bf9a47cSTomasz Zawadzki 34610bf9a47cSTomasz ZawadzkiAdded Write-Back mode support. In this mode, data is first written to 34620bf9a47cSTomasz Zawadzkicaching device and periodically synchronized to the core devices. 34630bf9a47cSTomasz ZawadzkiDirty data is saved as persistent metadata on cache device, 34640bf9a47cSTomasz Zawadzkiallowing for safe restore during application restart. 34650bf9a47cSTomasz ZawadzkiFor more details please see OCF documentation: 34660bf9a47cSTomasz Zawadzki[OpenCAS cache configuration](https://open-cas.github.io/cache_configuration.html) 34670bf9a47cSTomasz Zawadzki 3468ed0b611fSEvgeniy Kochetov### NVMe-oF Target 3469ed0b611fSEvgeniy Kochetov 3470ed0b611fSEvgeniy KochetovSupport for per-device shared receive queues in the RDMA transport has been added. 347101201d3eSSeth HowellIt is enabled by default for any device that supports it. 347201201d3eSSeth Howell 3473ed0b611fSEvgeniy KochetovThe size of a shared receive queue is defined by transport configuration file parameter 3474ed0b611fSEvgeniy Kochetov`MaxSRQDepth` and `nvmf_create_transport` RPC method parameter `max_srq_depth`. 3475ed0b611fSEvgeniy KochetovDefault size is 4096. 3476ed0b611fSEvgeniy Kochetov 347731158c0dSShuhei MatsumotoAdd model number as parameter to construct_nvmf_subsystem (-d option), 347831158c0dSShuhei Matsumotorather than using hardcoded define. 347931158c0dSShuhei Matsumoto 3480d4b5edaeSShuhei MatsumotoDIF passthrough feature has been added. DIF setting of the allocated bdevs is 3481d4b5edaeSShuhei Matsumotoexposed to the NVMe-oF initiator and data with DIF from the NVMe-oF initiator is 3482d4b5edaeSShuhei Matsumotopassed through to the allocated bdevs. 3483d4b5edaeSShuhei Matsumoto 348455656fb1SDarek Stojaczyk### env 348555656fb1SDarek Stojaczyk 348655656fb1SDarek StojaczykThe `phys_addr` parameter in spdk_malloc() and spdk_zmalloc() has been deprecated. 348755656fb1SDarek StojaczykFor retrieving physical addresses, spdk_vtophys() should be used instead. 348855656fb1SDarek Stojaczyk 34895c0f6700SBen Walkerspdk_realloc() has been added to reallocate DMA/shared memory. 34905c0f6700SBen Walker 349181523d9dSDarek Stojaczykspdk_pci_device_is_removed() has been added to let the upper-layer SPDK drivers know 349281523d9dSDarek Stojaczykthat device has a pending external hotremove request. 349381523d9dSDarek Stojaczyk 3494f373369aSDarek Stojaczykspdk_env_fini() and spdk_env_dpdk_post_fini() were added to release any resources 3495f373369aSDarek Stojaczykallocated by spdk_env_init() or spdk_env_dpdk_post_init() respectively. It is expected 3496f373369aSDarek Stojaczykthat common usage of those functions is to call them just before terminating the process. 3497f373369aSDarek Stojaczyk 34985c0f6700SBen WalkerAdded spdk_iommu_is_enabled() to report if SPDK application is using IOMMU for DMA. 34995c0f6700SBen Walker 35005c0f6700SBen Walker### DPDK 35015c0f6700SBen Walker 35025c0f6700SBen WalkerDropped support for DPDK 17.07 and earlier, which SPDK won't even compile with right now. 35035c0f6700SBen Walker 350463eef98cSDarek StojaczykUpdated DPDK submodule to DPDK 19.02. 350563eef98cSDarek Stojaczyk 350638902a5aSChunyang Hui### rpc 350738902a5aSChunyang Hui 350838902a5aSChunyang HuiNew `get_spdk_version` RPC method is introduced to get version info of the running SPDK application. 350938902a5aSChunyang Hui 3510efdd6edbSXiaodong LiuThe `start_nbd_disk` RPC method now take nbd_device as an optional parameter. If nbd_device 3511efdd6edbSXiaodong Liuis specified, use that specified nbd device. If it's not specified, pick available one. 3512efdd6edbSXiaodong Liu 3513462ff07bSShuhei Matsumoto### iSCSI target 3514462ff07bSShuhei Matsumoto 3515462ff07bSShuhei MatsumotoDIF strip and insert is now supported. DIF settings are not exposed to the iSCSI initiator. 3516462ff07bSShuhei MatsumotoDIF is attached into data for write I/O and stripped from data for read I/O. 3517462ff07bSShuhei Matsumoto 3518ef0093adSDarek Stojaczyk### vhost 3519ef0093adSDarek Stojaczyk 3520ef0093adSDarek StojaczykAdded experimental support for running with the external, upstream rte_vhost library. 3521ef0093adSDarek StojaczykThis can be enabled by configuring SPDK with an `--without-internal-vhost-lib` flag. 3522ef0093adSDarek StojaczykThe minimum supported rte_vhost version (DPDK version) is 19.05-rc1. 3523ef0093adSDarek Stojaczyk 3524ef0093adSDarek StojaczykAs a result of fuzz testing, a lot of data races in vhost-scsi LUN hotplug path were identified and 3525ef0093adSDarek Stojaczykfixed. Those data races could have potentially resulted in SPDK crashes, RPC hangs, or memory leaks 3526ef0093adSDarek Stojaczykif Vhost-SCSI LUN hotplug RPCs were executed while connected VMs were in the middle of restarting. 3527ef0093adSDarek Stojaczyk 3528ef0093adSDarek StojaczykThe SCSI target id in `add_vhost_scsi_lun` RPC is now optional. If `-1` is passed, the first 3529ef0093adSDarek Stojaczykunoccupied target id will be used. 3530ef0093adSDarek Stojaczyk 3531ae628a84SDarek Stojaczyk### AIO 3532ae628a84SDarek Stojaczyk 3533ae628a84SDarek StojaczykAIO bdev module can now reap I/O completions directly from userspace, significantly improving 3534ae628a84SDarek Stojaczykthe overall performance. 3535ae628a84SDarek Stojaczyk 353607316838STomasz Zawadzki### blobfs 353707316838STomasz Zawadzki 353807316838STomasz ZawadzkiSynchronous IO operations no longer use spdk_io_channel, but instead use 353907316838STomasz Zawadzkispdk_fs_thread_ctx. The behavior is otherwise identical. 354007316838STomasz Zawadzki 354107316838STomasz Zawadzki### OCF 354207316838STomasz Zawadzki 354307316838STomasz ZawadzkiAdded support for caching multiple bdevs using a single bdev as a cache. 354407316838STomasz Zawadzki 354507316838STomasz Zawadzki### notify 354607316838STomasz Zawadzki 354707316838STomasz ZawadzkiAdded the notify library that provides a high performance local event bus 354807316838STomasz Zawadzkibetween libraries. Example usage was added to bdev module, which reports 354907316838STomasz Zawadzkinotifications for added and removed bdevs via RPC. 355007316838STomasz Zawadzki 355107316838STomasz Zawadzki### sock 355207316838STomasz Zawadzki 355307316838STomasz ZawadzkiAdded new API spdk_sock_readv() to the sock library for performing vectored 355407316838STomasz Zawadzkireads. 355507316838STomasz Zawadzki 355607316838STomasz Zawadzki### event 355707316838STomasz Zawadzki 355807316838STomasz ZawadzkiThe function spdk_subsystem_init() no longer requires spdk_event as an argument. 355907316838STomasz Zawadzki 356007316838STomasz ZawadzkiChanged API of spdk_subsystem_config_json() to no longer be asynchronous. 356107316838STomasz Zawadzki 3562f76c869aSBen Walker### io_uring 3563f76c869aSBen Walker 3564f76c869aSBen WalkerA bdev module that issues I/O to kernel block devices using the new io_uring Linux kernel 3565f76c869aSBen WalkerAPI was added. This module requires liburing. 3566f76c869aSBen Walker 35679bac8515SBen Walker### build 35689bac8515SBen Walker 35699bac8515SBen WalkerOptions to easily compile with profile guided optimization have been added to 35709bac8515SBen Walker`configure`. To use profile guided optimization with SPDK, run 35719bac8515SBen Walker`./configure --with-pgo-capture`, build SPDK, then run a workload of your 35729bac8515SBen Walkerchoosing. Then, simply run `./configure --with-pgo-enable` and recompile to 35739bac8515SBen Walkerbuild using the generated profile data. Profile guided optimization can yield 35749bac8515SBen Walkervery large performance improvements, especially on GCC 8 and clang 7. This may 35759bac8515SBen Walkerbe combined with link time optimization which has been available under the 35769bac8515SBen Walker`--enable-lto` configure option for several releases. 35779bac8515SBen Walker 3578a16e53f0STomasz Zawadzki### compression bdev/reduce library 3579a16e53f0STomasz Zawadzki 3580a16e53f0STomasz ZawadzkiAdded "reduce" block compression scheme based on using SSDs for storing 3581a2f0b6e4SJosh Sorefcompressed blocks of storage and persistent memory for metadata. Please see 3582a16e53f0STomasz Zawadzki[compression](https://spdk.io/doc/bdev.html) for more details. 3583a16e53f0STomasz Zawadzki 358452aaee43STomasz Zawadzki## v19.01: NVMe-oF TCP/IP Transport, Open Channel SSD Flash Translation Layer, Caching bdev based on OCF, ISA-L Support, DIF/DIX library 3585ae45b7ecSTomasz Zawadzki 35864a6f4552STomasz Zawadzki### ocf bdev 35874a6f4552STomasz Zawadzki 35884a6f4552STomasz ZawadzkiNew virtual bdev module based on [Open CAS Framework](https://open-cas.github.io/) has been added. 35894a6f4552STomasz ZawadzkiThis module allows for the use of one bdev to act as a high performance cache in front of another bdev. 35904a6f4552STomasz ZawadzkiPlease see [documentation](https://spdk.io/doc/bdev.html#bdev_config_cas) for more details. 35914a6f4552STomasz ZawadzkiOnly write through mode is currently supported and this feature is considered experimental. 35924a6f4552STomasz Zawadzki 359301e5610dSChunyang Hui### event framework 359401e5610dSChunyang Hui 359501e5610dSChunyang HuiFor `spdk_app_parse_args`, add return value to the callback which parses application 359601e5610dSChunyang Huispecific command line parameters to protect SPDK applications from crashing by invalid 359701e5610dSChunyang Huivalues from user input. 359801e5610dSChunyang Hui 35991d30b77eSDarek StojaczykBy default, all SPDK applications will now reserve all hugepages at runtime. The pre-reserved 36001d30b77eSDarek Stojaczykmemory size can be still set with `-s` or `--mem-size` option, although the default value 36011d30b77eSDarek Stojaczykwas reduced down to 0. 36021d30b77eSDarek Stojaczyk 36034a6f4552STomasz ZawadzkiA custom hugetlbfs directory can now be specified via spdk_app_opts. 36044a6f4552STomasz ZawadzkiThis can be used to configure hugepages with different sizes, a different size limit, 36054a6f4552STomasz Zawadzkior different access permissions than the system's default hugepage pool. 36064a6f4552STomasz ZawadzkiSPDK applications can specify a custom hugetlbfs mount with the `--huge-dir` option. 36074a6f4552STomasz Zawadzki 360881551144SXiaodong Liu### environment 360981551144SXiaodong Liu 3610c14cd59fSDarek Stojaczykspdk_vtophys() has been refactored to accept length of the translated region as a new 3611c14cd59fSDarek Stojaczykparameter. The function will now update that parameter with the largest possible value 3612c14cd59fSDarek Stojaczykfor which the memory is contiguous in the physical memory address space. 3613c14cd59fSDarek Stojaczyk 3614c14cd59fSDarek StojaczykThe following functions were removed: 36153d8a0b19SKarol Latecki 3616c14cd59fSDarek Stojaczyk- spdk_pci_nvme_device_attach() 3617c14cd59fSDarek Stojaczyk- spdk_pci_nvme_enumerate() 3618c14cd59fSDarek Stojaczyk- spdk_pci_ioat_device_attach() 3619c14cd59fSDarek Stojaczyk- spdk_pci_ioat_enumerate() 3620c14cd59fSDarek Stojaczyk- spdk_pci_virtio_device_attach() 3621c14cd59fSDarek Stojaczyk- spdk_pci_virtio_enumerate() 3622c14cd59fSDarek Stojaczyk 3623c14cd59fSDarek StojaczykThey were replaced with generic spdk_pci_device_attach() and spdk_pci_enumerate() which 3624c14cd59fSDarek Stojaczykrequire a new spdk_pci_driver object to be provided. It can be one of the following: 36253d8a0b19SKarol Latecki 3626c14cd59fSDarek Stojaczyk- spdk_pci_nvme_get_driver() 3627c14cd59fSDarek Stojaczyk- spdk_pci_ioat_get_driver() 3628c14cd59fSDarek Stojaczyk- spdk_pci_virtio_get_driver() 3629c14cd59fSDarek Stojaczyk 3630c14cd59fSDarek Stojaczykspdk_pci_hook_device() and spdk_pci_unhook_device() were added. Those allow adding a virtual 3631c14cd59fSDarek Stojaczykspdk_pci_device into the SPDK PCI subsystem. A virtual device calls provided callbacks for 3632c14cd59fSDarek Stojaczykeach BAR mapping request or PCI config access. It's attachable with spdk_pci_device_attach() 3633c14cd59fSDarek Stojaczykor spdk_pci_enumerate() like any other device. 3634c14cd59fSDarek Stojaczyk 3635c14cd59fSDarek StojaczykA new spdk_pause() function was added to pause CPU execution for an implementation specific 3636c14cd59fSDarek Stojaczykamount of time. Quoting from DPDK function this is based on: "This call is intended for 3637c14cd59fSDarek Stojaczyktight loops which poll a shared resource or wait for an event. A short pause within the loop 3638c14cd59fSDarek Stojaczykmay reduce the power consumption." 3639c14cd59fSDarek Stojaczyk 364081551144SXiaodong LiuA new public header file env_dpdk.h has been introduced, and function spdk_env_dpdk_post_init 364181551144SXiaodong Liuis added into it. If user is using DPDK, and already called rte_eal_init, then include 364281551144SXiaodong Liuinclude/spdk/env_dpdk.h, and call spdk_env_dpdk_post_init() instead of spdk_env_init. 364381551144SXiaodong Liu 3644552e21ccSZiye YangISA-L has been added as an SPDK submodule. ISA-L is enabled by default on x86 architecture 3645552e21ccSZiye Yangto accelerate algorithms such as CRC for iSCSI and NVMe-oF. Users may still disable ISA-L 3646552e21ccSZiye Yangby explicitly passing --without-isal to the configure script. 3647552e21ccSZiye Yang 364831e8fb40SChangpeng Liu### util 364931e8fb40SChangpeng Liu 365031e8fb40SChangpeng LiuA new uuid API `spdk_uuid_copy` was added to make a copy of the source uuid. 365131e8fb40SChangpeng Liu 3652e303567bSShuhei MatsumotoAn new parameter `init_crc` representing the initial CRC value was added to 3653e303567bSShuhei Matsumoto`spdk_crc16_t10dif`. The parameter can be used to calculate a CRC value spanning 3654e303567bSShuhei Matsumotomultiple separate buffers. 3655e303567bSShuhei Matsumoto 3656f75128a9SShuhei MatsumotoNew DIF APIs were added to generate and verify DIF by byte granularity for both DIF and DIX 3657f75128a9SShuhei Matsumotoformats. Among them, DIF with copy APIs will be usable to emulate DIF operations such as DIF 3658f75128a9SShuhei Matsumotoinsert and strip. 3659f75128a9SShuhei Matsumoto 36604a6f4552STomasz ZawadzkiAdded `spdk_strtol` and `spdk_strtoll` to provide additional error checking around `strtol` 36614a6f4552STomasz Zawadzkiand `strtoll`. 36624a6f4552STomasz Zawadzki 36634a6f4552STomasz ZawadzkiAdded `spdk_sprintf_append_realloc` and `spdk_vsprintf_append_realloc` for appending a string 36644a6f4552STomasz Zawadzkiwith automatic buffer re-allocation. 36654a6f4552STomasz Zawadzki 36662706cd42SChangpeng Liu### nvme 36672706cd42SChangpeng Liu 366819feb4e1SChunyang HuiWrapper functions spdk_nvme_ctrlr_security_send() and spdk_nvme_ctrlr_security_receive() are 366919feb4e1SChunyang Huiintroduced to support further security protocol development. 367019feb4e1SChunyang Hui 36712706cd42SChangpeng Liuadmin_timeout_ms was added to NVMe controller initialization options, users 36722706cd42SChangpeng Liucan change the default value when probing a controller. 36732706cd42SChangpeng Liu 3674be4fbb21SZiye YangAdd two new fields "header_digest" and "data_digest" in struct spdk_nvme_ctrlr_opts, 3675be4fbb21SZiye Yangit will be used to enable the digest support for the NVMe/TCP transport. 3676be4fbb21SZiye Yang 3677be4fbb21SZiye YangAdd a new TCP/IP transport(located in lib/nvme/nvme_tcp.c) in nvme driver. With 3678be4fbb21SZiye Yangthis new transport, it can be used to connect the NVMe-oF target with the 3679be4fbb21SZiye Yangsame TCP/IP support. 3680be4fbb21SZiye Yang 3681e865a524SLance HartmannAdded API, spdk_nvme_ctrlr_is_discovery(), to indicate whether the ctrlr 3682e865a524SLance Hartmannarg refers to a Discovery Controller or not. 3683e865a524SLance Hartmann 3684675c5592SSeth HowellAdded an API function `spdk_nvme_host_id_parse` and corresponding object `spdk_nvme_host_id` 3685675c5592SSeth Howellfor parsing host address and host service ID arguments on a per connection basis. 3686675c5592SSeth Howell 3687088379cfSSeth HowellThe RPC `construct_nvme_bdev` now allows a user to specify a source address and service id for the host to 3688088379cfSSeth Howelluse when connecting to the controller backing the NVMe bdev. 3689088379cfSSeth Howell 3690962ba4e8SSeth Howell### NVMe-oF Target 3691962ba4e8SSeth Howell 3692962ba4e8SSeth HowellThe `spdk_nvmf_tgt_opts` struct has been deprecated in favor of `spdk_nvmf_transport_opts`. 3693962ba4e8SSeth HowellUsers will no longer be able to specify target wide I/O parameters. `spdk_nvmf_tgt_listen` 3694962ba4e8SSeth Howellwill also no longer implicitly initialize a transport with the default target options (since 3695962ba4e8SSeth Howellthere are none). Instead, a user must manually instantiate the transport with `spdk_nvmf_transport_create` 3696962ba4e8SSeth Howellprior to calling `spdk_nvmf_tgt_listen`. 3697962ba4e8SSeth Howell 3698962ba4e8SSeth HowellRelated to the previous change, the rpc `set_nvmf_target_options` has been renamed to 3699962ba4e8SSeth Howell`set_nvmf_target_max_subsystems` to indicate that this is the only target option available for the user to edit. 3700e956be96SZiye Yang 37014a6f4552STomasz ZawadzkiAdded fields `num_shared_buffers` and `buf_cache_size` in struct spdk_nvmf_transport_opts, 37024a6f4552STomasz Zawadzkiand also updated the related rpc function nvmf_create_transport, to make this 370358f16244SZiye Yangconfigurable parameter available to users. The `num_shared_buffers` is used to 370458f16244SZiye Yangconfigure the shared buffer numbers of the transport used by RDMA or TCP transport. 37054a6f4552STomasz Zawadzki`buf_cache_size` configures number of shared buffers to cache per poll group. 370658f16244SZiye Yang 3707e956be96SZiye Yang### nvmf 3708e956be96SZiye Yang 3709a2f0b6e4SJosh SorefAdd a new TCP/IP transport (located in lib/nvmf/tcp.c). With this transport, 3710e956be96SZiye Yangthe SPDK NVMe-oF target can have a new transport, and can serve the NVMe-oF 3711e956be96SZiye Yangprotocol via TCP/IP from the host. 3712962ba4e8SSeth Howell 37134a6f4552STomasz ZawadzkiAdded optional mechanism to modify the RDMA transport's behavior when creating protection domains and registering memory. 37144a6f4552STomasz ZawadzkiBy default, the RDMA transport will use the ibverbs library to create protection domains and register memory. 37154a6f4552STomasz ZawadzkiUsing `spdk_nvme_rdma_init_hooks` will subvert that and use an existing registration. 37164a6f4552STomasz Zawadzki 3717af034b6dSAndrey Kuzmin### bdev 3718af034b6dSAndrey Kuzmin 37194a6f4552STomasz ZawadzkiAdded `enable_bdev_histogram` and `get_bdev_histogram` RPC commands to allow gathering latency data for specified bdev. 37204a6f4552STomasz ZawadzkiPlease see [documentation](https://spdk.io/doc/bdev.html#rpc_bdev_histogram) for more details. 37214a6f4552STomasz Zawadzki 37224a6f4552STomasz ZawadzkiAdded `required_alignment` field to `spdk_bdev`, that specifies an alignment requirement for data buffers associated with an spdk_bdev_io. 37234a6f4552STomasz ZawadzkiBdev layer will automatically double buffer any spdk_bdev_io that violates this alignment, before the spdk_bdev_io is submitted to the bdev module. 37244a6f4552STomasz Zawadzki 3725af034b6dSAndrey KuzminOn shutdown, bdev unregister now proceeds in top-down fashion, with 3726af034b6dSAndrey Kuzminclaimed bdevs skipped (these will be unregistered later, when virtual 3727af034b6dSAndrey Kuzminbdev built on top of the respective base bdev unclaims it). This 3728af034b6dSAndrey Kuzminallows virtual bdevs to be shut down cleanly as opposed to the 3729af034b6dSAndrey Kuzminprevious behavior that didn't differentiate between hotremove and 3730af034b6dSAndrey Kuzminplanned shutdown. 3731af034b6dSAndrey Kuzmin 3732b52c6ea9SDarek StojaczykThe `delete_bdev` RPC is now deprecated. Users should instead use the specific deletion RPC 3733b52c6ea9SDarek Stojaczykfor the bdev type to be removed (i.e. delete_malloc_bdev). 3734b52c6ea9SDarek Stojaczyk 37354a6f4552STomasz ZawadzkiAdded support for separate bandwidth rate limits for read and write to QoS in bdev layer. 37364a6f4552STomasz Zawadzki 3737a2f0b6e4SJosh SorefBdev I/O statistics now track unmap operations. 37384a6f4552STomasz Zawadzki 37393bb815aeSTomasz Zawadzki### logical volumes 37403bb815aeSTomasz Zawadzki 37413bb815aeSTomasz ZawadzkiLogical volume bdev can now be marked as read only using `set_read_only_lvol_bdev` RPC. 37423bb815aeSTomasz ZawadzkiThis allows for basing clones on top of lvol_bdev without first creating a snapshot. 37433bb815aeSTomasz Zawadzki 37440c0d9d4eSTomasz ZawadzkiAdded option to change method for data erasure when deleting lvol or resizing down. 37450c0d9d4eSTomasz ZawadzkiDefault of unmapping clusters can now be changed to writing zeroes or no operation. 37460c0d9d4eSTomasz Zawadzki 3747ca87060dSTomasz ZawadzkiAdded option to change method for erasing data region on lvol store creation. 3748ca87060dSTomasz ZawadzkiDefault of unmapping can now be changed to writing zeroes or no operation. 3749ca87060dSTomasz Zawadzki 3750870b0e5bSJim Harris### log 3751870b0e5bSJim Harris 3752870b0e5bSJim Harris"trace flags" are now referred to as "log flags" in the SPDK log API. The 3753870b0e5bSJim Harrisset_trace_flag, clear_trace_flag and get_trace_flags RPCs are now deprecated, 3754870b0e5bSJim Harrisand set_log_flag, clear_log_flag and get_log_flags RPCs have been added. 3755870b0e5bSJim Harris 3756ae0aae15SLiu Xiaodong### trace 3757ae0aae15SLiu Xiaodong 375863c64676SDarek StojaczykNew `trace_record` application was added. It can be used to poll spdk trace shm file and 375963c64676SDarek Stojaczykappend any new trace entries into another specified file. This can help retain those entries 376063c64676SDarek Stojaczykthat would otherwise be overwritten in the shm file. See 376163c64676SDarek Stojaczyk[Capturing sufficient trace events](https://spdk.io/doc/nvmf_tgt_tracepoints.html#capture_trace_events) 376263c64676SDarek Stojaczykfor more details. 376363c64676SDarek Stojaczyk 37644a6f4552STomasz ZawadzkiNumber of trace entries in circular buffer per lcore can now be assigned by starting SPDK app 37654a6f4552STomasz Zawadzkiwith argument "--num-trace-entries <NUM>" provided. 37664a6f4552STomasz Zawadzki 3767ae0aae15SLiu XiaodongNew `get_tpoint_group_mask` RPC was added to get current tpoint_group_mask, and 3768ae0aae15SLiu Xiaodongeach tpoint group status. 3769ae0aae15SLiu XiaodongNew `enable_tpoint_group` and `disable_tpoint_group` RPC were added to enable or 3770ae0aae15SLiu Xiaodongdisable a specific tpoint group. 3771ae0aae15SLiu Xiaodong 37726f62f0a1SKonrad Sztyber### ftl 37736f62f0a1SKonrad Sztyber 37746f62f0a1SKonrad SztyberEXPERIMENTAL: Added basic flash translation layer module allowing for using Open Channel SSDs as 37756f62f0a1SKonrad Sztyberblock devices. The module is split into the library (located in lib/ftl) and bdev_ftl 37766f62f0a1SKonrad Sztyber(lib/bdev/ftl). See the [documentation](https://spdk.io/doc/ftl.html) for more details. 37776f62f0a1SKonrad Sztyber 3778a0999fd2SDarek Stojaczyk### vhost 3779a0999fd2SDarek Stojaczyk 3780eca42c66SJim HarrisA security vulnerability has been identified and fixed in the SPDK vhost target. A malicious 3781eca42c66SJim Harrisvhost client (i.e. virtual machine) could carefully construct a circular descriptor chain which 3782eca42c66SJim Harriswould result in a partial denial of service in the SPDK vhost target. These types of descriptor 3783eca42c66SJim Harrischains are now properly detected by the vhost target. All SPDK vhost users serving untrusted 3784eca42c66SJim Harrisvhost clients are strongly recommended to upgrade. (Reported by Dima Stepanov and Evgeny 3785eca42c66SJim HarrisYakovlev.) 3786eca42c66SJim Harris 3787a0999fd2SDarek StojaczykVhost SCSI and Vhost Block devices can now accept multiple connections on the same socket file. 3788a0999fd2SDarek StojaczykEach connection (internally called a vhost session) will have access to the same storage, but 3789a0999fd2SDarek Stojaczykwill use different virtqueues, different features and possibly different memory. 3790a0999fd2SDarek Stojaczyk 37914a6f4552STomasz Zawadzki### vhost scsi 37924a6f4552STomasz Zawadzki 37934a6f4552STomasz ZawadzkiSCSI target hotremove can now be performed even without the VIRTIO_SCSI_F_HOTPLUG feature negotiated. 37944a6f4552STomasz ZawadzkiRegardless of VIRTIO_SCSI_F_HOTPLUG support, the hotremoval will be still reported through SCSI sense codes. 37954a6f4552STomasz Zawadzki 37962c8c80f3SDarek Stojaczyk### DPDK 3797a2e522a3SDarek Stojaczyk 3798a2e522a3SDarek StojaczykDPDK submodule was updated to DPDK 18.11. Note that SPDK does not fully leverage the new 3799a2e522a3SDarek Stojaczykmulti-process device hotplug yet and continues to work the same way it always did. 3800a2e522a3SDarek Stojaczyk 38012c8c80f3SDarek StojaczykDropped support for DPDK 16.07 and earlier, which SPDK won't even compile with right now. 38022c8c80f3SDarek Stojaczyk 3803b52c6ea9SDarek Stojaczyk### RPC 3804b52c6ea9SDarek Stojaczyk 3805b52c6ea9SDarek StojaczykThe following RPC commands deprecated in the previous release are now removed: 38063d8a0b19SKarol Latecki 3807b52c6ea9SDarek Stojaczyk- construct_virtio_user_scsi_bdev 3808b52c6ea9SDarek Stojaczyk- construct_virtio_pci_scsi_bdev 3809b52c6ea9SDarek Stojaczyk- construct_virtio_user_blk_bdev 3810b52c6ea9SDarek Stojaczyk- construct_virtio_pci_blk_bdev 3811b52c6ea9SDarek Stojaczyk- remove_virtio_scsi_bdev 3812b52c6ea9SDarek Stojaczyk- construct_nvmf_subsystem 3813b52c6ea9SDarek Stojaczyk 3814d555d6c2SDarek Stojaczyk### Miscellaneous 3815d555d6c2SDarek Stojaczyk 3816d555d6c2SDarek StojaczykThe configure options `--with-raid` and `--without-raid` that were deprecated in the previous 3817d555d6c2SDarek Stojaczykrelease are now removed. 3818d555d6c2SDarek Stojaczyk 38194a6f4552STomasz Zawadzki### nbd 38204a6f4552STomasz Zawadzki 38214a6f4552STomasz ZawadzkiStarting nbd using `spdk_nbd_start` is now performed asynchronously. 38224a6f4552STomasz Zawadzki 38234a6f4552STomasz Zawadzki### net framework 38244a6f4552STomasz Zawadzki 38254a6f4552STomasz ZawadzkiNet framework initialization and finish is now done asynchronously. 38264a6f4552STomasz Zawadzki 38274a6f4552STomasz Zawadzki### rpc 38284a6f4552STomasz Zawadzki 38294a6f4552STomasz ZawadzkiAdded `spdk_rpc_is_method_allowed` function for checking whether method is permitted in a given state. 38304a6f4552STomasz ZawadzkiAdded `spdk_rpc_get_state` to check current state of RPC server. 38313f912cf0SMichal BergerRPC `wait_subsystem_init` has been added to allow clients to block until all subsystems are initialized. 38324a6f4552STomasz Zawadzki 38334a6f4552STomasz Zawadzki### json rpc 38344a6f4552STomasz Zawadzki 38354a6f4552STomasz ZawadzkiJSON RPC client is now running in non-blocking mode. Requests are sent and received during spdk_jsonrpc_client_poll. 3836a2f0b6e4SJosh SorefJSON RPC server can now receive a callback on connection termination or server shutdown using `spdk_jsonrpc_conn_add_close_cb` 38374a6f4552STomasz Zawadzkiand `spdk_jsonrpc_conn_del_close_cb`. 38384a6f4552STomasz Zawadzki 383952aaee43STomasz Zawadzki## v18.10: Dynamic memory allocation, Crypto Virtual Bdev, jsonrpc-client, SPDKCLI iSCSI and NVMe-oF support 38405a27b6b4SBen Walker 38415b900148SJim Harris### nvme 38425b900148SJim Harris 384399ca58e0SChunyang Huispdk_nvme_ctrlr_cmd_security_send() and spdk_nvme_ctrlr_cmd_security_receive() 384499ca58e0SChunyang Huiwere added to support sending or receiving security protocol data to or from 384599ca58e0SChunyang Huinvme controller. 384699ca58e0SChunyang Hui 38475b900148SJim Harrisspdk_nvme_ns_get_extended_sector_size() was added. This function includes 38485b900148SJim Harristhe metadata size per sector (if any). spdk_nvme_ns_get_sector_size() still 38495b900148SJim Harrisreturns only the data size per sector, not including metadata. 38505b900148SJim Harris 38516c01916cSTomasz ZawadzkiNew `send_nvme_cmd` RPC was added to allow sending NVMe commands directly to NVMe controller. 38526c01916cSTomasz ZawadzkiSee the [send_nvme_cmd](http://spdk.io/doc/jsonrpc.html#rpc_send_nvme_cmd) documentation 38536c01916cSTomasz Zawadzkifor more details. 38546c01916cSTomasz Zawadzki 38550923734cSLance Hartmann### Build System 38560923734cSLance Hartmann 38570923734cSLance HartmannNew `configure` options, `--with-shared` and `--without-shared` 38580923734cSLance Hartmann[default], provide the capability to build, or not, SPDK shared libraries. 38590923734cSLance HartmannThis includes the single SPDK shared lib encompassing all of the SPDK 38600923734cSLance Hartmannstatic libs as well as individual SPDK shared libs corresponding to 38610923734cSLance Hartmanneach of the SPDK static ones. Although the production of the shared 38620923734cSLance Hartmannlibs conforms with conventional version naming practices, such naming 38630923734cSLance Hartmanndoes not at this time confer any SPDK ABI compatibility claims. 38640923734cSLance Hartmann 38656deac3e6Swuzhouhui### bdev 38666deac3e6Swuzhouhui 38676deac3e6Swuzhouhuispdk_bdev_alias_del_all() was added to delete all alias from block device. 38686deac3e6Swuzhouhui 386951606ed4SPaul LuseA new virtual bdev module has been added to perform at rest data encryption using the DPDK CryptoDev 387051606ed4SPaul LuseFramework. The module initially uses a software AESNI CBC cipher with experimental support for the 387151606ed4SPaul LuseIntel QAT hardware accelerator also currently implemented with support for CBC cipher. Future work 3872338b038fSTomasz Zawadzkimay include additional ciphers as well as consideration for authentication. 387351606ed4SPaul Luse 38741d64773cSJim HarrisThe RAID virtual bdev module is now always enabled by default. The configure --with-raid and 38751d64773cSJim Harris--without-raid options are now ignored and deprecated and will be removed in the next release. 38761d64773cSJim Harris 3877868c28cdSGangCaoEnforcement of bandwidth limits for quality of service (QoS) has been added to the bdev layer. 3878868c28cdSGangCaoSee the new [set_bdev_qos_limit](http://www.spdk.io/doc/jsonrpc.html#rpc_set_bdev_qos_limit) 3879868c28cdSGangCaodocumentation for more details. The previous set_bdev_qos_limit_iops RPC method introduced at 3880868c28cdSGangCao18.04 release has been deprecated. The new set_bdev_qos_limit RPC method can support both 3881868c28cdSGangCaobandwidth and IOPS limits. 3882868c28cdSGangCao 3883abd726caSTomasz Zawadzkispdk_bdev_config_json() and corresponding `get_bdevs_config` RPC was removed. 3884abd726caSTomasz Zawadzki 3885d288c412SSeth Howell### Environment Abstraction Layer and Event Framework 3886d288c412SSeth Howell 3887d288c412SSeth HowellThe size parameter of spdk_mem_map_translate is now a pointer. This allows the 3888d288c412SSeth Howellfunction to report back the actual size of the translation relative to the original 3889d288c412SSeth Howellrequest made by the user. 3890d288c412SSeth Howell 38914e06bb5eSSeth HowellA new structure spdk_mem_map_ops has been introduced to hold memory map related 38924e06bb5eSSeth Howellcallbacks. This structure is now passed as the second argument of spdk_mem_map_alloc 38934e06bb5eSSeth Howellin lieu of the notify callback. 38944e06bb5eSSeth Howell 38953e229714SDarek Stojaczyk### DPDK 18.08 38963e229714SDarek Stojaczyk 38973e229714SDarek StojaczykThe DPDK submodule has been updated to the DPDK 18.08 release. SPDK will now automatically 38983e229714SDarek Stojaczykutilize DPDK's dynamic memory management with DPDK versions >= 18.05.1. 38993e229714SDarek Stojaczyk 39003e229714SDarek StojaczykHugepages can be still reserved with `[-s|--mem-size <size>]` option at application startup, 39013e229714SDarek Stojaczykbut once we use them all up, instead of failing user allocations with -ENOMEM, we'll try 39023e229714SDarek Stojaczykto dynamically reserve even more. This allows starting SPDK with `--mem-size 0` and using 39033e229714SDarek Stojaczykonly as many hugepages as it is really needed. 39043e229714SDarek Stojaczyk 39053e229714SDarek StojaczykDue to this change, the memory buffers returned by `spdk_*malloc()` are no longer guaranteed 39063e229714SDarek Stojaczykto be physically contiguous. 39073e229714SDarek Stojaczyk 390881c0e62fSDarek Stojaczyk### I/OAT 390981c0e62fSDarek Stojaczyk 391081c0e62fSDarek StojaczykI/OAT driver can now reinitialize I/OAT channels after encountering DMA errors. 391181c0e62fSDarek Stojaczyk 3912c6eb4da6SDarek Stojaczyk### iscsi target 391366723f7fSShuhei Matsumoto 391466723f7fSShuhei MatsumotoParameter names of `set_iscsi_options` and `get_iscsi_global_params` RPC 391566723f7fSShuhei Matsumotomethod for CHAP authentication in discovery sessions have been changed to 391666723f7fSShuhei Matsumotoalign with `construct_target_node` RPC method. Old names are still usable 391766723f7fSShuhei Matsumotobut will be removed in future release. 391866723f7fSShuhei Matsumoto 3919844735c9SShuhei Matsumoto`set_iscsi_discovery_auth` and `set_iscsi_target_node_auth` RPC methods have 3920844735c9SShuhei Matsumotobeen added to set CHAP authentication for discovery sessions and existing 3921844735c9SShuhei Matsumototarget nodes, respectively. 39226cd1714aSShuhei Matsumoto 3923ad323b80SShuhei MatsumotoThe SPDK iSCSI target supports an AuthFile which can be used to load CHAP 3924ad323b80SShuhei Matsumotoshared secrets when the iSCSI target starts. SPDK previously provided a 3925ad323b80SShuhei Matsumotodefault location for this file (`/usr/local/etc/spdk/auth.conf`) if none was 3926ad323b80SShuhei Matsumotospecified. This default has been removed. Users must now explicitly specify 3927ad323b80SShuhei Matsumotothe location of this file to load CHAP shared secrets from a file, or use 3928ad323b80SShuhei Matsumotothe related iSCSI RPC methods to add them at runtime. 3929a62d80f9SShuhei Matsumoto 3930c6eb4da6SDarek Stojaczyk### iscsi initiator 3931c6eb4da6SDarek Stojaczyk 3932b391eadcSJim HarrisThe SPDK iSCSI initiator is no longer considered experimental and becomes 3933c6eb4da6SDarek Stojaczyka first-class citizen among bdev modules. The basic usage has been briefly 3934c6eb4da6SDarek Stojaczykdescribed in the bdev user guide: [iSCSI bdev](https://spdk.io/doc/bdev.html#bdev_config_iscsi) 3935c6eb4da6SDarek Stojaczyk 393687d2cd9bSJim Harris### Miscellaneous 393787d2cd9bSJim Harris 3938dba21f69SDarek StojaczykThe SPDK application framework can now parse long name command line parameters. 3939dba21f69SDarek StojaczykMost single-character parameters have a long name equivalent now. See the 3940dba21f69SDarek Stojaczyk[Command Line Parameters](https://spdk.io/doc/app_overview.html) documentation 3941dba21f69SDarek Stojaczykfor details or use the `--help` command line parameter to list all available 3942dba21f69SDarek Stojaczykparams. 3943dba21f69SDarek Stojaczyk 3944dba21f69SDarek Stojaczykbdevperf `-s` param (io size) was renamed to `-o` as `-s` had been already 3945dba21f69SDarek Stojaczykused by existing apps for memory size. 3946dba21f69SDarek Stojaczyk 3947dba21f69SDarek Stojaczykbdevio can now accept all SPDK command line parameters. The config now has to 3948dba21f69SDarek Stojaczykbe provided with `-c` or `--config` param. 3949dba21f69SDarek Stojaczyk 3950dba21f69SDarek StojaczykThe following ioat/perf and nvme/perf parameters were renamed as well: 3951dba21f69SDarek Stojaczyk `-s` (io size) to `-o` 3952dba21f69SDarek Stojaczyk `-d` (mem size) to `-s` 3953dba21f69SDarek Stojaczyk 395487d2cd9bSJim HarrisThe ReactorMask config file parameter has been deprecated. Users should 395587d2cd9bSJim Harrisuse the -m or --cpumask command line option to specify the CPU core mask 395687d2cd9bSJim Harrisfor the application. 395787d2cd9bSJim Harris 3958b6ee6f92SJim HarrisDefault config file pathnames have been removed from iscsi_tgt, nvmf_tgt 3959b6ee6f92SJim Harrisand vhost. Config file pathnames may now only be specified using the 3960b6ee6f92SJim Harris-c command line option. 3961b6ee6f92SJim Harris 3962ff6299f8SJim HarrisUsers may no longer set DPDK_DIR in their environment to specify the 3963ff6299f8SJim Harrislocation of the DPDK installation used to build SPDK. Using DPDK_DIR 3964ff6299f8SJim Harrishas not been the documented nor recommended way to specify the DPDK 3965ff6299f8SJim Harrislocation for several releases, but removing it ensures no unexpected 3966ff6299f8SJim Harrissurprises for users who may have DPDK_DIR defined for other reasons. 3967ff6299f8SJim HarrisUsers should just use the "configure" script to specify the DPDK 3968ff6299f8SJim Harrislocation before building SPDK. 3969ff6299f8SJim Harris 3970b96f97cfSPawel WodkowskiAlthough we know that many developers still use Python 2 we are officially 3971b96f97cfSPawel Wodkowskiswitching to Python3 with requirement that all new code must be valid also 3972b96f97cfSPawel Wodkowskifor Python 2 up to the EOL which is year 2020. 3973b96f97cfSPawel Wodkowski 3974b96f97cfSPawel WodkowskiInvoking interpreter explicitly is forbidden for executable scripts. There 3975b96f97cfSPawel Wodkowskiis no need to use syntax like "python ./scripts/rpc.py". All executable 3976b96f97cfSPawel Wodkowskiscripts must contain proper shebang pointing to the right interpreter. 3977a2f0b6e4SJosh SorefScripts without shebang mustn't be executable. 3978b96f97cfSPawel Wodkowski 3979ca12cb30SPawel KaminskiA Python script has been added to enable conversion of old INI config file 3980ca12cb30SPawel Kaminskito new JSON-RPC config file format. This script can be found at 3981ca12cb30SPawel Kaminskiscripts/config_converter.py. Example how this script can be used: 3982ca12cb30SPawel Kaminski~~~{.sh} 3983ca12cb30SPawel Kaminskicat old_format.ini | scripts/config_converter.py > new_json_format.json 3984ca12cb30SPawel Kaminski~~~ 3985ca12cb30SPawel Kaminski 39865c263046SZiye Yang### Sock 39875c263046SZiye Yang 39885c263046SZiye YangTwo additional parameters were added to spdk_sock_get_addr() for the server 39895c263046SZiye Yangport and client port. These parameters are named "sport" and "cport" 39905c263046SZiye Yangrespectively. 39915c263046SZiye Yang 3992f3096dacSDarek Stojaczyk### Virtio 3993f3096dacSDarek Stojaczyk 3994f3096dacSDarek StojaczykThe following RPC commands have been deprecated: 39953d8a0b19SKarol Latecki 3996f3096dacSDarek Stojaczyk- construct_virtio_user_scsi_bdev 3997f3096dacSDarek Stojaczyk- construct_virtio_pci_scsi_bdev 3998f3096dacSDarek Stojaczyk- construct_virtio_user_blk_bdev 3999f3096dacSDarek Stojaczyk- construct_virtio_pci_blk_bdev 4000b237c1b5SDarek Stojaczyk- remove_virtio_scsi_bdev 4001f3096dacSDarek Stojaczyk 4002b237c1b5SDarek StojaczykThe `construct_virtio_*` ones were replaced with a single `construct_virtio_dev` 4003b237c1b5SDarek Stojaczykcommand that can create any type of Virtio bdev(s). `remove_virtio_scsi_bdev` 4004b237c1b5SDarek Stojaczykwas replaced with `remove_virtio_bdev` that can delete both Virtio Block and SCSI 4005b237c1b5SDarek Stojaczykdevices. 4006f3096dacSDarek Stojaczyk 4007b57a4391STomasz Zawadzki### Blobfs 4008b57a4391STomasz Zawadzki 4009b57a4391STomasz Zawadzkispdk_file_get_id() returning unique ID for the file was added. 4010b57a4391STomasz Zawadzki 401173372badSTomasz Zawadzki### JSON 401273372badSTomasz Zawadzki 4013e3b55a6eSTomasz ZawadzkiAdded jsonrpc-client C library intended for issuing RPC commands from applications. 4014e3b55a6eSTomasz Zawadzki 401573372badSTomasz ZawadzkiAdded API enabling iteration over JSON object: 40163d8a0b19SKarol Latecki 401773372badSTomasz Zawadzki- spdk_json_find() 401873372badSTomasz Zawadzki- spdk_json_find_string() 401973372badSTomasz Zawadzki- spdk_json_find_array() 402073372badSTomasz Zawadzki- spdk_json_object_first() 402173372badSTomasz Zawadzki- spdk_json_array_first() 402273372badSTomasz Zawadzki- spdk_json_next() 402373372badSTomasz Zawadzki 4024c32c2a42STomasz Zawadzki### Blobstore 4025c32c2a42STomasz Zawadzki 4026c32c2a42STomasz ZawadzkiBlobstore I/O operations are now based on io_units, instead of blobstore page size. 4027c32c2a42STomasz ZawadzkiThe io_unit size is now the same as the underlying block device's block size. 4028c32c2a42STomasz ZawadzkiLogical volumes built on a block device with 512B block size can now be used as boot devices 4029c32c2a42STomasz Zawadzkiin QEMU. 4030c32c2a42STomasz Zawadzki 403145071738STomasz Zawadzki### SPDKCLI 403245071738STomasz Zawadzki 403345071738STomasz ZawadzkiThe SPDKCLI interactive command tool for managing SPDK is no longer considered experimental. 403445071738STomasz ZawadzkiSupport for the iSCSI and NVMe-oF targets has been added. 403545071738STomasz Zawadzki 403652aaee43STomasz Zawadzki## v18.07: Raid, Infrastructure Improvements, Bug Fixes 4037080a301dSDaniel Verkamp 4038812a38d4SBen Walker### bdev 4039812a38d4SBen Walker 4040812a38d4SBen WalkerA new public header file bdev_module.h has been introduced to facilitate the 4041812a38d4SBen Walkerdevelopment of new bdev modules. This header includes an interface for the 4042812a38d4SBen Walkerspdk_bdev_part and spdk_bdev_part_base objects to enable the creation of 4043812a38d4SBen Walkermultiple virtual bdevs on top of a single base bdev and should act as the 4044812a38d4SBen Walkerprimary API for module authors. 4045812a38d4SBen Walker 4046812a38d4SBen Walkerspdk_bdev_get_opts() and spdk_bdev_set_opts() were added to set bdev-wide 4047812a38d4SBen Walkeroptions. 4048812a38d4SBen Walker 4049812a38d4SBen WalkerA mechanism for handling out of memory condition errors (ENOMEM) returned from 4050812a38d4SBen WalkerI/O submission requests at the bdev layer has been added. See 4051812a38d4SBen Walkerspdk_bdev_queue_io_wait(). 4052812a38d4SBen Walker 4053812a38d4SBen WalkerThe spdk_bdev_get_io_stat() function now returns cumulative totals instead of 4054812a38d4SBen Walkerresetting on each call. This allows multiple callers to query I/O statistics 4055812a38d4SBen Walkerwithout conflicting with each other. Existing users will need to adjust their 4056812a38d4SBen Walkercode to record the previous I/O statistics to calculate the delta between calls. 4057812a38d4SBen Walker 4058812a38d4SBen WalkerI/O queue depth tracking and samples options have been added. See 4059812a38d4SBen Walkerspdk_bdev_get_qd(), spdk_bdev_get_qd_sampling_period(), and 4060812a38d4SBen Walkerspdk_bdev_set_qd_sampling_period(). 4061812a38d4SBen Walker 406241586b0fSKunal Sablok### RAID module 406393be26a5SKarol Latecki 406441586b0fSKunal SablokA new bdev module called "raid" has been added as experimental module which 4065812a38d4SBen Walkeraggregates underlying NVMe bdevs and exposes a single raid bdev. Please note 4066812a38d4SBen Walkerthat vhost will not work with this module because it does not yet have support 4067812a38d4SBen Walkerfor multi-element io vectors. 406841586b0fSKunal Sablok 40696f8ab395SDaniel Verkamp### Log 40706f8ab395SDaniel Verkamp 4071812a38d4SBen WalkerThe debug log component flag available on several SPDK applications has been 4072812a38d4SBen Walkerrenamed from `-t` to `-L` to prevent confusion with tracepoints and to allow the 4073812a38d4SBen Walkeroption to be added to tools that already use `-t` to mean something else. 4074812a38d4SBen Walker 4075812a38d4SBen Walker### Blobstore 4076812a38d4SBen Walker 4077812a38d4SBen WalkerA new function, spdk_bs_dump(), has been added that dumps all of the contents of 4078812a38d4SBen Walkera blobstore to a file pointer. This includes the metadata and is very useful for 4079812a38d4SBen Walkerdebugging. 4080812a38d4SBen Walker 4081812a38d4SBen WalkerTwo new operations have been added for thin-provisioned blobs. 4082812a38d4SBen Walkerspdk_bs_inflate_blob() will allocate clusters for all thinly provisioned regions 4083812a38d4SBen Walkerof the blob and populate them with the correct data by reading from the backing 4084812a38d4SBen Walkerblob(s). spdk_bs_blob_decouple_parent() works similarly, but will only allocate 4085812a38d4SBen Walkerclusters that correspond to data in the blob's immediate parent. Clusters 4086812a38d4SBen Walkerallocated to grandparents or that aren't allocated at all will remain 4087812a38d4SBen Walkerthin-provisioned. 4088812a38d4SBen Walker 4089812a38d4SBen Walker### BlobFS 4090812a38d4SBen Walker 4091812a38d4SBen WalkerChanged the return type of spdk_file_truncate() from void to int to allow the 4092812a38d4SBen Walkerpropagation of `ENOMEM` errors. 40936f8ab395SDaniel Verkamp 4094c391fed3SChangpeng Liu### NVMe Driver 4095c391fed3SChangpeng Liu 4096812a38d4SBen WalkerThe new API functions spdk_nvme_qpair_add_cmd_error_injection() and 4097812a38d4SBen Walkerspdk_nvme_qpair_remove_cmd_error_injection() have been added for NVMe error 4098812a38d4SBen Walkeremulation. Users can set a specified command to fail with a particular error 4099812a38d4SBen Walkerstatus. 4100c391fed3SChangpeng Liu 4101812a38d4SBen WalkerChanged the name `timeout_sec` parameter to `timeout_us` in 4102812a38d4SBen Walkerspdk_nvme_ctrlr_register_timeout_callback(), and also changed the type from 4103812a38d4SBen Walkeruint32_t to uint64_t. This will give users more fine-grained control over the 4104812a38d4SBen Walkertimeout period. 4105812a38d4SBen Walker 4106812a38d4SBen WalkerBasic support for Open Channel SSDs was added. See nvme_ocssd.h 4107812a38d4SBen Walker 4108812a38d4SBen Walker### NVMe Over Fabrics 4109812a38d4SBen Walker 4110812a38d4SBen WalkerThe spdk_nvmf_tgt_destroy() function is now asynchronous and takes a callback 4111812a38d4SBen Walkeras a parameter. 4112812a38d4SBen Walker 4113812a38d4SBen Walkerspdk_nvmf_qpair_disconnect() was added to allow the user to disconnect qpairs. 4114812a38d4SBen Walker 4115812a38d4SBen Walkerspdk_nvmf_subsystem_get_max_namespaces() was added to query the maximum allowed 4116812a38d4SBen Walkernumber of namespaces for a given subsystem. 4117b1da5cecSZiye Yang 41186f46e272SDaniel Verkamp### Build System 41196f46e272SDaniel Verkamp 4120812a38d4SBen WalkerThe build system now generates a combined shared library (libspdk.so) that may 4121812a38d4SBen Walkerbe used in place of the individual static libraries (libspdk_*.a). The combined 4122812a38d4SBen Walkerlibrary includes all components of SPDK and is intended to make linking against 4123812a38d4SBen WalkerSPDK easier. The static libraries are also still provided for users that prefer 4124812a38d4SBen Walkerto link only the minimal set of components required. 41256f46e272SDaniel Verkamp 4126812a38d4SBen Walker### git pre-commit and pre-push hooks 4127812a38d4SBen Walker 4128812a38d4SBen WalkerThe pre-commit hook will run `scripts/check_format.sh` and verify there are no 41293f912cf0SMichal Bergerformatting errors before allowing `git commit` to run. The pre-push hook runs 4130812a38d4SBen Walker`make CONFIG_WERROR=y` with and without `CONFIG_DEBUG=y` using both the gcc and 4131812a38d4SBen Walkerclang compiler before allowing `git push` to run. Following each DEBUG build 4132812a38d4SBen Walker`test/unit/unittest.sh` is run and verified. Results are recorded in the 4133812a38d4SBen Walker`make.log` file. 4134812a38d4SBen Walker 4135812a38d4SBen WalkerTo enable type: 'git config core.hooksPath .githooks'. To override after 4136812a38d4SBen Walkerconfiguration use the `git --no-verify` flag. 41376118b853SDaniel Verkamp 41385eb33f0aSDaniel Verkamp### RPC 41395eb33f0aSDaniel Verkamp 41405eb33f0aSDaniel VerkampThe `start_nbd_disk` RPC method now returns the path to the kernel NBD device node 41415eb33f0aSDaniel Verkamprather than always returning `true`. 41425eb33f0aSDaniel Verkamp 4143812a38d4SBen Walker### DPDK 18.05 41442ee95af0SDaniel Verkamp 4145812a38d4SBen WalkerThe DPDK submodule has been rebased on the DPDK 18.05 release. DPDK 18.05 supports 4146812a38d4SBen Walkerdynamic memory allocation, but due to some issues found after the DPDK 18.05 release, 4147812a38d4SBen Walkerthat support is not enabled for SPDK 18.07. Therefore, SPDK 18.07 will continue to use 4148812a38d4SBen Walkerthe legacy memory allocation model. The plan is to enable dynamic memory allocation 4149812a38d4SBen Walkerafter the DPDK 18.08 release which should fix these issues. 41502ee95af0SDaniel Verkamp 4151812a38d4SBen Walker### Environment Abstraction Layer and Event Framework 41520cdb08b0Szkhatami88 41530cdb08b0Szkhatami88The spdk_mem_map_translate() function now takes a size parameter to indicate the size of 41540cdb08b0Szkhatami88the memory region. This can be used by environment implementations to validate the 41550cdb08b0Szkhatami88requested translation. 41560cdb08b0Szkhatami88 4157c1dc8cd5SBen WalkerThe I/O Channel implementation has been moved to its own library - lib/thread. The 4158c1dc8cd5SBen Walkerpublic API that was previously in spdk/io_channel.h is now in spdk/thread.h The 4159c1dc8cd5SBen Walkerfile spdk/io_channel.h remains and includes spdk/thread.h. 4160c1dc8cd5SBen Walker 4161812a38d4SBen Walkerspdk_reactor_get_tsc_stats was added to return interesting statistics for each 4162812a38d4SBen Walkerreactor. 416322898a91SJohn Meneghini 4164239e63beSShuhei Matsumoto### IOAT 4165239e63beSShuhei Matsumoto 4166239e63beSShuhei MatsumotoIOAT for copy engine is disabled by default. It can be enabled by specifying the Enable 4167239e63beSShuhei Matsumotooption with "Yes" in `[Ioat]` section of the configuration file. The Disable option is 4168239e63beSShuhei Matsumotonow deprecated and will be removed in a future release. 4169239e63beSShuhei Matsumoto 4170145b2f7bSDaniel Verkamp## v18.04: Logical Volume Snapshot/Clone, iSCSI Initiator, Bdev QoS, VPP Userspace TCP/IP 4171ff12a9b5SDaniel Verkamp 417260622c61SJim Harris### vhost 417360622c61SJim Harris 417460622c61SJim HarrisThe SPDK vhost-scsi, vhost-blk and vhost-nvme applications have fixes to address the 417560622c61SJim HarrisDPDK rte_vhost vulnerability [CVE-2018-1059](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-1059). 417660622c61SJim HarrisPlease see this [security advisory](https://access.redhat.com/security/cve/cve-2018-1059) 417760622c61SJim Harrisfor additional information on the DPDK vulnerability. 417860622c61SJim Harris 4179145b2f7bSDaniel VerkampWorkarounds have been added to ensure vhost compatibility with QEMU 2.12. 4180145b2f7bSDaniel Verkamp 4181145b2f7bSDaniel VerkampEXPERIMENTAL: Support for vhost-nvme has been added to the SPDK vhost target. See the 4182145b2f7bSDaniel Verkamp[vhost documentation](http://www.spdk.io/doc/vhost.html) for more details. 4183145b2f7bSDaniel Verkamp 4184145b2f7bSDaniel Verkamp### Unified Target Application 4185145b2f7bSDaniel Verkamp 4186145b2f7bSDaniel VerkampA new unified SPDK target application, `spdk_tgt`, has been added. This application combines the 4187145b2f7bSDaniel Verkampfunctionality of several existing SPDK applications, including the iSCSI target, NVMe-oF target, 4188145b2f7bSDaniel Verkampand vhost target. The new application can be managed through the existing configuration file and 4189145b2f7bSDaniel Verkamp[JSON-RPC](http://www.spdk.io/doc/jsonrpc.html) methods. 4190145b2f7bSDaniel Verkamp 419160622c61SJim Harris### Env 41922536874eSPaul Luse 4193145b2f7bSDaniel Verkampspdk_mempool_get_bulk() has been added to wrap DPDK rte_mempool_get_bulk(). 41942536874eSPaul Luse 4195a77cd3f7Szkhatami88New memory management functions spdk_malloc(), spdk_zmalloc(), and spdk_free() have been added. 4196a77cd3f7Szkhatami88These new functions have a `flags` parameter that allows the user to specify whether the allocated 4197a77cd3f7Szkhatami88memory needs to be suitable for DMA and whether it should be shared across processes with the same 4198a77cd3f7Szkhatami88shm_id. The new functions are intended to replace spdk_dma_malloc() and related functions, which will 4199a77cd3f7Szkhatami88eventually be deprecated and removed. 4200a77cd3f7Szkhatami88 4201a4a497d5Spaul luse### Bdev 4202a4a497d5Spaul luse 4203145b2f7bSDaniel VerkampA new optional bdev module interface function, `init_complete`, has been added to notify bdev modules 4204145b2f7bSDaniel Verkampwhen the bdev subsystem initialization is complete. This may be useful for virtual bdevs that require 4205a4a497d5Spaul lusenotification that the set of initialization examine() calls is complete. 4206a4a497d5Spaul luse 4207145b2f7bSDaniel VerkampThe bdev layer now allows modules to provide an optional per-bdev UUID, which can be retrieved with 4208145b2f7bSDaniel Verkampthe spdk_bdev_get_uuid() function. 4209145b2f7bSDaniel Verkamp 4210145b2f7bSDaniel VerkampEnforcement of IOPS limits for quality of service (QoS) has been added to the bdev layer. See the 4211145b2f7bSDaniel Verkamp[set_bdev_qos_limit_iops](http://www.spdk.io/doc/jsonrpc.html#rpc_set_bdev_qos_limit_iops) documentation 4212145b2f7bSDaniel Verkampfor more details. 4213145b2f7bSDaniel Verkamp 4214ff12a9b5SDaniel Verkamp### RPC 4215ff12a9b5SDaniel Verkamp 4216145b2f7bSDaniel VerkampThe `[Rpc]` configuration file section, which was deprecated in v18.01, has been removed. 4217ff12a9b5SDaniel VerkampUsers should switch to the `-r` command-line parameter instead. 4218ff12a9b5SDaniel Verkamp 4219c7852cf9SDaniel VerkampThe JSON-RPC server implementation now allows up to 32 megabyte responses, growing as 4220c7852cf9SDaniel Verkampneeded; previously, the response was limited to 32 kilobytes. 4221c7852cf9SDaniel Verkamp 4222ee3213daSMaciej Szwed### SPDKCLI 4223ee3213daSMaciej Szwed 4224ee3213daSMaciej SzwedEXPERIMENTAL: New SPDKCLI interactive command tool for managing SPDK is available. 4225ee3213daSMaciej SzwedSee the [SPDKCLI](http://www.spdk.io/doc/spdkcli.html) documentation for more details. 4226ee3213daSMaciej Szwed 422738396397SDaniel Verkamp### NVMe Driver 422838396397SDaniel Verkamp 4229145b2f7bSDaniel VerkampEXPERIMENTAL: Support for WDS and RDS capable CMBs in NVMe controllers has been added. This support is 423038396397SDaniel Verkampexperimental pending a functional allocator to free and reallocate CMB buffers. 4231ff12a9b5SDaniel Verkamp 423215bd6999SDaniel Verkampspdk_nvme_ns_get_uuid() has been added to allow retrieval of per-namespace UUIDs when available. 423315bd6999SDaniel Verkamp 4234145b2f7bSDaniel VerkampNew API functions spdk_nvme_ctrlr_get_first_active_ns() and spdk_nvme_ctrlr_get_next_active_ns() 4235145b2f7bSDaniel Verkamphave been added to iterate active namespaces, as well as spdk_nvme_ctrlr_is_active_ns() to check if 4236145b2f7bSDaniel Verkampa namespace ID is active. 423706fbf4b3SEd Rodriguez 42381023ca7bSDaniel Verkamp### NVMe-oF Target 42391023ca7bSDaniel Verkamp 4240145b2f7bSDaniel VerkampNamespaces may now be assigned unique identifiers via new optional `eui64` and `nguid` parameters 4241145b2f7bSDaniel Verkampto the `nvmf_subsystem_add_ns` RPC method. Additionally, the NVMe-oF target automatically exposes 4242145b2f7bSDaniel Verkampthe backing bdev's UUID as the namespace UUID when available. 42431023ca7bSDaniel Verkamp 4244145b2f7bSDaniel Verkampspdk_nvmf_subsystem_remove_ns() is now asynchronous and requires a callback to indicate completion. 42454ca87a01SSeth Howell 424666fc591fSJim Harris### Blobstore 424766fc591fSJim Harris 424866fc591fSJim HarrisA number of functions have been renamed: 424966fc591fSJim Harris 425066fc591fSJim Harris- spdk_bs_io_write_blob() => spdk_blob_io_write() 425166fc591fSJim Harris- spdk_bs_io_read_blob() => spdk_blob_io_read() 425266fc591fSJim Harris- spdk_bs_io_writev_blob() => spdk_blob_io_writev() 425366fc591fSJim Harris- spdk_bs_io_readv_blob() => spdk_blob_io_readv() 425466fc591fSJim Harris- spdk_bs_io_unmap_blob() => spdk_blob_io_unmap() 425566fc591fSJim Harris- spdk_bs_io_write_zeroes_blob() => spdk_blob_io_write_zeroes() 425666fc591fSJim Harris 425766fc591fSJim HarrisThe old names still exist but are deprecated. They will be removed in the v18.07 release. 425866fc591fSJim Harris 4259463925ffSJim Harrisspdk_blob_resize() is now an asynchronous operation to enable resizing a blob while I/O 4260463925ffSJim Harrisare in progress to that blob on other threads. An explicit spdk_blob_sync_md() is still 4261463925ffSJim Harrisrequired to sync the updated metadata to disk. 4262463925ffSJim Harris 4263f9d52c9eSDaniel Verkamp### Logical Volumes 4264f9d52c9eSDaniel Verkamp 4265f9d52c9eSDaniel VerkampA new `destroy_lvol_bdev` RPC method to delete logical volumes has been added. 4266f9d52c9eSDaniel Verkamp 4267ee3213daSMaciej SzwedLvols now have their own UUIDs which replace previous LvolStoreUUID_BlobID combination. 4268ee3213daSMaciej Szwed 42691f813ec3SChen WangNew Snapshot and Clone functionalities have been added. User may create Snapshots of existing Lvols 4270ee3213daSMaciej Szwedand Clones of existing Snapshots. 4271ee3213daSMaciej SzwedSee the [lvol snapshots](http://www.spdk.io/doc/logical_volumes.html#lvol_snapshots) documentation 4272ee3213daSMaciej Szwedfor more details. 4273ee3213daSMaciej Szwed 4274145b2f7bSDaniel VerkampResizing logical volumes is now supported via the `resize_lvol_bdev` RPC method. 4275145b2f7bSDaniel Verkamp 4276b9be940aSLance Hartmann### Lib 4277b9be940aSLance Hartmann 4278145b2f7bSDaniel VerkampA set of changes were made in the SPDK's lib code altering 4279b9be940aSLance Hartmanninstances of calls to `exit()` and `abort()` to return a failure instead 4280b9be940aSLance Hartmannwherever reasonably possible. 4281b9be940aSLance Hartmann 4282b9be940aSLance Hartmannspdk_app_start() no longer exit()'s on an internal failure, but 4283b9be940aSLance Hartmanninstead returns a non-zero error status. 4284b9be940aSLance Hartmann 4285b9be940aSLance Hartmannspdk_app_parse_args() no longer exit()'s on help, '-h', or an invalid 4286b9be940aSLance Hartmannoption, but instead returns SPDK_APP_PARSE_ARGS_HELP and 4287b9be940aSLance HartmannSPDK_APP_PARSE_ARGS_FAIL, respectively, and SPDK_APP_PARSE_ARGS_SUCCESS 4288b9be940aSLance Hartmannon success. 4289b9be940aSLance Hartmann 429025884545SDaniel Verkampspdk_pci_get_device() has been deprecated and will be removed in SPDK v18.07. 429125884545SDaniel Verkamp 4292c3bc40a6SRoman Sudarikov### I/O Channels 4293c3bc40a6SRoman Sudarikov 4294c3bc40a6SRoman SudarikovThe prototype for spdk_poller_fn() has been modified; it now returns a value indicating 4295c3bc40a6SRoman Sudarikovwhether or not the poller did any work. Existing pollers will need to be updated to 4296c3bc40a6SRoman Sudarikovreturn a value. 4297c3bc40a6SRoman Sudarikov 4298145b2f7bSDaniel Verkamp### iSCSI Target 4299145b2f7bSDaniel Verkamp 4300145b2f7bSDaniel VerkampThe SPDK iSCSI target now supports the fd.io Vector Packet Processing (VPP) framework userspace 4301145b2f7bSDaniel VerkampTCP/IP stack. See the [iSCSI VPP documentation](http://www.spdk.io/doc/iscsi.html#vpp) for more 4302145b2f7bSDaniel Verkampdetails. 4303145b2f7bSDaniel Verkamp 43042af15344SJim Harris### iSCSI initiator 43052af15344SJim Harris 43062af15344SJim HarrisAn iSCSI initiator bdev module has been added to SPDK. This module should be considered 43072af15344SJim Harrisexperimental pending additional features and tests. More details can be found in 43082af15344SJim Harrislib/bdev/iscsi/README. 43092af15344SJim Harris 4310218dcd84SJim Harris### PMDK 4311218dcd84SJim Harris 4312145b2f7bSDaniel VerkampThe persistent memory (PMDK) bdev module is now enabled using `--with-pmdk` instead of 4313145b2f7bSDaniel Verkamp`--with-nvml`. This reflects the renaming of the persistent memory library from NVML to 4314218dcd84SJim HarrisPMDK. 4315218dcd84SJim Harris 431630f369f7SDariusz Stojaczyk### Virtio Block driver 431730f369f7SDariusz Stojaczyk 431830f369f7SDariusz StojaczykA userspace driver for Virtio Block devices has been added. It was built on top of the 431930f369f7SDariusz Stojaczyk[Virtio](http://www.spdk.io/doc/virtio.html) library and can be managed similarly to 432030f369f7SDariusz Stojaczykthe Virtio SCSI driver. See the 432130f369f7SDariusz Stojaczyk[Virtio Block](http://www.spdk.io/doc/bdev.html#bdev_config_virtio_blk) reference for 432230f369f7SDariusz Stojaczykmore information. 432330f369f7SDariusz Stojaczyk 4324addd386dSDariusz Stojaczyk### Virtio with 2MB hugepages 4325addd386dSDariusz Stojaczyk 4326145b2f7bSDaniel VerkampThe previous 1GB hugepage limitation has now been lifted. A new `-g` command-line option 4327addd386dSDariusz Stojaczykenables SPDK Virtio to work with 2MB hugepages. 4328addd386dSDariusz StojaczykSee [2MB hugepages](http://www.spdk.io/doc/virtio.html#virtio_2mb) for details. 4329addd386dSDariusz Stojaczyk 4330f68211cdSDaniel Verkamp## v18.01: Blobstore Thin Provisioning 43312e7fe8e8SDaniel Verkamp 43322e7fe8e8SDaniel Verkamp### Build System 43332e7fe8e8SDaniel Verkamp 43342e7fe8e8SDaniel VerkampThe build system now includes a `make install` rule, including support for the common 43352e7fe8e8SDaniel Verkamp`DESTDIR` and `prefix` variables as used in other build systems. Additionally, the prefix 43362e7fe8e8SDaniel Verkampmay be set via the configure `--prefix` option. Example: `make install prefix=/usr`. 43376bef902cSJim Harris 43386bef902cSJim Harris### RPC 43396bef902cSJim Harris 4340a2be5492SJim HarrisA JSON RPC listener is now enabled by default using a UNIX domain socket at /var/tmp/spdk.sock. 43416bef902cSJim HarrisA -r option command line option has been added to enable an alternative UNIX domain socket location, 43426bef902cSJim Harrisor a TCP port in the format ip_addr:tcp_port (i.e. 127.0.0.1:5260). The Rpc configuration file 43436bef902cSJim Harrissection is now deprecated and will be removed in the v18.04 release. 43446bef902cSJim Harris 43459c35e39cSBen Walker### I/O Channels 43469c35e39cSBen Walker 43479c35e39cSBen Walkerspdk_poller_register() and spdk_poller_unregister() were moved from the event 43489c35e39cSBen Walkerframework (include/spdk/event.h) to the I/O channel library 43499c35e39cSBen Walker(include/spdk/io_channel.h). This allows code that doesn't depend on the event 43509c35e39cSBen Walkerframework to request registration and unregistration of pollers. 43519c35e39cSBen Walker 43525165aee6SBen Walkerspdk_for_each_channel() now allows asynchronous operations during iteration. 4353a2f0b6e4SJosh SorefInstead of immediately continuing the interaction upon returning from the iteration 43545165aee6SBen Walkercallback, the user must call spdk_for_each_channel_continue() to resume iteration. 43555165aee6SBen Walker 435644770c2aSBen Walker### Block Device Abstraction Layer (bdev) 435744770c2aSBen Walker 435844770c2aSBen WalkerThe poller abstraction was removed from the bdev layer. There is now a general purpose 435944770c2aSBen Walkerabstraction for pollers available in include/spdk/io_channel.h 436044770c2aSBen Walker 4361095f4254SLance Hartmann### Lib 4362095f4254SLance Hartmann 4363095f4254SLance HartmannA set of changes were made in the SPDK's lib code altering, 4364095f4254SLance Hartmanninstances of calls to `exit()` and `abort()` to return a failure instead 4365095f4254SLance Hartmannwherever reasonably possible. This has resulted in return type changes of 4366095f4254SLance Hartmannthe API for: 4367095f4254SLance Hartmann 4368095f4254SLance Hartmann- spdk_env_init() from type `void` to `int`. 4369095f4254SLance Hartmann- spdk_mem_map_init() from type `void` to `int`. 4370095f4254SLance Hartmann 4371095f4254SLance HartmannApplications making use of these APIs should be modified to check for 4372095f4254SLance Hartmanna non-zero return value instead of relying on them to fail without return. 4373095f4254SLance Hartmann 4374f991ac6dSCunyin Chang### NVMe Driver 4375f991ac6dSCunyin Chang 4376df6e317eSCunyin ChangSPDK now supports hotplug for vfio-attached devices. But there is one thing keep in mind: 4377df6e317eSCunyin ChangOnly physical removal events are supported; removing devices via the sysfs `remove` file will not work. 4378f991ac6dSCunyin Chang 43797b397f62SBen Walker### NVMe-oF Target 43807b397f62SBen Walker 43817b397f62SBen WalkerSubsystems are no longer tied explicitly to CPU cores. Instead, connections are handed out to the available 43827b397f62SBen Walkercores round-robin. The "Core" option in the configuration file has been removed. 43837b397f62SBen Walker 43842c3591f1SJim Harris### Blobstore 43852c3591f1SJim Harris 43862c3591f1SJim HarrisA number of functions have been renamed: 43872c3591f1SJim Harris 438877311f59SDaniel Verkamp- spdk_bs_md_resize_blob() => spdk_blob_resize() 438977311f59SDaniel Verkamp- spdk_bs_md_sync_blob() => spdk_blob_sync_md() 439077311f59SDaniel Verkamp- spdk_bs_md_close_blob() => spdk_blob_close() 439177311f59SDaniel Verkamp- spdk_bs_md_get_xattr_names() => spdk_blob_get_xattr_names() 439277311f59SDaniel Verkamp- spdk_bs_md_get_xattr_value() => spdk_blob_get_xattr_value() 439377311f59SDaniel Verkamp- spdk_blob_md_set_xattr() => spdk_blob_set_xattr() 439477311f59SDaniel Verkamp- spdk_blob_md_remove_xattr() => spdk_blob_remove_xattr() 439577311f59SDaniel Verkamp- spdk_bs_md_create_blob() => spdk_bs_create_blob() 439677311f59SDaniel Verkamp- spdk_bs_md_open_blob() => spdk_bs_open_blob() 439777311f59SDaniel Verkamp- spdk_bs_md_delete_blob() => spdk_bs_delete_blob() 439877311f59SDaniel Verkamp- spdk_bs_md_iter_first() => spdk_bs_iter_first() 439977311f59SDaniel Verkamp- spdk_bs_md_iter_next() => spdk_bs_iter_next() 44002c3591f1SJim Harris 440177311f59SDaniel VerkampThe function signature of spdk_blob_close() has changed. It now takes a struct spdk_blob * argument 4402e734bb9fSJim Harrisrather than struct spdk_blob **. 4403e734bb9fSJim Harris 440477311f59SDaniel VerkampThe function signature of spdk_bs_iter_next() has changed. It now takes a struct spdk_blob * argument 4405ae5a01ddSJim Harrisrather than struct spdk_blob **. 4406ae5a01ddSJim Harris 4407f68211cdSDaniel VerkampThin provisioning support has been added to the blobstore. It can be enabled by setting the 4408f68211cdSDaniel Verkamp`thin_provision` flag in struct spdk_blob_opts when calling spdk_bs_create_blob_ext(). 4409f68211cdSDaniel Verkamp 4410c3b31381SXiaodong Liu### NBD device 4411c3b31381SXiaodong Liu 4412c3b31381SXiaodong LiuThe NBD application (test/lib/bdev/nbd) has been removed; Same functionality can now be 4413c3b31381SXiaodong Liuachieved by using the test/app/bdev_svc application and start_nbd_disk RPC method. 4414c3b31381SXiaodong LiuSee the [GPT](http://www.spdk.io/doc/bdev.html#bdev_config_gpt) documentation for more details. 4415c3b31381SXiaodong Liu 441621ec6253SDariusz Stojaczyk### FIO plugin 441721ec6253SDariusz Stojaczyk 44181f813ec3SChen WangSPDK `fio_plugin` now supports FIO 3.3. The support for previous FIO 2.21 has been dropped, 441921ec6253SDariusz Stojaczykalthough it still remains to work for now. The new FIO contains huge amount of bugfixes and 442021ec6253SDariusz Stojaczykit's recommended to do an update. 442121ec6253SDariusz Stojaczyk 4422d6859ab6SDariusz Stojaczyk### Virtio library 4423d6859ab6SDariusz Stojaczyk 4424d6859ab6SDariusz StojaczykPreviously a part of the bdev_virtio module, now a separate library. Virtio is now available 4425d6859ab6SDariusz Stojaczykvia `spdk_internal/virtio.h` file. This is an internal interface to be used when implementing 4426d6859ab6SDariusz Stojaczyknew Virtio backends, namely Virtio-BLK. 4427d6859ab6SDariusz Stojaczyk 44284d48d87aSJim Harris### iSCSI 44294d48d87aSJim Harris 44304d48d87aSJim HarrisThe MinConnectionIdleInterval parameter has been removed, and connections are no longer migrated 44314d48d87aSJim Harristo an epoll/kqueue descriptor on the master core when idle. 44324d48d87aSJim Harris 4433c7e322feSDaniel Verkamp## v17.10: Logical Volumes 44344b8e7d50SBen Walker 4435c7e322feSDaniel Verkamp### New dependencies 443627f44662STomasz Zawadzki 4437c7e322feSDaniel Verkamplibuuid was added as new dependency for logical volumes. 4438c7e322feSDaniel Verkamp 4439c7e322feSDaniel Verkamplibnuma is now required unconditionally now that the DPDK submodule has been updated to DPDK 17.08. 444027f44662STomasz Zawadzki 4441ea957ff3SBen Walker### Block Device Abstraction Layer (bdev) 4442e36f83d6SChangpeng Liu 44434b8e7d50SBen WalkerAn [fio](http://github.com/axboe/fio) plugin was added that can route 4444c7e322feSDaniel VerkampI/O to the bdev layer. See the [plugin documentation](https://github.com/spdk/spdk/tree/master/examples/bdev/fio_plugin/) 44454b8e7d50SBen Walkerfor more information. 44464b8e7d50SBen Walker 444760c38d40SBen Walkerspdk_bdev_unmap() was modified to take an offset and a length in bytes as 444860c38d40SBen Walkerarguments instead of requiring the user to provide an array of SCSI 444960c38d40SBen Walkerunmap descriptors. This limits unmaps to a single contiguous range. 445060c38d40SBen Walker 4451c7e322feSDaniel Verkampspdk_bdev_write_zeroes() was introduced. It ensures that all specified blocks will be zeroed out. 4452c7e322feSDaniel VerkampIf a block device doesn't natively support a write zeroes command, the bdev layer emulates it using 4453c7e322feSDaniel Verkampwrite commands. 4454670dc20fSSeth Howell 4455e83f9767SDaniel VerkampNew API functions that accept I/O parameters in units of blocks instead of bytes 4456e83f9767SDaniel Verkamphave been added: 44573d8a0b19SKarol Latecki 4458e83f9767SDaniel Verkamp- spdk_bdev_read_blocks(), spdk_bdev_readv_blocks() 4459e83f9767SDaniel Verkamp- spdk_bdev_write_blocks(), spdk_bdev_writev_blocks() 4460e83f9767SDaniel Verkamp- spdk_bdev_write_zeroes_blocks() 4461e83f9767SDaniel Verkamp- spdk_bdev_unmap_blocks() 4462e83f9767SDaniel Verkamp 4463c7e322feSDaniel VerkampThe bdev layer now handles temporary out-of-memory I/O failures internally by queueing the I/O to be 4464c7e322feSDaniel Verkampretried later. 4465c7e322feSDaniel Verkamp 446667117940SDaniel Verkamp### Linux AIO bdev 446767117940SDaniel Verkamp 446867117940SDaniel VerkampThe AIO bdev now allows the user to override the auto-detected block size. 446967117940SDaniel Verkamp 447099f838a3SDaniel Verkamp### NVMe driver 447199f838a3SDaniel Verkamp 447299f838a3SDaniel VerkampThe NVMe driver now recognizes the NVMe 1.3 Namespace Optimal I/O Boundary field. 447399f838a3SDaniel VerkampNVMe 1.3 devices may report an optimal I/O boundary, which the driver will take 447499f838a3SDaniel Verkampinto account when splitting I/O requests. 447599f838a3SDaniel Verkamp 4476ea957ff3SBen WalkerThe HotplugEnable option in `[Nvme]` sections of the configuration file is now 4477ea957ff3SBen Walker"No" by default. It was previously "Yes". 4478ea957ff3SBen Walker 4479c7e322feSDaniel VerkampThe NVMe library now includes a spdk_nvme_ns_get_ctrlr() function which returns the 4480d21ec1f0SSeth HowellNVMe Controller associated with a given namespace. 4481d21ec1f0SSeth Howell 44828acc4ae5SDaniel VerkampThe NVMe library now allows the user to specify a host identifier when attaching 44838acc4ae5SDaniel Verkampto a controller. The host identifier is used as part of the Reservations feature, 44848acc4ae5SDaniel Verkampas well as in the NVMe-oF Connect command. The default host ID is also now a 44858acc4ae5SDaniel Verkamprandomly-generated UUID, and the default host NQN uses the host ID to generate 44868acc4ae5SDaniel Verkampa UUID-based NQN. 44878acc4ae5SDaniel Verkamp 4488c7e322feSDaniel Verkampspdk_nvme_connect() was added to allow the user to connect directly to a single 4489c7e322feSDaniel VerkampNVMe or NVMe-oF controller. 4490c7e322feSDaniel Verkamp 4491a2db49a1SDaniel Verkamp### NVMe-oF Target (nvmf_tgt) 4492e5f6a99bSBen Walker 4493c7e322feSDaniel VerkampThe NVMe-oF target no longer requires any in-capsule data buffers to run, and 4494c7e322feSDaniel Verkampthe feature is now entirely optional. Previously, at least 4 KiB in-capsule 4495e5f6a99bSBen Walkerdata buffers were required. 4496e5f6a99bSBen Walker 4497a2f0b6e4SJosh SorefNVMe-oF subsystems have a new configuration option, AllowAnyHost, to control 4498a2db49a1SDaniel Verkampwhether the host NQN whitelist is enforced when accepting new connections. 4499a2db49a1SDaniel VerkampIf no Host options have been specified and AllowAnyHost is disabled, the 4500a2db49a1SDaniel Verkampconnection will be denied; this is a behavior change from previous releases, 4501a2db49a1SDaniel Verkampwhich allowed any host NQN to connect if the Host list was empty. 4502a2db49a1SDaniel VerkampAllowAnyHost is disabled by default. 4503a2db49a1SDaniel Verkamp 4504691912efSDaniel VerkampNVMe-oF namespaces may now be assigned arbitrary namespace IDs, and the number 4505691912efSDaniel Verkampof namespaces per subsystem is no longer limited. 4506691912efSDaniel Verkamp 45070caab4e1SDaniel VerkampThe NVMe-oF target now supports the Write Zeroes command. 45080caab4e1SDaniel Verkamp 4509053d5733SBen Walker### Environment Abstraction Layer 4510053d5733SBen Walker 4511053d5733SBen WalkerA new default value, SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, was added to provide 4512053d5733SBen Walkeradditional clarity when constructing spdk_mempools. Previously, -1 could be 4513053d5733SBen Walkerpassed and the library would choose a reasonable default, but this new value 4514053d5733SBen Walkermakes it explicit that the default is being used. 4515053d5733SBen Walker 4516179ed697SJim Harris### Blobstore 4517179ed697SJim Harris 4518c7e322feSDaniel VerkampThe blobstore super block now contains a bstype field to identify the type of the blobstore. 4519c7e322feSDaniel VerkampExisting code should be updated to fill out bstype when calling spdk_bs_init() and spdk_bs_load(). 4520c7e322feSDaniel Verkamp 45212df9f03cSTomasz Zawadzkispdk_bs_destroy() was added to allow destroying blobstore on device 45222df9f03cSTomasz Zawadzkiwith an initialized blobstore. 45232df9f03cSTomasz Zawadzki 4524179ed697SJim Harrisspdk_bs_io_readv_blob() and spdk_bs_io_writev_blob() were added to enable 4525179ed697SJim Harrisscattered payloads. 4526d21ec1f0SSeth Howell 4527c7e322feSDaniel VerkampA CLI tool for blobstore has been added, allowing basic operations through either command 4528c7e322feSDaniel Verkampline or shell interface. See the [blobcli](https://github.com/spdk/spdk/tree/master/examples/blob/cli) 4529c7e322feSDaniel Verkampdocumentation for more details. 4530c5e63c71SPaul Luse 453147182bd7SDaniel Verkamp### Event Framework 453247182bd7SDaniel Verkamp 453347182bd7SDaniel VerkampThe ability to set a thread name, previously only used by the reactor code, is 4534c7e322feSDaniel Verkampnow part of the spdk_thread_allocate() API. Users may specify a thread name 453547182bd7SDaniel Verkampwhich will show up in tools like `gdb`. 453647182bd7SDaniel Verkamp 45379b99f2c0SPaul Luse### Log 45389b99f2c0SPaul Luse 4539c7e322feSDaniel VerkampThe spdk_trace_dump() function now takes a new parameter to allow the caller to 4540c7e322feSDaniel Verkampspecify an output file handle (stdout or stderr, for example). 454147182bd7SDaniel Verkamp 454227f44662STomasz Zawadzki### Logical Volumes 454327f44662STomasz Zawadzki 454427f44662STomasz ZawadzkiLogical volumes library built on top of SPDK blobstore has been added. 4545c7e322feSDaniel VerkampIt is possible to create logical volumes on top of other devices using RPC. 454627f44662STomasz Zawadzki 4547d1734518SPiotr PelplinskiSee the [logical volumes](http://www.spdk.io/doc/logical_volumes.html) documentation for more information. 454827f44662STomasz Zawadzki 4549c0ed81a7SPiotr Pelplinski### Persistent Memory 4550c0ed81a7SPiotr Pelplinski 4551c7e322feSDaniel VerkampA new persistent memory bdev type has been added. 4552c7e322feSDaniel VerkampThe persistent memory block device is built on top of [libpmemblk](http://pmem.io/nvml/libpmemblk/). 4553c7e322feSDaniel VerkampIt is possible to create pmem devices on top of pmem pool files using RPC. 4554c0ed81a7SPiotr Pelplinski 4555c7e322feSDaniel VerkampSee the [Pmem Block Device](http://www.spdk.io/doc/bdev.html#bdev_config_pmem) documentation for more information. 4556c7e322feSDaniel Verkamp 45575d0bdadcSDariusz Stojaczyk### Virtio SCSI driver 45585d0bdadcSDariusz Stojaczyk 45595d0bdadcSDariusz StojaczykA userspace driver for Virtio SCSI devices has been added. 45605d0bdadcSDariusz StojaczykThe driver is capable of creating block devices on top of LUNs exposed by another SPDK vhost-scsi application. 45615d0bdadcSDariusz Stojaczyk 456212fcbc9bSwawrykSee the [Virtio SCSI](http://www.spdk.io/doc/virtio.html) documentation and 456312fcbc9bSwawryk[Getting Started](http://www.spdk.io/doc/bdev.html#bdev_config_virtio_scsi) guide for more information. 45645d0bdadcSDariusz Stojaczyk 4565f68211cdSDaniel Verkamp### Vhost target 4566f68211cdSDaniel Verkamp 4567f68211cdSDaniel VerkampThe vhost target application now supports live migration between QEMU instances. 4568f68211cdSDaniel Verkamp 4569054c5338SDaniel Verkamp## v17.07: Build system improvements, userspace vhost-blk target, and GPT bdev 457049977bc2SDaniel Verkamp 457149977bc2SDaniel Verkamp### Build System 457249977bc2SDaniel Verkamp 457349977bc2SDaniel VerkampA `configure` script has been added to simplify the build configuration process. 457449977bc2SDaniel VerkampThe existing CONFIG file and `make CONFIG_...` options are also still supported. 457549977bc2SDaniel VerkampRun `./configure --help` for information about available configuration options. 457649977bc2SDaniel Verkamp 457749977bc2SDaniel VerkampA DPDK submodule has been added to make building SPDK easier. If no `--with-dpdk` 457849977bc2SDaniel Verkampoption is specified to configure, the SPDK build system will automatically build a 457949977bc2SDaniel Verkampknown-good configuration of DPDK with the minimal options enabled. See the Building 458049977bc2SDaniel Verkampsection of README.md for more information. 458149977bc2SDaniel Verkamp 458249977bc2SDaniel VerkampA [Vagrant](https://www.vagrantup.com/) setup has been added to make it easier to 458349977bc2SDaniel Verkampdevelop and use SPDK on systems without suitable NVMe hardware. See the Vagrant 458449977bc2SDaniel Verkampsection of README.md for more information. 458549977bc2SDaniel Verkamp 458615337adeSDaniel Verkamp### Userspace vhost-blk target 458715337adeSDaniel Verkamp 458815337adeSDaniel VerkampThe vhost library and example app have been updated to support the vhost-blk 458915337adeSDaniel Verkampprotocol in addition to the existing vhost-scsi protocol. 459015337adeSDaniel VerkampSee the [vhost documentation](http://www.spdk.io/doc/vhost.html) for more details. 459115337adeSDaniel Verkamp 459215337adeSDaniel Verkamp### Block device abstraction layer (bdev) 459315337adeSDaniel Verkamp 459415337adeSDaniel VerkampA GPT virtual block device has been added, which automatically exposes GPT partitions 459515337adeSDaniel Verkampwith a special SPDK-specific partition type as bdevs. 459615337adeSDaniel VerkampSee the [GPT bdev documentation](http://www.spdk.io/doc/bdev.md#bdev_config_gpt) for 459715337adeSDaniel Verkampmore information. 459815337adeSDaniel Verkamp 459949977bc2SDaniel Verkamp### NVMe driver 460049977bc2SDaniel Verkamp 460149977bc2SDaniel VerkampThe NVMe driver has been updated to support recent Intel SSDs, including the Intel® 460249977bc2SDaniel VerkampOptane™ SSD DC P4800X series. 460349977bc2SDaniel Verkamp 460449977bc2SDaniel VerkampA workaround has been added for devices that failed to recognize register writes 460549977bc2SDaniel Verkampduring controller reset. 460649977bc2SDaniel Verkamp 460749977bc2SDaniel VerkampThe NVMe driver now allocates request tracking objects on a per-queue basis. The 460849977bc2SDaniel Verkampnumber of requests allowed on an I/O queue may be set during `spdk_nvme_probe()` by 460949977bc2SDaniel Verkampmodifying `io_queue_requests` in the opts structure. 461049977bc2SDaniel Verkamp 461149977bc2SDaniel VerkampThe SPDK NVMe `fio_plugin` has been updated to support multiple threads (`numjobs`). 461249977bc2SDaniel Verkamp 4613ce4fcbceSDaniel Verkampspdk_nvme_ctrlr_alloc_io_qpair() has been modified to allow the user to override 4614ce4fcbceSDaniel Verkampcontroller-level options for each individual I/O queue pair. 4615ce4fcbceSDaniel VerkampExisting callers with qprio == 0 can be updated to: 4616ce4fcbceSDaniel Verkamp~~~ 4617ce4fcbceSDaniel Verkamp... = spdk_nvme_ctrlr_alloc_io_qpair(ctrlr, NULL, 0); 4618ce4fcbceSDaniel Verkamp~~~ 4619ce4fcbceSDaniel VerkampCallers that need to specify a non-default qprio should be updated to: 4620ce4fcbceSDaniel Verkamp~~~ 4621ce4fcbceSDaniel Verkampstruct spdk_nvme_io_qpair_opts opts; 4622ce4fcbceSDaniel Verkampspdk_nvme_ctrlr_get_default_io_qpair_opts(ctrlr, &opts, sizeof(opts)); 4623ce4fcbceSDaniel Verkampopts.qprio = SPDK_NVME_QPRIO_...; 4624ce4fcbceSDaniel Verkamp... = spdk_nvme_ctrlr_alloc_io_qpair(ctrlr, &opts, sizeof(opts)); 4625ce4fcbceSDaniel Verkamp~~~ 4626ce4fcbceSDaniel Verkamp 462749977bc2SDaniel Verkamp### Environment Abstraction Layer 462849977bc2SDaniel Verkamp 462949977bc2SDaniel VerkampThe environment abstraction layer has been updated to include several new functions 463049977bc2SDaniel Verkampin order to wrap additional DPDK functionality. See `include/spdk/env.h` for the 463149977bc2SDaniel Verkampcurrent set of functions. 463249977bc2SDaniel Verkamp 46338bcb6432SDaniel Verkamp### SPDK Performance Analysis with Intel® VTune™ Amplifier 46348bcb6432SDaniel Verkamp 46358bcb6432SDaniel VerkampSupport for SPDK performance analysis has been added to Intel® VTune™ Amplifier 2018. 46368bcb6432SDaniel Verkamp 46378bcb6432SDaniel VerkampThis analysis provides: 46383d8a0b19SKarol Latecki 46398bcb6432SDaniel Verkamp- I/O performance monitoring (calculating standard I/O metrics like IOPS, throughput, etc.) 46408bcb6432SDaniel Verkamp- Tuning insights on the interplay of I/O and compute devices by estimating how many cores 46418bcb6432SDaniel Verkamp would be reasonable to provide for SPDK to keep up with a current storage workload. 46428bcb6432SDaniel Verkamp 46438bcb6432SDaniel VerkampSee the VTune Amplifier documentation for more information. 46448bcb6432SDaniel Verkamp 464506e4124bSDaniel Verkamp## v17.03: Blobstore and userspace vhost-scsi target 464606e4124bSDaniel Verkamp 464706e4124bSDaniel Verkamp### Blobstore and BlobFS 464806e4124bSDaniel Verkamp 464906e4124bSDaniel VerkampThe blobstore is a persistent, power-fail safe block allocator designed to be 465006e4124bSDaniel Verkampused as the local storage system backing a higher-level storage service. 465106e4124bSDaniel VerkampSee the [blobstore documentation](http://www.spdk.io/doc/blob.html) for more details. 465206e4124bSDaniel Verkamp 465306e4124bSDaniel VerkampBlobFS adds basic filesystem functionality like filenames on top of the blobstore. 465406e4124bSDaniel VerkampThis release also includes a RocksDB Env implementation using BlobFS in place of the 465506e4124bSDaniel Verkampkernel filesystem. 465606e4124bSDaniel VerkampSee the [BlobFS documentation](http://www.spdk.io/doc/blobfs.html) for more details. 465706e4124bSDaniel Verkamp 465806e4124bSDaniel Verkamp### Userspace vhost-scsi target 465906e4124bSDaniel Verkamp 466006e4124bSDaniel VerkampA userspace implementation of the QEMU vhost-scsi protocol has been added. 466106e4124bSDaniel VerkampThe vhost target is capable of exporting SPDK bdevs to QEMU-based VMs as virtio devices. 4662509fedf0SDaniel VerkampSee the [vhost documentation](http://www.spdk.io/doc/vhost.html) for more details. 466355dc5a1cSDaniel Verkamp 466455dc5a1cSDaniel Verkamp### Event framework 466555dc5a1cSDaniel Verkamp 466655dc5a1cSDaniel VerkampThe overhead of the main reactor event loop was reduced by optimizing the number of 466755dc5a1cSDaniel Verkampcalls to spdk_get_ticks() per iteration. 466855dc5a1cSDaniel Verkamp 466955dc5a1cSDaniel Verkamp### NVMe library 467055dc5a1cSDaniel Verkamp 467155dc5a1cSDaniel VerkampThe NVMe library will now automatically split readv/writev requests with scatter-gather 467255dc5a1cSDaniel Verkamplists that do not map to valid PRP lists when the NVMe controller does not natively 467355dc5a1cSDaniel Verkampsupport SGLs. 467455dc5a1cSDaniel Verkamp 467555dc5a1cSDaniel VerkampThe `identify` and `perf` NVMe examples were modified to add a consistent format for 467655dc5a1cSDaniel Verkampspecifying remote NVMe over Fabrics devices via the `-r` option. 467755dc5a1cSDaniel VerkampThis is implemented using the new `spdk_nvme_transport_id_parse()` function. 467855dc5a1cSDaniel Verkamp 46790829424eSBen Walker### iSCSI Target 46800829424eSBen Walker 46810829424eSBen WalkerThe [Nvme] section of the configuration file was modified to remove the `BDF` directive 46820829424eSBen Walkerand replace it with a `TransportID` directive. Both local (PCIe) and remote (NVMe-oF) 46830829424eSBen Walkerdevices can now be specified as the backing block device. A script to generate an 46840829424eSBen Walkerentire [Nvme] section based on the local NVMe devices attached was added at 46850829424eSBen Walker`scripts/gen_nvme.sh`. 46860829424eSBen Walker 46870829424eSBen Walker### NVMe-oF Target 46880829424eSBen Walker 46890829424eSBen WalkerThe [Nvme] section of the configuration file was modified to remove the `BDF` directive 46900829424eSBen Walkerand replace it with a `TransportID` directive. Both local (PCIe) and remote (NVMe-oF) 46910829424eSBen Walkerdevices can now be specified as the backing block device. A script to generate an 46920829424eSBen Walkerentire [Nvme] section based on the local NVMe devices attached was added at 46930829424eSBen Walker`scripts/gen_nvme.sh`. 46940829424eSBen Walker 4695aa61dc50SDaniel Verkamp## v16.12: NVMe over Fabrics host, hotplug, and multi-process 4696fbb277eaSDaniel Verkamp 4697fbb277eaSDaniel Verkamp### NVMe library 46986b566ff1SDaniel Verkamp 46996b566ff1SDaniel VerkampThe NVMe library has been changed to create its own request memory pool rather than 47006b566ff1SDaniel Verkamprequiring the user to initialize the global `request_mempool` variable. Apps can be 47016b566ff1SDaniel Verkampupdated by simply removing the initialization of `request_mempool`. Since the NVMe 47026b566ff1SDaniel Verkamplibrary user no longer needs to know the size of the internal NVMe request 47036b566ff1SDaniel Verkampstructure to create the pool, the `spdk_nvme_request_size()` function was also removed. 47046b566ff1SDaniel Verkamp 47052832b216SDaniel VerkampThe `spdk_nvme_ns_cmd_deallocate()` function was renamed and extended to become 47062832b216SDaniel Verkamp`spdk_nvme_ns_cmd_dataset_management()`, which allows access to all of the NVMe 47072832b216SDaniel VerkampDataset Management command's parameters. Existing callers can be updated to use 47082832b216SDaniel Verkamp`spdk_nvme_ns_cmd_dataset_management()` with `SPDK_NVME_DSM_ATTR_DEALLOCATE` as the 47092832b216SDaniel Verkamp`type` parameter. 47102832b216SDaniel Verkamp 47110aec36beSDaniel VerkampThe NVMe library SGL callback prototype has been changed to return virtual addresses 47120aec36beSDaniel Verkamprather than physical addresses. Callers of `spdk_nvme_ns_cmd_readv()` and 47130aec36beSDaniel Verkamp`spdk_nvme_ns_cmd_writev()` must update their `next_sge_fn` callbacks to match. 47140aec36beSDaniel Verkamp 4715fbb277eaSDaniel VerkampThe NVMe library now supports NVMe over Fabrics devices in addition to the existing 4716fbb277eaSDaniel Verkampsupport for local PCIe-attached NVMe devices. For an example of how to enable 4717fbb277eaSDaniel VerkampNVMe over Fabrics support in an application, see `examples/nvme/identify` and 4718fbb277eaSDaniel Verkamp`examples/nvme/perf`. 4719fbb277eaSDaniel Verkamp 4720fbb277eaSDaniel VerkampHot insert/remove support for NVMe devices has been added. To enable NVMe hotplug 4721fbb277eaSDaniel Verkampsupport, an application should call the `spdk_nvme_probe()` function on a regular 4722fbb277eaSDaniel Verkampbasis to probe for new devices (reported via the existing `probe_cb` callback) and 4723fbb277eaSDaniel Verkampremoved devices (reported via a new `remove_cb` callback). Hotplug is currently 4724fbb277eaSDaniel Verkamponly supported on Linux with the `uio_pci_generic` driver, and newly-added NVMe 4725fbb277eaSDaniel Verkampdevices must be bound to `uio_pci_generic` by an external script or tool. 4726fbb277eaSDaniel Verkamp 47270f6c389eSDaniel VerkampMultiple processes may now coordinate and use a single NVMe device simultaneously 47280f6c389eSDaniel Verkampusing [DPDK Multi-process Support](http://dpdk.org/doc/guides/prog_guide/multi_proc_support.html). 47290f6c389eSDaniel Verkamp 4730fbb277eaSDaniel Verkamp### NVMe over Fabrics target (`nvmf_tgt`) 4731fbb277eaSDaniel Verkamp 4732fbb277eaSDaniel VerkampThe `nvmf_tgt` configuration file format has been updated significantly to enable 4733fbb277eaSDaniel Verkampnew features. See the example configuration file `etc/spdk/nvmf.conf.in` for 4734fbb277eaSDaniel Verkampmore details on the new and changed options. 4735fbb277eaSDaniel Verkamp 4736fbb277eaSDaniel VerkampThe NVMe over Fabrics target now supports virtual mode subsystems, which allow the 4737fbb277eaSDaniel Verkampuser to export devices from the SPDK block device abstraction layer as NVMe over 4738fbb277eaSDaniel VerkampFabrics subsystems. Direct mode (raw NVMe device access) is also still supported, 4739fbb277eaSDaniel Verkampand a single `nvmf_tgt` may export both types of subsystems simultaneously. 4740fbb277eaSDaniel Verkamp 47410f6c389eSDaniel Verkamp### Block device abstraction layer (bdev) 47420f6c389eSDaniel Verkamp 47430f6c389eSDaniel VerkampThe bdev layer now supports scatter/gather read and write I/O APIs, and the NVMe 47440f6c389eSDaniel Verkampblockdev driver has been updated to support scatter/gather. Apps can use the 47450f6c389eSDaniel Verkampnew scatter/gather support via the `spdk_bdev_readv()` and `spdk_bdev_writev()` 47460f6c389eSDaniel Verkampfunctions. 47470f6c389eSDaniel Verkamp 47480f6c389eSDaniel VerkampThe bdev status returned from each I/O has been extended to pass through NVMe 47490f6c389eSDaniel Verkampor SCSI status codes directly in cases where the underlying device can provide 47500f6c389eSDaniel Verkampa more specific status code. 47510f6c389eSDaniel Verkamp 47520f6c389eSDaniel VerkampA Ceph RBD (RADOS Block Device) blockdev driver has been added. This allows the 47530f6c389eSDaniel Verkamp`iscsi_tgt` and `nvmf_tgt` apps to export Ceph RBD volumes as iSCSI LUNs or 47540f6c389eSDaniel VerkampNVMe namespaces. 47550f6c389eSDaniel Verkamp 4756fbb277eaSDaniel Verkamp### General changes 4757fbb277eaSDaniel Verkamp 4758fbb277eaSDaniel Verkamp`libpciaccess` has been removed as a dependency and DPDK PCI enumeration is 47596b1e4e73SBen Walkerused instead. Prior to DPDK 16.07 enumeration by class code was not supported, 4760fbb277eaSDaniel Verkampso for earlier DPDK versions, only Intel SSD DC P3x00 devices will be discovered 4761fbb277eaSDaniel Verkampby the NVMe library. 4762fbb277eaSDaniel Verkamp 4763fbb277eaSDaniel VerkampThe `env` environment abstraction library has been introduced, and a default 4764fbb277eaSDaniel VerkampDPDK-based implementation is provided as part of SPDK. The goal of the `env` 4765fbb277eaSDaniel Verkamplayer is to enable use of alternate user-mode memory allocation and PCI access 476693ab7c31SDaniel Verkamplibraries. See `doc/porting.md` for more details. 47676b1e4e73SBen Walker 4768720d5fa6SDaniel VerkampThe build process has been modified to produce all of the library files in the 4769720d5fa6SDaniel Verkamp`build/lib` directory. This is intended to simplify the use of SPDK from external 4770720d5fa6SDaniel Verkampprojects, which can now link to SPDK libraries by adding the `build/lib` directory 4771720d5fa6SDaniel Verkampto the library path via `-L` and linking the SPDK libraries by name (for example, 4772720d5fa6SDaniel Verkamp`-lspdk_nvme -lspdk_log -lspdk_util`). 4773720d5fa6SDaniel Verkamp 4774fbb277eaSDaniel Verkamp`nvmf_tgt` and `iscsi_tgt` now have a JSON-RPC interface, which allows the user 4775fbb277eaSDaniel Verkampto query and modify the configuration at runtime. The RPC service is disabled by 4776fbb277eaSDaniel Verkampdefault, since it currently does not provide any authentication or security 4777fbb277eaSDaniel Verkampmechanisms; it should only be enabled on systems with controlled user access 4778fbb277eaSDaniel Verkampbehind a firewall. An example RPC client implemented in Python is provided in 4779fbb277eaSDaniel Verkamp`scripts/rpc.py`. 4780fbb277eaSDaniel Verkamp 4781aa61dc50SDaniel Verkamp## v16.08: iSCSI target, NVMe over Fabrics maturity 47820fc7daffSDaniel Verkamp 4783daad9666SBen WalkerThis release adds a userspace iSCSI target. The iSCSI target is capable of exporting 4784daad9666SBen WalkerNVMe devices over a network using the iSCSI protocol. The application is located 4785daad9666SBen Walkerin app/iscsi_tgt and a documented configuration file can be found at etc/spdk/spdk.conf.in. 4786771d2c1aSDaniel Verkamp 4787daad9666SBen WalkerThis release also significantly improves the existing NVMe over Fabrics target. 47883d8a0b19SKarol Latecki 4789771d2c1aSDaniel Verkamp- The configuration file format was changed, which will require updates to 4790771d2c1aSDaniel Verkamp any existing nvmf.conf files (see `etc/spdk/nvmf.conf.in`): 4791771d2c1aSDaniel Verkamp - `SubsystemGroup` was renamed to `Subsystem`. 4792771d2c1aSDaniel Verkamp - `AuthFile` was removed (it was unimplemented). 4793771d2c1aSDaniel Verkamp - `nvmf_tgt` was updated to correctly recognize NQN (NVMe Qualified Names) 4794771d2c1aSDaniel Verkamp when naming subsystems. The default node name was changed to reflect this; 4795771d2c1aSDaniel Verkamp it is now "nqn.2016-06.io.spdk". 4796daad9666SBen Walker - `Port` and `Host` sections were merged into the `Subsystem` section 4797daad9666SBen Walker - Global options to control max queue depth, number of queues, max I/O 4798daad9666SBen Walker size, and max in-capsule data size were added. 4799daad9666SBen Walker - The Nvme section was removed. Now a list of devices is specified by 4800daad9666SBen Walker bus/device/function directly in the Subsystem section. 4801daad9666SBen Walker - Subsystems now have a Mode, which can be Direct or Virtual. This is an attempt 4802daad9666SBen Walker to future-proof the interface, so the only mode supported by this release 4803daad9666SBen Walker is "Direct". 4804771d2c1aSDaniel Verkamp- Many bug fixes and cleanups were applied to the `nvmf_tgt` app and library. 4805daad9666SBen Walker- The target now supports discovery. 4806daad9666SBen Walker 4807daad9666SBen WalkerThis release also adds one new feature and provides some better examples and tools 4808daad9666SBen Walkerfor the NVMe driver. 48093d8a0b19SKarol Latecki 4810daad9666SBen Walker- The Weighted Round Robin arbitration method is now supported. This allows 4811daad9666SBen Walker the user to specify different priorities on a per-I/O-queue basis. To 4812daad9666SBen Walker enable WRR, set the `arb_mechanism` field during `spdk_nvme_probe()`. 4813daad9666SBen Walker- A simplified "Hello World" example was added to show the proper way to use 4814daad9666SBen Walker the NVMe library API; see `examples/nvme/hello_world/hello_world.c`. 4815daad9666SBen Walker- A test for measuring software overhead was added. See `test/lib/nvme/overhead`. 4816771d2c1aSDaniel Verkamp 4817aa61dc50SDaniel Verkamp## v16.06: NVMf userspace target 481839f552fcSDaniel Verkamp 481939f552fcSDaniel VerkampThis release adds a userspace NVMf (NVMe over Fabrics) target, conforming to the 482039f552fcSDaniel Verkampnewly-released NVMf 1.0/NVMe 1.2.1 specification. The NVMf target exports NVMe 482139f552fcSDaniel Verkampdevices from a host machine over the network via RDMA. Currently, the target is 482239f552fcSDaniel Verkamplimited to directly exporting physical NVMe devices, and the discovery subsystem 482339f552fcSDaniel Verkampis not supported. 482404cde460SDaniel Verkamp 482504cde460SDaniel VerkampThis release includes a general API cleanup, including renaming all declarations 482604cde460SDaniel Verkampin public headers to include a `spdk` prefix to prevent namespace clashes with 482704cde460SDaniel Verkampuser code. 482804cde460SDaniel Verkamp 482904cde460SDaniel Verkamp- NVMe 483004cde460SDaniel Verkamp - The `nvme_attach()` API was reworked into a new probe/attach model, which 483104cde460SDaniel Verkamp moves device detection into the NVMe library. The new API also allows 483204cde460SDaniel Verkamp parallel initialization of NVMe controllers, providing a major reduction in 483304cde460SDaniel Verkamp startup time when using multiple controllers. 48343272320cSDaniel Verkamp - I/O queue allocation was changed to be explicit in the API. Each function 48353272320cSDaniel Verkamp that generates I/O requests now takes a queue pair (`spdk_nvme_qpair *`) 48363272320cSDaniel Verkamp argument, and I/O queues may be allocated using 48373272320cSDaniel Verkamp `spdk_nvme_ctrlr_alloc_io_qpair()`. This allows more flexible assignment of 48383272320cSDaniel Verkamp queue pairs than the previous model, which only allowed a single queue 48393272320cSDaniel Verkamp per thread and limited the total number of I/O queues to the lowest number 48403272320cSDaniel Verkamp supported on any attached controller. 484104cde460SDaniel Verkamp - Added support for the Write Zeroes command. 484204cde460SDaniel Verkamp - `examples/nvme/perf` can now report I/O command latency from the 484304cde460SDaniel Verkamp the controller's viewpoint using the Intel vendor-specific read/write latency 484404cde460SDaniel Verkamp log page. 484504cde460SDaniel Verkamp - Added namespace reservation command support, which can be used to coordinate 484604cde460SDaniel Verkamp sharing of a namespace between multiple hosts. 484704cde460SDaniel Verkamp - Added hardware SGL support, which enables use of scattered buffers that 484804cde460SDaniel Verkamp don't conform to the PRP list alignment and length requirements on supported 484904cde460SDaniel Verkamp NVMe controllers. 4850bce8ce48SDaniel Verkamp - Added end-to-end data protection support, including the ability to write and 4851bce8ce48SDaniel Verkamp read metadata in extended LBA (metadata appended to each block of data in the 4852bce8ce48SDaniel Verkamp buffer) and separate metadata buffer modes. 4853bce8ce48SDaniel Verkamp See `spdk_nvme_ns_cmd_write_with_md()` and `spdk_nvme_ns_cmd_read_with_md()` 4854bce8ce48SDaniel Verkamp for details. 485504cde460SDaniel Verkamp- IOAT 485604cde460SDaniel Verkamp - The DMA block fill feature is now exposed via the `ioat_submit_fill()` 485704cde460SDaniel Verkamp function. This is functionally similar to `memset()`, except the memory is 485804cde460SDaniel Verkamp filled with an 8-byte repeating pattern instead of a single byte like memset. 485904cde460SDaniel Verkamp- PCI 486004cde460SDaniel Verkamp - Added support for using DPDK for PCI device mapping in addition to the 4861bce8ce48SDaniel Verkamp existing libpciaccess option. Using the DPDK PCI support also allows use of 4862bce8ce48SDaniel Verkamp the Linux VFIO driver model, which means that SPDK userspace drivers will work 4863bce8ce48SDaniel Verkamp with the IOMMU enabled. Additionally, SPDK applications may be run as an 4864bce8ce48SDaniel Verkamp unprivileged user with access restricted to a specific set of PCIe devices. 486504cde460SDaniel Verkamp - The PCI library API was made more generic to abstract away differences 486604cde460SDaniel Verkamp between the underlying PCI access implementations. 486704cde460SDaniel Verkamp 4868aa61dc50SDaniel Verkamp## v1.2.0: IOAT user-space driver 486904cde460SDaniel Verkamp 487012fcbc9bSwawrykThis release adds a user-space driver with support for the Intel I/O Acceleration Technology 487112fcbc9bSwawryk(I/OAT, also known as "Crystal Beach") DMA offload engine. 487204cde460SDaniel Verkamp 487304cde460SDaniel Verkamp- IOAT 487404cde460SDaniel Verkamp - New user-space driver supporting DMA memory copy offload 487504cde460SDaniel Verkamp - Example programs `ioat/perf` and `ioat/verify` 487604cde460SDaniel Verkamp - Kernel-mode DMA engine test driver `kperf` for performance comparison 487704cde460SDaniel Verkamp- NVMe 487804cde460SDaniel Verkamp - Per-I/O flags for Force Unit Access (FUA) and Limited Retry 487904cde460SDaniel Verkamp - Public API for retrieving log pages 488004cde460SDaniel Verkamp - Reservation register/acquire/release/report command support 488104cde460SDaniel Verkamp - Scattered payload support - an alternate API to provide I/O buffers via a sequence of callbacks 488204cde460SDaniel Verkamp - Declarations and `nvme/identify` support for Intel SSD DC P3700 series vendor-specific log pages and features 488304cde460SDaniel Verkamp- Updated to support DPDK 2.2.0 488404cde460SDaniel Verkamp 4885aa61dc50SDaniel Verkamp## v1.0.0: NVMe user-space driver 488604cde460SDaniel Verkamp 488704cde460SDaniel VerkampThis is the initial open source release of the Storage Performance Development Kit (SPDK). 488804cde460SDaniel Verkamp 488904cde460SDaniel VerkampFeatures: 48903d8a0b19SKarol Latecki 489104cde460SDaniel Verkamp- NVMe user-space driver 489204cde460SDaniel Verkamp- NVMe example programs 489304cde460SDaniel Verkamp - `examples/nvme/perf` tests performance (IOPS) using the NVMe user-space driver 489404cde460SDaniel Verkamp - `examples/nvme/identify` displays NVMe controller information in a human-readable format 489504cde460SDaniel Verkamp- Linux and FreeBSD support 4896