diff --git a/CHANGELOG.md b/CHANGELOG.md index 7468bc2132..79de470baf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## v19.01: (Upcoming Release) +### ocf bdev + +New virtual bdev module based on [Open CAS Framework](https://open-cas.github.io/) has been added. +This module allows for the use of one bdev to act as a high performance cache in front of another bdev. +Please see [documentation](https://spdk.io/doc/bdev.html#bdev_config_cas) for more details. +Only write through mode is currently supported and this feature is considered experimental. + ### event framework For `spdk_app_parse_args`, add return value to the callback which parses application @@ -12,6 +19,11 @@ By default, all SPDK applications will now reserve all hugepages at runtime. The memory size can be still set with `-s` or `--mem-size` option, although the default value was reduced down to 0. +A custom hugetlbfs directory can now be specified via spdk_app_opts. +This can be used to configure hugepages with different sizes, a different size limit, +or different access permissions than the system's default hugepage pool. +SPDK applications can specify a custom hugetlbfs mount with the `--huge-dir` option. + ### environment spdk_vtophys() has been refactored to accept length of the translated region as a new @@ -62,6 +74,12 @@ New DIF APIs were added to generate and verify DIF by byte granularity for both formats. Among them, DIF with copy APIs will be usable to emulate DIF operations such as DIF insert and strip. +Added `spdk_strtol` and `spdk_strtoll` to provide additional error checking around `strtol` +and `strtoll`. + +Added `spdk_sprintf_append_realloc` and `spdk_vsprintf_append_realloc` for appending a string +with automatic buffer re-allocation. + ### nvme Wrapper functions spdk_nvme_ctrlr_security_send() and spdk_nvme_ctrlr_security_receive() are @@ -97,10 +115,11 @@ prior to calling `spdk_nvmf_tgt_listen`. Related to the previous change, the rpc `set_nvmf_target_options` has been renamed to `set_nvmf_target_max_subsystems` to indicate that this is the only target option available for the user to edit. -Add an field `num_shared_buffers` in struct spdk_nvmf_transport_opts, -and also update the related rpc function nvmf_create_transport, to make this +Added fields `num_shared_buffers` and `buf_cache_size` in struct spdk_nvmf_transport_opts, +and also updated the related rpc function nvmf_create_transport, to make this configurable parameter available to users. The `num_shared_buffers` is used to configure the shared buffer numbers of the transport used by RDMA or TCP transport. +`buf_cache_size` configures number of shared buffers to cache per poll group. ### nvmf @@ -108,8 +127,18 @@ Add a new TCP/IP transport (located in lib/nvmf/tcp.c). With this tranport, the SPDK NVMe-oF target can have a new transport, and can serve the NVMe-oF protocol via TCP/IP from the host. +Added optional mechanism to modify the RDMA transport's behavior when creating protection domains and registering memory. +By default, the RDMA transport will use the ibverbs library to create protection domains and register memory. +Using `spdk_nvme_rdma_init_hooks` will subvert that and use an existing registration. + ### bdev +Added `enable_bdev_histogram` and `get_bdev_histogram` RPC commands to allow gathering latency data for specified bdev. +Please see [documentation](https://spdk.io/doc/bdev.html#rpc_bdev_histogram) for more details. + +Added `required_alignment` field to `spdk_bdev`, that specifies an alignment requirement for data buffers associated with an spdk_bdev_io. +Bdev layer will automatically double buffer any spdk_bdev_io that violates this alignment, before the spdk_bdev_io is submitted to the bdev module. + On shutdown, bdev unregister now proceeds in top-down fashion, with claimed bdevs skipped (these will be unregistered later, when virtual bdev built on top of the respective base bdev unclaims it). This @@ -120,6 +149,10 @@ planned shutdown. The `delete_bdev` RPC is now deprecated. Users should instead use the specific deletion RPC for the bdev type to be removed (i.e. delete_malloc_bdev). +Added support for separate bandwidth rate limits for read and write to QoS in bdev layer. + +Bdev I/O statistics now track unmap opertations. + ### logical volumes Logical volume bdev can now be marked as read only using `set_read_only_lvol_bdev` RPC. @@ -142,6 +175,9 @@ that would otherwise be overwritten in the shm file. See [Capturing sufficient trace events](https://spdk.io/doc/nvmf_tgt_tracepoints.html#capture_trace_events) for more details. +Number of trace entries in circular buffer per lcore can now be assigned by starting SPDK app +with argument "--num-trace-entries " provided. + New `get_tpoint_group_mask` RPC was added to get current tpoint_group_mask, and each tpoint group status. New `enable_tpoint_group` and `disable_tpoint_group` RPC were added to enable or @@ -159,6 +195,11 @@ Vhost SCSI and Vhost Block devices can now accept multiple connections on the sa Each connection (internally called a vhost session) will have access to the same storage, but will use different virtqueues, different features and possibly different memory. +### vhost scsi + +SCSI target hotremove can now be performed even without the VIRTIO_SCSI_F_HOTPLUG feature negotiated. +Regardless of VIRTIO_SCSI_F_HOTPLUG support, the hotremoval will be still reported through SCSI sense codes. + ### DPDK DPDK submodule was updated to DPDK 18.11. Note that SPDK does not fully leverage the new @@ -181,6 +222,26 @@ The following RPC commands deprecated in the previous release are now removed: The configure options `--with-raid` and `--without-raid` that were deprecated in the previous release are now removed. +### nbd + +Starting nbd using `spdk_nbd_start` is now performed asynchronously. + +### net framework + +Net framework initialization and finish is now done asynchronously. + +### rpc + +Added `spdk_rpc_is_method_allowed` function for checking whether method is permitted in a given state. +Added `spdk_rpc_get_state` to check current state of RPC server. +RPC `wait_subsystem_init` has been added to allow clients to block untill all subsystems are initialized. + +### json rpc + +JSON RPC client is now running in non-blocking mode. Requests are sent and received during spdk_jsonrpc_client_poll. +JSON RPC server can now recieve a callback on connection termination or server shutdown using `spdk_jsonrpc_conn_add_close_cb` +and `spdk_jsonrpc_conn_del_close_cb`. + ## v18.10: ### nvme diff --git a/doc/bdev.md b/doc/bdev.md index b558e10eda..06c3d7ee95 100644 --- a/doc/bdev.md +++ b/doc/bdev.md @@ -250,7 +250,7 @@ To delete an aio bdev use the delete_aio_bdev command. # OCF Virtual bdev {#bdev_config_cas} -OCF virtual bdev module is based on [Open CAS Framework](https://github.com/Open-CAS/) - a +OCF virtual bdev module is based on [Open CAS Framework](https://github.com/Open-CAS/ocf) - a high performance block storage caching meta-library. To enable the module, configure SPDK with `--with-ocf=/path/to/ocf/library`. OCF bdev can be used to enable caching for any underlying bdev. @@ -275,7 +275,7 @@ During removal OCF-cache will be stopped and all cached data will be written to Note that OCF has a per-device RAM requirement of about 56000 + _cache device size_ * 58 / _cache line size_ (in bytes). To get more information on OCF -please visit [OCF documentation](https://open-cas.github.io/doxygen/ocf/). +please visit [OCF documentation](https://open-cas.github.io/). # Malloc bdev {#bdev_config_malloc}