Skip to content

Data Validation for Perftest#364

Open
NitzanLavy wants to merge 3 commits intolinux-rdma:masterfrom
NitzanLavy:data_validation_upstream
Open

Data Validation for Perftest#364
NitzanLavy wants to merge 3 commits intolinux-rdma:masterfrom
NitzanLavy:data_validation_upstream

Conversation

@NitzanLavy
Copy link
Copy Markdown

This patch series adds data validation capability to perftest for write_bw test scenarios, enabling verification of data integrity during RDMA write operations.

Data validation complements perftest's performance testing by providing functional correctness verification. This is valuable for validating new hardware, drivers, or firmware deployments, debugging intermittent data corruption issues under load, and ensuring RDMA configurations work correctly before production use. The feature is disabled by default and only activated via explicit flags, ensuring no impact on standard performance testing workflows.

Three validation modes are supported:

  • random: Randomized data generation
  • serial: Sequential numeric series with configurable starting value
  • pattern: Custom patterns from input file

Usage:
--data_validation <random|serial|pattern>
--data_start_value (for serial mode, default: 0)
--payload_file_path (for pattern mode)

Requirements:

  • Must use write_bw with --write_with_imm flag
  • post_list (-l) must equal tx_depth (-t)
  • recv_post_list must equal rx_depth (-r)

The immediate field is used to pass buffer offset hints for validation. Server-side validation compares expected vs actual data and reports mismatches.

Patches:

  1. Perftest: Write BW random data validation
  2. Perftest: Write BW serial data validation
  3. Perftest: Write BW pattern data validation

Nitzan Lavy added 3 commits December 8, 2025 07:50
Adding a capability in perftest to validate the integrity of the data
transferred. For now, this functionality works only for write_bw test
scenarios. Currently, the data generated is random. In the following
commits data validation is expanded to serial and pattern data types.

Activate random data validation scenario by using the following flag:
	--data_validation random

Data validation implementation has a few limitations. The following
flags and conditions must be applied when running data validation:
	post_list (-l) == tx_depth (-t)
	recv_post_list (--recv_post_list) == rx_depth (-r)
	--write_with_imm

Size enforcement of the QPs is required to overcome some perftest
limitations for reusing of data buffers of WQEs.

Turning on the immediate flag is also required as the immediate field is
used as a hint for the data.

Reviewed-by: Firas Jahjah <firasj@amazon.com>
Reviewed-by: Daniel Kranzdorf <dkkranzd@amazon.com>
Signed-off-by: Nitzan Lavy <nlavy@amazon.com>
Extending write_bw data validation scenario to offer serial data
validation.

The data buffer of which the packets consists of contains serial data in
granularity of DWORD.

The user can set the initial value from which the data will increment
from by using the flag --data_start_value. By default the data will have
a starting value of 0.

As an example, if the user used the flag --start_data_value 64, it will
result in the following data: 00000040 00000041 00000042 ...

Reviewed-by: Firas Jahjah <firasj@amazon.com>
Reviewed-by: Daniel Kranzdorf <dkkranzd@amazon.com>
Signed-off-by: Nitzan Lavy <nlavy@amazon.com>
Extending write_bw data validation scenario to offer pattern data
validation.

The data buffer of which the packets consists of contains serial data in
granularity of DWORD. The pattern is taken from an input file, using the
flag --payload_file_path.

The format of the pattern input file is DWORD in hex, followed by a
comma. An example: 0xaaaaaaaa,0xbbbbbbbb,...

The patterns will be used in cyclic way to fill the whole data buffer.

Reviewed-by: Firas Jahjah <firasj@amazon.com>
Reviewed-by: Daniel Kranzdorf <dkkranzd@amazon.com>
Signed-off-by: Nitzan Lavy <nlavy@amazon.com>
@sshaulnv
Copy link
Copy Markdown
Contributor

sshaulnv commented Mar 4, 2026

Hi @NitzanLavy, thanks for the effort and contribution.
We added a data validation capability for both READ and WRITE operations without backpressure the requestor.
would be happy if you could take a look and try it.

@mrgolin
Copy link
Copy Markdown
Contributor

mrgolin commented Mar 4, 2026

@sshaulnv It's unfortunate that a capability meant to be general was pushed without any community review and in a way that pins its availability only to RC mode and only to devices that support ATOMICs.

@sshaulnv
Copy link
Copy Markdown
Contributor

sshaulnv commented Mar 5, 2026

@mrgolin
That is a very fair point, and I appreciate the feedback. you are absolutely right that the current implementation is restricted to RC mode and requires ATOMIC support, which limits its utility as a general purpose validation tool.

The idea behind this approach was to stick to the 'performance-first' goal of perftest. We wanted a data validation that doesnt backpressure the requester, so the benchmark reflects true hardware performance even when validation is toggled on.

Since we need both performance and generality, i suggest to support two modes:

Asynchronous (Default: --data_validation / --data_validation=async): This keeps the performance-optimized logic as the standard behavior for high-throughput data validation use cases.

Synchronous (--data_validation=sync): A general-purpose mode (like @NitzanLavy PR) that works across all transport types and devices, regardless of ATOMIC support.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants