Skip to content

Conversation

@NitzanLavy
Copy link

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 <[email protected]>
Reviewed-by: Daniel Kranzdorf <[email protected]>
Signed-off-by: Nitzan Lavy <[email protected]>
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 <[email protected]>
Reviewed-by: Daniel Kranzdorf <[email protected]>
Signed-off-by: Nitzan Lavy <[email protected]>
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 <[email protected]>
Reviewed-by: Daniel Kranzdorf <[email protected]>
Signed-off-by: Nitzan Lavy <[email protected]>
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.

1 participant