xref: /spdk/CHANGELOG.md (revision 2a91567e48d607d62a2d552252c20d3930f5783f)
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