e7a23775 | 26-Apr-2024 |
Krzysztof Sprzaczkowski <krzysztof.sprzaczkowski@intel.com> |
idxd: Fixed minor issues in comments
Formatted function descriptions, added missing dots at the end of sentences, removed some unnecessary comments.
Change-Id: Idb1073a9f403b41be3e4bc817acd968e49bd
idxd: Fixed minor issues in comments
Formatted function descriptions, added missing dots at the end of sentences, removed some unnecessary comments.
Change-Id: Idb1073a9f403b41be3e4bc817acd968e49bdaf82 Signed-off-by: Krzysztof Sprzaczkowski <krzysztof.sprzaczkowski@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22928 Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
show more ...
|
e8b53c0d | 17-Apr-2024 |
Tomasz Zawadzki <tomasz.zawadzki@intel.com> |
lib/idxd: simplify early failure in _dsa_alloc_batches
ops_pool list is already initialized in spdk_idxd_get_channel(), called before _dsa_alloc_batches(). There is no need to initialize it again, e
lib/idxd: simplify early failure in _dsa_alloc_batches
ops_pool list is already initialized in spdk_idxd_get_channel(), called before _dsa_alloc_batches(). There is no need to initialize it again, especially not in error path of allocating batches.
Meanwhile chan->desc_base and chan->base_ops are allocated and properly freed in the spdk_idxd_get_channel(), even if batch allocation fails.
With no need for any of the above, just return early with ENOMEM.
Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Change-Id: I6a72c7437183086b19508c85f184741a8d329dbe Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22855 Reviewed-by: Jim Harris <jim.harris@samsung.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Community-CI: Mellanox Build Bot
show more ...
|
da954d0a | 13-Sep-2023 |
Krzysztof Sprzaczkowski <krzysztof.sprzaczkowski@intel.com> |
lib/idxd: DIF insert DSA implementation
Extend the IDXD API with DIF Insert operation support.
The DIF Insert operation is used to add Data Integrity Fields (DIF) when the source data does not cont
lib/idxd: DIF insert DSA implementation
Extend the IDXD API with DIF Insert operation support.
The DIF Insert operation is used to add Data Integrity Fields (DIF) when the source data does not contain them. When performing a DIF Insert operation, the device performs the following actions on each block of source data: - Calculate the Guard Tag. - Combine the Guard Tag, Application Tag, and Reference Tag into a DIF value. - Write the source data to the destination and appending the DIF value. - Update the Application Tag and Reference Tag for the next block of data, based on the DIF Flags.
Change-Id: I945dc3a7d6ba7c99241d0bd2b007c6bd24d92c8d Signed-off-by: Krzysztof Sprzaczkowski <krzysztof.sprzaczkowski@intel.com> Signed-off-by: Slawomir Ptak <slawomir.ptak@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/19854 Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Community-CI: Mellanox Build Bot Reviewed-by: Sebastian Brzezinka <sebastian.brzezinka@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
show more ...
|
59ed0fd8 | 04-Jan-2024 |
Tomasz Zawadzki <tomasz.zawadzki@intel.com> |
lib/idxd: match batch size to max reported from device
Rather than limiting the batch size to DESC_PER_BATCH, use the maximum batch size value presented from the device. To accommodate increased the
lib/idxd: match batch size to max reported from device
Rather than limiting the batch size to DESC_PER_BATCH, use the maximum batch size value presented from the device. To accommodate increased the allocated descriptors for a batch.
Prior to this patch full batch was flushed on task submission, meanwhile any built up batch was submitted in spdk_idxd_process_events().
Rate of flushing is now defined by IDXD_MIN_BATCH_FLUSH, while still allowing for larger batches to be created within single task submission. If IDXD_MIN_BATCH_FLUSH is modified to very high value, batches would still be submitted in spdk_idxd_process_events().
For now the IDXD_MIN_BATCH_FLUSH matches prior DESC_PER_BATCH limit, making this parameter configurable might be explored.
Signed-off-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com> Change-Id: Ie32648731260a542c858a8dbc91314d6b353e2ce Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/21243 Reviewed-by: Jim Harris <jim.harris@samsung.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Slawomir Ptak <slawomir.ptak@intel.com> Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com> Community-CI: Mellanox Build Bot
show more ...
|
1d4628ef | 06-Dec-2022 |
John Kariuki <John.K.Kariuki@intel.com> |
lib/idxd: change max idxd completions processed
This patch fixes issue # 2809, by changing the max completions processed per poll. A new parameter called IDXD_MAX_COMPLETIONS is used to set maximum
lib/idxd: change max idxd completions processed
This patch fixes issue # 2809, by changing the max completions processed per poll. A new parameter called IDXD_MAX_COMPLETIONS is used to set maximum completions processed per poll to 128 because we observed performance degradation on a system with 16 NVMe SSDs at a queue depth of 64 per SSD. When using DSA to compute the data digest, the target application can issue upto 1024(16x64) request to compute data digest concurrently to DSA. Limiting the maximum completions processed per poll to 32 using DESC_PER_BATCH cause up to 43% IOPS degradation. Use IDXD_MAX_COMPLETIONS to control the number of completions proccessed per poll in spdk_idxd_process_event based on your workload. For example, if your application is issuing 1000s of concurrent request to DSA you might want to set IDXD_MAX_COMPLETIONS to a value higher than 128.
Change-Id: I2a1db993283a83a20266f40dac851728d63e6127 Signed-off-by: John Kariuki <John.K.Kariuki@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15801 Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
show more ...
|
7ba33f49 | 22-Oct-2022 |
Anton <anton@lightbitslabs.com> |
lib/idxd: fix use after free due to stale crc_dst in chained ops
When crc32c is invoked with a multiple entry input iov, only the last op has crc_dst set in order to write the final crc value into t
lib/idxd: fix use after free due to stale crc_dst in chained ops
When crc32c is invoked with a multiple entry input iov, only the last op has crc_dst set in order to write the final crc value into the user supplied location.
spdk_idxd_process_events() for every successfully completed CRC op writes the value into *op->crc_dst UNLESS it is NULL.
The problem is that _idxd_prep_batch_cmd() that allocates new ops left op->crc_dst uninitialized.
This results in a memory corruption (use after free) in the following scenario: 1) op A is allocated an crc_dst is set to point to user memory X. 2) Op A is compeleted 3) User memory X is freed. 4) Ops B and C are allocated (chained), C has crc_dst set. => B reused op A memory and crc_dst still points to the now stale user location (1) 5) B is complered, spdk_idxd_process_events() writes into X as B->crc_dst = X.
Fix: _idxd_prep_batch_cmd() should initialize crc_dst to NULL.
Signed-off-by: Anton Eidelman <anton@lightbitslabs.com> Change-Id: I9e7d57ec43a8fbcb3750906015a5cb7291278c35 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/15115 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Reviewed-by: Paul Luse <paul.e.luse@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
show more ...
|