This wrapper facilitates the automated execution of the PassMark PerformanceTest benchmark for Linux. PassMark PerformanceTest is a standard metric for objectively benchmarking a Linux system using a variety of different speed tests, measuring CPU and memory performance across multiple test categories and comparing the results to others.
The wrapper provides:
- Automated PassMark extraction and execution.
- Support for x86_64 (AMD/Intel) and aarch64 (ARM) architectures.
- Automatic architecture-specific binary selection.
- Result collection, processing, and verification.
- CSV and JSON output formats.
- System configuration metadata capture.
- Integration with test_tools framework.
- Optional Performance Co-Pilot (PCP) integration.
PassMark Options:
(No passmark-specific options beyond the general options below.)
General test_tools options:
--home_parent <value>: Parent home directory. If not set, defaults to current working directory.
--host_config <value>: Host configuration name, defaults to current hostname.
--iterations <value>: Number of times to run the test, defaults to 1.
--run_user: User that is actually running the test on the test system. Defaults to current user.
--sys_type: Type of system working with (aws, azure, hostname). Defaults to hostname.
--sysname: Name of the system running, used in determining config files. Defaults to hostname.
--tuned_setting: Used in naming the results directory. For RHEL, defaults to current active tuned profile.
For non-RHEL systems, defaults to 'none'.
--use_pcp: Enable Performance Co-Pilot monitoring during test execution.
--tools_git <value>: Git repo to retrieve the required tools from.
Default: https://github.com/redhat-performance/test_tools-wrappers
--usage: Display this usage message.
The passmark_run script performs the following workflow:
-
Environment Setup:
- Clones the test_tools-wrappers repository if not present (default: ~/test_tools).
- Sources error codes and general setup utilities.
- Detects system architecture (x86_64 or aarch64).
-
Package Installation:
- Installs required dependencies via package_tool (bc, numactl, git, zip, unzip, etc.).
- Dependencies are defined in passmark.json for different OS variants (RHEL, Ubuntu, SLES, Amazon Linux).
- On Ubuntu, adds the universe repository and creates a libncurses.so.5 compatibility symlink.
- On SLES, activates the legacy module via SUSEConnect.
-
Binary Selection:
- x86_64 Systems: Extracts and uses
pt_linux_x64binary. - aarch64 Systems: Extracts and uses
pt_linux_arm64binary.
- x86_64 Systems: Extracts and uses
-
Library Setup:
- Verifies libncurses.so.5 is available (required by the PassMark binary).
- Creates a symlink from libncurses.so.6 to libncurses.so.5 if needed.
- Searches /usr/lib64 and /usr/lib for the library.
-
Test Execution:
- Runs the PassMark binary with
-r 3flag (3 internal runs per iteration). - Executes for specified number of iterations.
- Captures raw YAML output (results_all.yml) per iteration.
- Captures raw text output per iteration.
- Runs the PassMark binary with
-
Data Collection:
- Captures system configuration via gather_data.
- Records timestamps for each test run.
- Optionally records PCP performance data.
-
Result Processing:
- Extracts performance metrics from YAML output files.
- Computes averages across iterations for each test category.
- Generates passmark.summary with aggregated results.
- Generates CSV file with test names and operations per second.
- Creates JSON output for verification.
- Filters architecture-specific tests (e.g., CPU_avx skipped on ARM).
-
Verification:
- Validates results against Pydantic schema (results_schema.py).
- Ensures all required fields are present and valid.
- Uses csv_to_json and verify_results from test_tools.
-
Output:
- Saves all raw output files, processed CSV/JSON, and system metadata.
- Optionally saves PCP performance data.
- Archives results to configured storage location via save_results.
Location of underlying workload: https://www.passmark.com/products/pt_linux/index.php
RHEL/Amazon Linux: bc, numactl, perf, git, zip, unzip
Ubuntu: bc, numactl, git, zip, unzip, libncurses5
SLES: bc, libnuma1, perf, git, zip, unzip, libncurses5
To run:
git clone https://github.com/redhat-performance/passmark-wrapper
cd passmark-wrapper/passmark
./passmark_runThe script will automatically detect your CPU architecture and select the appropriate binary.
PassMark PerformanceTest for Linux runs a comprehensive suite of CPU and memory tests:
| Test | Description |
|---|---|
| CPU_INTEGER_MATH | Integer arithmetic operations |
| CPU_FLOATINGPOINT_MATH | Floating-point arithmetic operations |
| CPU_PRIME | Prime number search |
| CPU_SORTING | Data sorting algorithms |
| CPU_ENCRYPTION | Encryption/decryption operations |
| CPU_COMPRESSION | Data compression operations |
| CPU_SINGLETHREAD | Single-threaded performance |
| CPU_PHYSICS | Physics simulation |
| CPU_MATRIX_MULT_SSE | Matrix multiplication using SSE |
| CPU_mm | MMX/SSE multimedia extensions |
| CPU_sse | SSE instructions |
| CPU_fma | Fused multiply-add instructions |
| CPU_avx | AVX instructions (x86_64 only) |
| CPU_avx512 | AVX-512 instructions (x86_64 only) |
| Test | Description |
|---|---|
| m_CPU_enc_SHA | SHA hashing performance |
| m_CPU_enc_AES | AES encryption performance |
| m_CPU_enc_ECDSA | ECDSA signing performance |
| Test | Description |
|---|---|
| ME_ALLOC_S | Memory allocation (small) |
| ME_READ_S | Memory read (small) |
| ME_READ_L | Memory read (large) |
| ME_WRITE | Memory write |
| ME_LARGE | Large memory operations |
| ME_LATENCY | Memory latency |
| ME_THREADED | Threaded memory operations |
| Test | Description |
|---|---|
| SUMM_CPU | Overall CPU score |
| SUMM_ME | Overall memory score |
Each test reports an Operations metric. Higher values indicate better performance. Results are averaged across iterations.
The results directory contains:
- results_passmark.csv: CSV file with test names and performance metrics.
- results_passmark.json: JSON conversion of CSV results.
- passmark.summary: Aggregated summary of all test results averaged across iterations.
- passmark_<iter>.out: Raw output from each PassMark iteration.
- results_all_<iter>.yml: YAML results from PassMark binary for each iteration.
- test_results_report: Simple status file (contains "Ran" or "Failed").
- PCP data (if --use_pcp option used): Performance Co-Pilot monitoring data in
/tmp/pcp_passmark_<YYYY.MM.DD-HH.MM.SS>/.
./passmark_runThis runs with:
- Automatic architecture detection and binary selection
- 1 iteration
- 3 internal runs per iteration
./passmark_run --iterations 3Runs the benchmark 3 times and averages results across iterations.
./passmark_run --use_pcpCollects Performance Co-Pilot data during the run.
./passmark_run --tools_git https://github.com/my-org/test_tools-wrappersUses a custom test_tools-wrappers repository.
./passmark_run --iterations 5 --use_pcp --sys_type awsRuns 5 iterations with PCP monitoring on an AWS system.
The script uses standardized error codes from test_tools error_codes:
- 0: Success.
- 101 (E_GENERAL): General execution errors (git clone failure, ZIP extraction failures, missing libncurses libraries, binary execution failures).
- 103 (E_USAGE): Invalid usage/arguments.
Exit codes indicate specific failure points for automated testing workflows.
The PassMark PerformanceTest Linux binary is not included in this wrapper. The appropriate ZIP file (pt_linux_x64.zip or pt_linux_arm64.zip) must be placed in ~/uploads/ on the target system before running the script. See the PassMark website for licensing and download.
- x86_64: Full support for AMD and Intel CPUs. Runs all test categories including AVX and AVX-512.
- aarch64: Full support for ARM CPUs. AVX-related tests are automatically filtered from results.
- The PassMark binary requires libncurses.so.5, which may not be present on newer distributions.
- The wrapper automatically creates a compatibility symlink from libncurses.so.6 if needed.
- On Ubuntu, the universe repository is enabled to ensure library availability.
- On SLES, the legacy module is activated via SUSEConnect.
- RHEL/Amazon Linux: Standard package installation via package_tool.
- Ubuntu: Adds universe repository, creates libncurses.so.5 symlink at
/usr/lib/x86_64-linux-gnu/. - SLES: Activates legacy module via
SUSEConnect --product sle-module-legacy/<version>/<arch>.
- Run multiple iterations to verify consistency.
- Ensure system is idle (no other workloads) for best results.
- Consider the active tuned profile on RHEL systems.
- Each iteration runs 3 internal PassMark runs for averaging.
- Activated via
--use_pcpoption. - Captures per-iteration metrics for all CPU, memory, and cryptography tests.
- PCP data is saved alongside results for post-run analysis.
- Uses default PCP configuration from test_tools.
- If the binary fails to run, verify libncurses.so.5 is available.
- If extraction fails, verify the PassMark ZIP file is present in the uploads directory.
- If results are missing, check that results_all.yml was generated by the PassMark binary.
- Use
--use_pcpto collect detailed performance counters for analysis.