Features
- System performance benchmarking
- Network throughput and latency testing
- Disk I/O stress testing
- System information and diagnostics
- Lightweight with minimal dependecies
What Gets Checked
Operating System & Kernel
- OS name and version detection
- Kernel version and architecture
- System uptime and boot information
CPU Analysis
- Physical cores and logical threads
- CPU model and frequency information
- NUMA configuration
- Performance benchmarking (
sysbench)
Memory Analysis
- Total, available, and used memory
- Swap usage and configuration
- Memory throughput benchmarking
Storage & Filesystem
- Disk type detection (SSD/HDD/NVMe)
- Filesystem information and mount options
- Disk usage and available space
- I/O performance testing (FIO)
Network Configuration
- Network interface enumeration
- IP address configuration
- DNS resolution testing
- Interconnectivity validation
- Throughput testing (iperf3)
Security Analysis
- SELinux: Status, mode, policy, boolean settings
- AppArmor: Profile statistics and enforcement status
- Firewall: UFW, firewalld, or iptables analysis
- SSH Configuration: Port, authentication methods, security settings
- Security Services: Status of critical security services
System Configuration
- ulimit values (open files, stack size)
- Important sysctl parameters
- Process limits and system constraints
Kernel & Journal Log Capture
- Copies
dmesgandjournalctllogs from hosts when present for troubleshooting - Hardware-related message extraction and categorization are available within host scripts
Prerequisites & Dependencies
Operating System Prerequisites
PreFlight currently supports:- Linux-based distributions (RHEL, CentOS, Rocky, Alma, Ubuntu, Debian, Oracle Linux, etc.)
- x86-64 architecture (minimum required)
Dependency Management
There are two dependency groups required for running PreFlight:- Orchestrator (
preFlight.sh) Dependencies - Installed on the machine running the orchestrator script. - Remote Host Dependencies - Installed on target hosts that PreFlight will test.
- These can be automatically installed using
--auto-install-deps(internet required). - If not using automatic installation, all dependencies must be manually installed beforehand.
- These can be automatically installed using
Orchestrator (preFlight.sh) Dependencies
These must be installed manually on the orchestrator machine:
jq- JSON processing for parsing resultsbc- mathematical calculations (compression ratios, analysis)tar/gzip- archive creation (for —compress option)ssh/scp- remote host communicationcoreutils- common utilities (find, grep, awk, sed, etc.)
Remote Host Dependencies
These can be installed automatically using--auto-install-deps, provided the hosts have internet access:
curlbctarfindutilsnet-toolsbind-utilsiperf3- network throughput benchmarkingfio- disk I/O benchmarkingsysbench- CPU and memory benchmarking
SSH
SSH key-based access is required for PreFlight to connect to target hosts. For single-For single-node deployments where PreFlight runs on the same machine it evaluates, you can enable local SSH access with:Quick Start
All Options (Parameters) for the preFlight.sh
Configuration Parameters
| Parameter | Description |
|---|---|
-h, --help | Show help message |
-i, --inventory | Inventory file with host list (text format) or JSON format with hosts and devices Note: The format of this file is explained later. Note: The file can be generated via the util/detect_devices.sh tool. |
-k, --ssh-key | SSH private key file |
-u, --user | SSH user (Default: root) |
-o, --output-dir | Output directory (Default: cluster_results_TIMESTAMP) |
-r, --remote-work-dir | Remote work directory on target hosts (required) |
--timeout SECONDS | SSH timeout (Default: 300) |
-v, --verbose | Enable verbose output |
--vpc | Use internal IPs for interconnectivity. Used for hosts in VPC and external orchestrator. |
--auto-install-deps | Automatically install missing dependencies on hosts |
--keep-host-files | Keep scripts and results on remote hosts (Default: cleanup) |
--keep-host-deps | Keep dependencies installed on hosts after completion |
--compress | Create compressed archive of results directory after completion |
Test Parameters
| Parameter | Description |
|---|---|
--interconnectivity | Test interconnectivity between nodes |
--network-throughput | Test network throughput using iperf3 |
--throughput-server-host | Choose the host that acts as the server in server-to-all throughput iperf3 testDefault: First in inventory file |
--throughput-all-hosts-as-servers | Test network throughput using iperf3 (all-to-all)Note: This option is mutually exclusive with --throughput-server-hostDefault: False |
--cpu-benchmark | Run CPU performance benchmarks |
--memory-benchmark | Run memory performance benchmarks |
--gather-static-info | Gather static system information |
--rdb-ready-checks | Run RDB process-ready checks: - Detects if Regatta binaries are already running (and skips further checks on those hosts) - Checks port availability 8840–8900 - Verifies required file structure (e.g., /usr/lib64/libssl.so symlink)- Confirms required services ( systemd state)- Notes NUMA domains for potential performance impact |
--parallel-fio | Run FIO tests in parallel across all nodes |
--sequential-fio | Run FIO tests sequentially on each node |
--use-default-fio | Use default FIO files from fio_testing directoryNote: If neither option is specified, default behavior uses fio_testing directory Note: This option is mutually exclusive with --fio-files |
--fio-files "file1,file2" | FIO files to be used for testing (comma-separated paths) |
--fio-fill-device | Include fill_device.fio in testing (optional, for device preparation)This will override some of the disk space so that later tests run on a non-empty disk. |
-p, --preset | Use preset configuration (basic, performance, comprehensive, fast, debug) to specify multiple flags together. Read the help page to choose a relevant preset. |
Examples
Inventory File Format
This file specifies the target hosts and which storage devices should be tested on each. It can be generated usingutil/detect_devices.sh.
Example:
FIO Files
Custom fio test files can be used with--fio-files. They must follow the standard fio configuration format:
Output & Results
File Structure Overview
Troubleshooting
SSH Connectivity Issues
Permission Issues
Advanced
Execution Flow
The system uses an orchestrator → hosts model:The orchestrator triggers tests on all target hosts from the inventory file, collects results, and performs cleanup.
Orchestrator Machine
- Script:
preFlight.sh - Purpose: Coordinates all remote tests and aggregates results
- Libraries: All files in
/lib/*.sh - Dependencies: Primarily SSH utilities, JSON tools, and core utilities
Remote Hosts (Target Machines)
- Scripts: Files in
/host_files/directorysystem_readiness_check.sh- Main remote diagnostic scriptfio_benchmark_only.sh-FIOtesting scriptremote_fio_wrapper.sh-FIOwrapper for remote executioninstall_dependencies.sh- Dependency installation script
- Purpose: Execute system tests and diagnostics
- Libraries:
lib/common.sh(copied to hosts) - Dependencies: Performance and system analysis tools
Responsibilities of Individual Scripts
System Readiness Check (host_files/system_readiness_check.sh)
- Invoked by the orchestrator with prepared parameters.
- Performs system diagnostics, CPU/memory benchmarks, and optional disk tests
- Outputs structured JSON consumed by the orchestrator
Cluster Orchestrator (preFlight.sh)
- Multi-machine coordination
- Interconnectivity tests
- Parallel and sequential FIO testing
- Network throughput benchmarks (all-to-all or server-to-all)
- Automatic dependency installation (
--auto-install-deps)
FIO Benchmark Tool (host_files/fio_benchmark_only.sh)
- Disk I/O performance testing
- Supports basic and extensive test modes
- Automatic device detection
- Supports custom test configurations