Skip to content

Performance

OxiDex delivers exceptional performance improvements over the Perl-based ExifTool through zero-cost abstractions, parallel processing, and native compiled code.

Benchmark Results

The following benchmarks compare OxiDex against the original Perl ExifTool running on identical hardware.

Summary

ScenarioPerl ExifToolOxiDexSpeedup
Single JPEG Read116.5ms ± 15.6ms31.8ms ± 14.1ms3.7x faster
Batch Processing (1000 files)1911.4ms ± 171.9ms197.6ms ± 3.1ms9.7x faster
Write Operation200.7ms ± 50.4ms23.0ms ± 1.6ms8.7x faster
Format Detection67.3ms ± 13.9ms10.4ms ± 3.6ms6.5x faster

Benchmark Metadata

  • Date: 2025-12-10 04:28:14 UTC
  • Commit: 0574128

System Specifications

  • OS: Linux (Ubuntu 22.04)
  • CPU: x86_64 (4 cores)
  • Memory: 8GB RAM
  • Perl ExifTool: latest version
  • OxiDex: version 1.1.0

Live Benchmark Reports

View detailed interactive benchmark results from our CI/CD pipeline:

These reports are automatically generated by Criterion.rs on every commit to main and include:

  • Performance graphs with statistical analysis
  • Historical trend comparisons
  • Outlier detection
  • Detailed timing breakdowns

Key Performance Improvements

1. Single File Operations (3.7x faster)

Zero-cost abstractions and compiled code eliminate Perl interpreter overhead:

  • No runtime interpretation
  • Direct memory access
  • Optimized binary parsing with nom

2. Batch Processing (9.7x faster)

Parallel processing with Rayon leverages all CPU cores:

  • Process 1000 files in 197.6ms vs 1911.4ms
  • Linear scaling with CPU core count
  • Efficient work stealing scheduler

3. Write Operations (8.7x faster)

Efficient binary manipulation and atomic file operations:

  • In-place metadata updates
  • Memory-mapped I/O with memmap2
  • Atomic file writes prevent corruption

4. Format Detection (6.5x faster)

Native compiled code dramatically outperforms interpreted Perl:

  • Efficient magic byte matching
  • Compile-time optimizations
  • CPU cache-friendly algorithms

Reproducing Benchmarks

Comparative Benchmarks (vs Perl ExifTool)

Run the comparative benchmark suite:

bash
# Install prerequisites
brew install hyperfine exiftool  # macOS
# or
sudo apt install hyperfine libimage-exiftool-perl  # Ubuntu

# Build OxiDex in release mode
cargo build --release

# Run comparison benchmarks
./benches/exiftool_comparison.sh

# View results
cat benches/benchmark_results.md

Library Micro-Benchmarks

Run detailed benchmarks for internal operations:

bash
# Run all benchmarks
cargo bench

# Run specific benchmark
cargo bench format_detection
cargo bench jpeg_segment_parsing
cargo bench tiff_ifd_parsing
cargo bench full_read_metadata

View HTML reports:

bash
# macOS
open target/criterion/report/index.html

# Linux
xdg-open target/criterion/report/index.html

# Windows
start target/criterion/report/index.html

Profiling

For detailed profiling information, see Profiling Guide.

Performance Tips

For Maximum Throughput

  1. Use batch processing: Process multiple files in one command for parallelism
  2. Extract specific tags only: Use -TagName to avoid parsing entire file
  3. Binary output: Use -b for binary tag values (faster than formatting)
  4. Disable verbose output: Use -q for quiet mode

Example: Fast Batch Extraction

bash
# Extract just Make, Model, DateTimeOriginal from 10,000 JPEGs
oxidex -Make -Model -DateTimeOriginal -csv -r photos/ > metadata.csv

Ongoing Optimization

We continuously monitor and improve performance:

  • Automated benchmarks on every commit
  • Profiling with samply
  • Flamegraph analysis
  • Memory allocation tracking

See our optimization strategy for current focus areas.

Released under the GPL-3.0 License.