name: AmigaDiskBench description: a Reaction based disk benchmarking utility version: 2.5.3 author: derfs submitter: derfs url: https://github.com/derfsss/AmigaDiskBench category: utility/benchmark replaces: utility/benchmark/amigadiskbench.lha license: Other minosversion: 4.1 distribute: yes fileid: 13723 hend: AmigaDiskBench ============== AmigaDiskBench is a modern, high-performance disk benchmarking utility specifically designed for AmigaOS 4.1 Final Edition. It provides a robust, ReAction-based GUI to measure, analyze, and visualize the performance of various storage devices, filesystems, and hardware configurations. This project was developed with the assistance of AI agents (Claude by Anthropic), which contributed to code design, implementation, and documentation throughout the development process. Key Features ------------ 1. Benchmark Profiles Choose from a variety of tailored test scenarios: - Sprinter: Fast, small file I/O and metadata performance test. - Marathon: Sustained long-duration test to check for thermal throttling or buffer issues. - Heavy Lifter: Large file sequential throughput with varying chunk sizes. - Daily Grind: A pseudo-random mix of operations simulating real-world OS usage. - Profiler: Detailed filesystem metadata performance analysis. - Standard Tests: Sequential Read/Write, Random 4K Read/Write, and Mixed 70/30. 2. Flexible Pass Averaging Choose how multi-pass results are combined, via Preferences: - All Passes: Simple arithmetic mean across every pass. - Trimmed Mean: Excludes the single best and worst pass, averages the rest (requires 3+ passes). - Median: Sorts all passes and picks the single middle value -- eliminates outliers without distorting the average. The currently active method is always shown on the Benchmark tab next to the Passes count. 3. Pluggable Visualization Profiles Analyze your data with a powerful, profile-driven graphing engine. Chart definitions are loaded from .viz files in the Visualizations/ folder -- no recompilation needed to add or customize charts. Nine Built-in Profiles: - Scaling: Performance vs. block size -- see how chunk size affects throughput. - Trend: Track performance stability over time with linear trend lines. - Battle: Head-to-head comparison of multiple drives (collapsed to mean per block size). - Workload: Compare different test types (Read vs Write, Seq vs Random). - Hybrid: Professional diagnostic view overlaying Throughput (MB/s) bars with IOPS lines. - Peak Performance: Maximum throughput per drive with SATA III and USB 2.0 reference lines. - IOPS Smoothed: Random I/O operations per second with moving average trend. - Scaling Curve: Polynomial curve fit showing how throughput scales with block size. - Filesystem: Compare filesystem performance across all drives (grouped by filesystem type). Profile Features: - Chart type selection (line, bar, hybrid). - Configurable X/Y axes with custom labels and auto-scaling or fixed ranges. - Series grouping by drive, test type, block size, filesystem, hardware, vendor, app version, or averaging method. - Data collapse aggregation (mean, median, min, max) to reduce multiple runs to one data point. - Trend lines: linear regression, moving average, or polynomial curve fit. - Reference line annotations with labels. - Custom color palettes (up to 16 colors per profile). - Per-profile filters: include/exclude by test type, block size, volume, filesystem, hardware, vendor, product, averaging method, and app version. - Minimum pass count, MB/s range, and duration range filters. - Filtering: On-screen filters for Volume, Test Type, Date Range, and App Version remain active on top of profile filters. - Reload Profiles: Button to rescan the Visualizations/ folder without restarting the application. - VALIDATE Mode: Run with VALIDATE as a Shell argument or icon tooltype to check all .viz files for errors without launching the benchmark GUI. Reports line numbers and severity. - Interactive: Hover over data points for precise values. 4. Drive Health Monitoring Keep an eye on your hardware's physical status: - S.M.A.R.T. Analysis: Reads raw attribute data directly from the drive via ATA PASS-THROUGH. - Health Indicators: Real-time display of Temperature, Power-On Hours, and overall Health Status. - Assessment: Automatic interpretation of critical attributes (Reallocated Sectors, Spin Retry Count, etc.). 5. Bulk Testing Automate your benchmarking workflow: - Queue Jobs: Select multiple drives and add them to a batch queue. - Automation: Options to "Run All Test Types" and "Run All Block Sizes" (4K to 1M) automatically. - Progress Tracking: Dedicated Fuel Gauge to track overall batch progress. - Queue summary shows test name, pass count, averaging method, and block size. 6. History & Data Management - Persistent Storage: All results are automatically saved to AmigaDiskBench_History.csv. - Comparison: Select any two results to generate a delta report (Speedup/Slowdown %). - Export: Export specific datasets to CSV for external analysis. - Reports: Generate global summary reports of all test activity. 7. Session Log Track exactly what AmigaDiskBench is doing in real time: - Timestamped Entries: Every event (benchmark start, per-pass result, completion, failure) is logged with an [HH:MM:SS] timestamp. - Live Updates: New log lines appear automatically as benchmarks run -- no manual refresh needed. - Context Menu: Right-click the log to access Select All and Copy. - Clear Log: Wipes the session transcript and starts a fresh log. - Copy to Clipboard: Copies the full log text to the system clipboard for pasting into a text editor or email. 8. Detailed Disk Information Inspect the physical and logical structure of your storage: - Tree View: Hierarchical display organized as Fixed Drives, USB Drives, and Optical Drives. Each physical controller appears once (e.g., a1ide.device); partitions show their volume/device name and unit number. - Disk Details: Click a drive node to see the disk name (vendor/product/ revision), bus type, capacity, geometry, and RDB presence. - Partition Details (mounted): Volume Name, Size, Used/Free space, Filesystem type, and Block count. - Partition Details (unmounted): DOS device name, size from RDB geometry, and filesystem type -- no mounting required. - Real-Time Updates: Refresh button to rescan when devices are added or removed. Requirements ------------ * AmigaOS 4.1 Final Edition (or newer). * Reasonably fast storage device for meaningful results (SSD/NVMe recommended). Installation ------------ No special installation is required. 1. Extract the archive to a location of your choice (e.g., Work:Utilities/). This creates an AmigaDiskBench drawer containing the executable, icons, readme, and Visualizations/ folder. 2. The application requires at least one valid .viz file in the Visualizations/ folder to start. 3. Launch AmigaDiskBench from the icon. Visualization Profile Format ----------------------------- Each .viz file is an INI-style text file placed in the Visualizations/ folder. Files are loaded alphabetically on startup. Lines starting with # are comments. All key names and enum values are case-insensitive. String values may be quoted ("like this") or unquoted. Filters use case-insensitive substring matching. Quick Example: [Profile] Name = "Scaling" Description = "Performance vs. block size" ChartType = line [XAxis] Source = block_size Label = "Block Size" [YAxis] Source = mb_per_sec Label = "MB/s" AutoScale = yes [Series] GroupBy = drive MaxSeries = 16 SortX = yes Collapse = none [Filters] ExcludeTest = profiler MinPasses = 1 [TrendLine] Style = linear PerSeries = yes [Annotations] ReferenceLine = 600, "SATA III" [Colors] Color = 0x00FF00 Color = 0xFF6600 Complete Section Reference .......................... [Profile] (required) Name = string (required) Display name in profile chooser. Profile is skipped if missing. Description = string Tooltip / description text. ChartType = line | bar | hybrid Default: line. "hybrid" auto-enables the secondary Y-axis. [XAxis] Source = block_size | timestamp | test_index Default: test_index. "block_size" sorts numerically; "timestamp" and "test_index" plot chronologically. Label = string Default: "X". X-axis title below the chart. [YAxis] Source = mb_per_sec | iops | min_mbps | max_mbps | duration_secs | total_bytes Default: mb_per_sec. Which result field to plot. Label = string Default: "MB/s". Y-axis title on the left. AutoScale = yes | no Default: yes. When "no", uses Min/Max for a fixed Y range. Min = decimal Fixed Y minimum (only when AutoScale = no). Max = decimal Fixed Y maximum (only when AutoScale = no). [Series] GroupBy = drive | test_type | block_size | filesystem | hardware | vendor | app_version | averaging_method Default: drive. How data points are grouped into colored series. SortX = yes | no Default: yes for block_size, no otherwise. Sort data points by X value within each series. MaxSeries = integer Default: 0 (unlimited). Cap the number of series shown. Collapse = none | mean | median | min | max Default: none. When multiple data points share the same X value, reduce them to a single point using the chosen method. [Filters] Filters control which benchmark results are included in the chart. Each Exclude*/Include* key can appear multiple times. Matching is case-insensitive substring. Test type filters (matched against canonical CSV names): ExcludeTest = name Exclude results matching this test type. IncludeTest = name Include only results matching these types. Valid test type names: Sprinter, HeavyLifter, Legacy, DailyGrind, Sequential, Random4K, Profiler, SequentialRead, Random4KRead, MixedRW70/30 Block size filters (matched against display strings): ExcludeBlockSize = name Exclude results with this block size. IncludeBlockSize = name Include only these block sizes. Valid block size names: 4K, 16K, 32K, 64K, 256K, 1M, Mixed Other data filters: ExcludeVolume / IncludeVolume Matched against volume name (e.g., System, DH0). ExcludeFilesystem / IncludeFilesystem Matched against filesystem type (e.g., SFS/00, NGF/00). ExcludeHardware / IncludeHardware Matched against device name (e.g., ahci.device). ExcludeVendor / IncludeVendor Matched against drive vendor string. ExcludeProduct / IncludeProduct Matched against drive product string. ExcludeAveraging / IncludeAveraging Matched against averaging method. ExcludeVersion / MinVersion Matched against app version string. Valid averaging method names: AllPasses, TrimmedMean, Median Numeric threshold filters: MinPasses = integer Minimum passes a result must have. MinMBs = decimal Minimum MB/s to include. MaxMBs = decimal Maximum MB/s to include. MinDurationSecs = decimal Minimum test duration in seconds. MaxDurationSecs = decimal Maximum test duration in seconds. DefaultDateRange = today | week | month | year | all Default: all. Initial date range when profile selected. [Overlay] SecondarySource = any value Enables the secondary Y-axis (right side). Used by hybrid charts for IOPS overlay. SecondaryLabel = string Default: "IOPS". Right Y-axis label. [TrendLine] Style = none | linear | moving_average | polynomial Default: none. Trend line algorithm. Window = integer Default: 3. Window size for moving average (points on each side). Degree = 2 | 3 Default: 2. Polynomial degree (clamped to 2-3). Uses Gaussian elimination. PerSeries = yes | no Default: no. Draw a separate trend line for each series, or one global trend. [Annotations] ReferenceLine = value, "Label" Draws a horizontal dashed line at the given Y value with a text label. Up to 8 per profile. Example: ReferenceLine = 600, "SATA III Max" [Colors] Color = 0xRRGGBB Hex color for series (in order). Up to 16 per profile. When omitted, the built-in 8-color palette is used. Notes: - A profile must have a [Profile] section with a Name key to be loaded. - Boolean values accept yes/true/1 for true; anything else is false. - Exclude*/Include* modes are mutually exclusive per category. If you use IncludeTest, only those tests are shown. If you use ExcludeTest, everything except those tests is shown. Do not mix both for the same category. - On-screen GUI filters (Volume, Test Type, Date Range, App Version) are applied on top of profile filters. - Use VALIDATE mode (Shell argument or icon tooltype) to check your .viz files for errors before launching. - See the 9 included .viz files in Visualizations/ for working examples covering all features. Comprehensive Guide ------------------- 1. Running Benchmarks The Benchmark tab is where performance testing happens. - Target Drive: Select the volume or partition you wish to test. Note that depending on the filesystem, some tests require write access. - Test Type: - Standard Tests: Choose Sequential Read/Write, Random 4K Read/Write, or a Mixed 70/30 (Read/Write) workload. - Profiles: Use preset profiles like "Sprinter" for quick I/O checks, "Marathon" for sustained thermal testing, or "Daily Grind" for everyday usage simulation. - Parameters: Adjust the Block Size (e.g., 4K, 32K, 1M) and the number of Passes. Higher passes yield more reliable averages. - Average Method: Shown next to Passes. Change it in Preferences. - Execution: Click Run Benchmark. Monitor the Traffic Light (green/yellow/red) for current status, and the Fuel Gauge for overall progress. - Quit Safety: If you attempt to close the application while a benchmark is running, a confirmation dialog will ask whether you really want to quit. 2. Bulk Testing / Queue For extensive testing sessions, use the Batch Queue. - Click Add to Queue to stockpile tests. - Alternatively, use Add All Tests or Add All Block Sizes to quickly generate a matrix of workloads for the selected drive. - Click Start Queue to let AmigaDiskBench run them sequentially. 3. Visualizing Results The Visualization tab brings your data to life. - Profile Chooser: Select a visualization profile from the dropdown. Each profile defines its own chart type, axes, grouping, filters, trend lines, and colors. - Filters: On-screen filters for Volume, Test Type, and Date Range further narrow the displayed data. - Color By: Automatically set by the selected profile's GroupBy setting (e.g., Drive, Filesystem, Test Type). Shown as a read-only label. - Reload Profiles: Click to rescan the Visualizations/ folder for new or modified .viz files. - Hover: Move your mouse over any data point on the graph to reveal precise MB/s and IOPS metrics. 4. Preferences Open Preferences from the menu to configure defaults applied to all new benchmarks: - Default Drive: The volume pre-selected when the application starts. - Default Test / Block Size / Passes: Starting values for the benchmark controls. - Average Method: How pass results are combined: - All Passes -- Simple mean. - Trimmed Mean -- Excludes the fastest and slowest pass before averaging. - Median -- Uses only the middle pass value from a sorted set. - CSV Path: Location of the persistent history file. 5. Session Log The Log tab provides a live, timestamped record of everything that happens during a session. - Viewing: Switch to the Log tab at any time. New entries appear automatically as benchmarks run -- no need to manually refresh. - Each line is prefixed with an [HH:MM:SS] timestamp. - Logged events include: benchmark start (test type, block size, target path), per-pass progress updates, final result (MB/s, pass count), failures, and bulk queue start/complete summaries. - Select All: Right-click the log area and choose "Select All" from the context menu (or use the keyboard shortcut) to highlight all text. - Copy: Right-click and choose "Copy" to copy selected text to the clipboard, or use the Copy to Clipboard button to copy the entire log regardless of selection. - Clear Log: Click the "Clear Log" button to wipe the transcript and start fresh. The session header is automatically re-inserted so the log is never left completely blank. 6. Disk Information The Disk Info tab provides deep hardware enumeration. - Navigation: Use the left-side tree view. Drives are categorized logically into Fixed Drives, USB Drives, and Optical Drives. - Disk Details: Click a drive node to see the disk name (vendor, product, revision from SCSI inquiry), Bus Type, Geometry, Capacity, and RDB status. - Mounted Partitions: Click a mounted partition to see Volume Name, Used/Free space, total Size, and DOS Type Identifier (e.g., SFS/00 (0x53465300)). - Unmounted Partitions: Click an unmounted partition to see its DOS device name, size from RDB geometry, and filesystem type -- no mount required. 7. Drive Health The Drive Health tab communicates directly with S.M.A.R.T.-enabled drives. - Status Check: Click Refresh Health Data to retrieve the latest vital statistics. - Interpretation: The tool automatically interprets raw attribute data (Reallocated Sectors, Power-On Hours, etc.) and provides a human-readable health assessment. 8. History and Exporting - History View: Review all past benchmarks in a tabular format. - Comparison: Select any two rows and click Compare Selected to generate a delta report showing percentage improvements or regressions. - Exporting: Use Export to CSV to save the raw data for analysis in external spreadsheet software. 9. VALIDATE Mode Run AmigaDiskBench with the VALIDATE argument (from Shell) or add VALIDATE as an icon tooltype to check all .viz profile files for syntax errors, unknown keys, invalid values, and missing required fields. The benchmark GUI does not open -- only a validation report is shown. - Shell: Outputs a formatted report with line numbers and severity to stdout. - Workbench: Opens a standalone window with a scrollable list of findings. Building from Source -------------------- AmigaDiskBench is open source and can be cross-compiled using a Docker-based toolchain (GCC 11). Prerequisites * WSL2 (Windows) or Linux/macOS. * Docker installed and running. * Walkero's Amiga GCC 11 Image (walkero/amigagccondocker:os4-gcc11). Build Commands (from WSL2): cd /mnt/w/Code/amiga/antigravity/projects/AmigaDiskBench # Clean previous build docker run --rm -v /mnt/w/.../AmigaDiskBench:/src -w /src walkero/amigagccondocker:os4-gcc11 make clean # Build docker run --rm -v /mnt/w/.../AmigaDiskBench:/src -w /src walkero/amigagccondocker:os4-gcc11 make This will produce the AmigaDiskBench executable in the build/ folder. Authors ------- * Team Derfs - Core Development Version History --------------- v2.5.3 (Current) - VALIDATE mode improvements: Workbench validation window now displays columns at correct proportions. Message column auto-fits to window width with horizontal scrolling for long messages. - VALIDATE usage: Run "AmigaDiskBench VALIDATE" from Shell, or add the tooltype VALIDATE to the program's icon in the Information editor. The benchmark GUI does not open -- only a validation report is shown (text report in Shell, ReAction window from Workbench). - Bug fixes: - Blank window on Workbench launch: ReadArgs() was guarded by Output() != NULL, but Output() can return a valid handle from Workbench when a default console is configured. ReadArgs then blocked waiting for interactive input, displaying an empty CON: window. Fixed by using IDOS->Cli() (the canonical AmigaOS 4 method) to detect Shell vs Workbench. - VALIDATE mode Shell/Workbench detection used the same unreliable Output() check. Fixed to use IDOS->Cli(). - Profile validator falsely warned about DefaultDateRange and MinVersion keys in the [Filters] section. Both are valid parser-recognized keys that were missing from the validator's known-key list. - Visualization hover tooltip and chart legend now replace underscores with spaces in volume names (e.g., FFS2_DH8_2 displays as FFS2 DH8 2). - Icon cleanup: Program icon now ships with a single (VALIDATE) tooltype (commented out by default). Old template tooltypes removed. Drawer and folder icons included for the distribution archive. - Makefile "install" target: Now produces a complete distribution layout with drawer icon, program icon, Visualizations folder icon, and readme. v2.5.2 - Pluggable Visualization Profiles: Chart definitions are now loaded from .viz files in the Visualizations/ folder. Nine built-in profiles ship with the application: Scaling, Trend, Battle, Workload, Hybrid, Peak Performance, IOPS Smoothed, Scaling Curve, and Filesystem. - Profile-driven rendering: Each profile defines chart type (line/bar/hybrid), X/Y axes, series grouping, data filters, trend lines, reference line annotations, custom color palettes, and collapse aggregation -- all without recompilation. - Trend lines: Linear regression, moving average, and polynomial curve fitting, rendered per-series or globally. Coordinate clamping prevents drawing outside the chart area. - Collapse aggregation: Reduce multiple runs at the same X value to a single data point using mean, median, min, or max. - Reference line annotations: Horizontal dashed lines with labels at user-defined Y values (e.g., SATA III () 600 MB/s). - Custom color palettes: Up to 16 hex colors per profile. - Reload Profiles button: Rescan the Visualizations/ folder for new or modified profiles without restarting. - VALIDATE mode: Shell argument or icon tooltype to validate all .viz files and report errors with line numbers and severity. - Quit confirmation dialog: Attempting to close the application while a benchmark is running now shows a Yes/No confirmation prompt. - IOPS calculation corrected: IOPS is now computed as total I/O operations divided by total elapsed time (true ops/second). Previously, workloads reported a fixed operation count of 1, and the engine averaged ops per pass rather than per second. - Bug fixes: - Random 4K Write/Read and Mixed R/W benchmarks failed at 1M block size: uint32 total_bytes overflowed (4096 ops x 1M = exactly 2^32, wrapping to 0). Fixed by using uint64 internally with a cap to UINT32_MAX. - CSV history records silently truncated when field data exceeded the 1024-byte line buffer (producing malformed rows). Increased to 2048 bytes with overflow detection -- oversized records are now skipped with a warning in the session log. - Benchmark failure messages in the session log were generic ("check target volume"). Now reports the specific failure reason: setup failure (file creation, device open, or buffer allocation), unknown test type, or all passes producing zero bytes -- with test name, target path, and block size. - Crash on exit while benchmarks are running (pending worker messages not drained before freeing reply port). - Blank window on Workbench launch (ReadArgs called unconditionally, failing when launched from icon). - Crash in CollapseSeriesPoints when series had no data points. - Chart lines drawn outside the graph area (missing coordinate clamping in line/hybrid renderers). - Duplicate X-axis labels when all data points share the same block size. - Color By dropdown removed -- now a read-only label driven by the active profile's GroupBy setting. - Unused filter dropdowns removed from the visualization tab. v2.4.1 - Session Log tab: A new scrollable, timestamped log panel records all benchmark activity in real time -- start, per-pass progress, results, and failures -- with [HH:MM:SS] timestamps. - Live log updates: Cross-process Exec message passing delivers log entries from the worker process to the GUI without polling or unsafe gadget access. - Log context menu: Right-click for Select All and Copy. - Copy to Clipboard button: Writes the entire log to the system clipboard via IFFParse (FORM FTXT/CHRS format). - Clear Log button: Wipes the transcript and re-inserts the session header. - Bug fix: Classic menu selections were silently swallowed when a context menu was also present. Fixed by checking WINDOW_MenuType before routing the WMHI_MENUPICK event. v2.3.7 - S.M.A.R.T. column auto-fit: Attribute Name column now correctly expands to show full text without truncation. - Average method display: Benchmark Control row shows a single combined label (e.g., "Average: Median (Middle Value Only)") next to the Passes count. - Bulk tab Settings text: Queue summary now includes the averaging method name, e.g., Settings: Sprinter / 10 Passes (Median) / 4K. - Disk Info improved naming: Detail panel uses precise labels -- "Disk Name" (SCSI identity), "Partition Name" (unmounted), "Volume Name" (mounted). - Disk Info unmounted partitions: Clicking an unmounted partition now shows its device name, size (from RDB geometry), and filesystem type. - Disk Info underscore sanitization: Filesystem underscores shown as spaces. - Disk Info DOS type fix: 4th byte shown as ASCII where printable (e.g., SWAP instead of SWA/50). - Bug fixes including DSI crash on Disk Info tab page switching. v2.3.4 - v2.3.6 - Flexible Pass Averaging: Three averaging options -- All Passes, Trimmed Mean, and Median. - Average Method always visible on the Benchmark tab next to Passes count. - Disk Info tree restructured: device name at root, VolumeName (Unit N) at partition level, multiple units of the same controller merged. - Bug fixes. v2.2.16 - Disk Information Center: New hierarchical view of all physical storage devices, categorized as Fixed, USB, and Optical. - True Hardware Scanning: Engine directly probes the system to map logical partitions to physical driver units. - Enhanced CD/DVD Detection: Safeguards to prevent system freezes when querying optical drives. - Filesystem Display: Standardized DOS type formatting to ABC/XX hex notation. - Bug fixes. v2.2.14 - Release Optimization: Debug logging disabled for maximum performance. v2.2.11 - Architectural Foundation: Multi-threaded benchmark engine, CSV history persistence. v2.2.10 - Advanced Graphing: Visualization engine overhauled; X-axis = Block Size; auto-refresh on tab switch. - Variable Workloads: Random I/O tests support dynamic user-selected block sizes. - Visual Feedback: Traffic Light status indicator and Fuel Gauge progress bar. - Bug fixes.