Files
dex/scripts/benchmark.sh
T

135 lines
3.8 KiB
Bash
Executable File

#!/bin/bash
# LX Engine Benchmark Script
# Tests Pure Go, Pure C++, and TypeScript engines with FIX data
set -e
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PROJECT_ROOT="$( cd "$SCRIPT_DIR/.." && pwd )"
echo "======================================="
echo "LX Engine Benchmark Suite"
echo "======================================="
# Check if we should download FIX data
FIX_DATA_FILE="$PROJECT_ROOT/testdata/fix_sample.csv"
if [ ! -f "$FIX_DATA_FILE" ]; then
echo "Creating sample FIX data..."
mkdir -p "$PROJECT_ROOT/testdata"
# Create sample CSV FIX data
cat > "$FIX_DATA_FILE" << 'EOF'
MsgType,Symbol,OrderID,Side,OrderType,Price,Quantity,Timestamp
D,BTC-USD,1001,1,2,50100.50,0.5,2024-01-15T10:00:00Z
D,BTC-USD,1002,2,2,50105.00,0.3,2024-01-15T10:00:01Z
D,BTC-USD,1003,1,2,50102.00,0.7,2024-01-15T10:00:02Z
D,ETH-USD,1004,2,2,2510.25,2.0,2024-01-15T10:00:03Z
D,BTC-USD,1005,1,2,50099.00,1.0,2024-01-15T10:00:04Z
F,BTC-USD,1002,2,2,0,0,2024-01-15T10:00:05Z
D,BTC-USD,1006,2,2,50103.50,0.4,2024-01-15T10:00:06Z
G,BTC-USD,1003,1,2,50101.50,0.8,2024-01-15T10:00:07Z
D,ETH-USD,1007,1,2,2508.00,1.5,2024-01-15T10:00:08Z
D,BTC-USD,1008,2,2,50098.00,0.6,2024-01-15T10:00:09Z
EOF
echo "Sample FIX data created at $FIX_DATA_FILE"
fi
# Build all engines
echo ""
echo "Building engines..."
echo "-------------------"
# Build Pure Go engine
echo "Building Pure Go engine..."
cd "$PROJECT_ROOT"
CGO_ENABLED=0 go build -o bin/benchmark-go ./cmd/benchmark
# Build Hybrid Go/C++ engine (if available)
if command -v g++ &> /dev/null; then
echo "Building Hybrid Go/C++ engine..."
CGO_ENABLED=1 go build -o bin/benchmark-hybrid ./cmd/benchmark
else
echo "C++ compiler not found, skipping hybrid build"
fi
# Build TypeScript engine
if command -v npm &> /dev/null; then
echo "Building TypeScript engine..."
if [ ! -d "$PROJECT_ROOT/ts-engine/node_modules" ]; then
cd "$PROJECT_ROOT/ts-engine"
npm install
fi
cd "$PROJECT_ROOT/ts-engine"
npm run build 2>/dev/null || echo "TypeScript build skipped (not configured)"
else
echo "npm not found, skipping TypeScript build"
fi
# Run benchmarks
echo ""
echo "Running benchmarks..."
echo "====================="
# Test with synthetic data first (warmup)
echo ""
echo "Warmup with synthetic data (10k messages)..."
"$PROJECT_ROOT/bin/benchmark-go" -iter 1 -warmup 1000
# Benchmark Pure Go
echo ""
echo "1. Pure Go Engine"
echo "-----------------"
time "$PROJECT_ROOT/bin/benchmark-go" \
-data "$FIX_DATA_FILE" \
-engine go \
-iter 3 \
-warmup 2 \
-v
# Benchmark Hybrid Go/C++
if [ -f "$PROJECT_ROOT/bin/benchmark-hybrid" ]; then
echo ""
echo "2. Hybrid Go/C++ Engine"
echo "-----------------------"
time "$PROJECT_ROOT/bin/benchmark-hybrid" \
-data "$FIX_DATA_FILE" \
-engine cpp \
-iter 3 \
-warmup 2 \
-v
fi
# Benchmark TypeScript (if built)
if [ -f "$PROJECT_ROOT/ts-engine/dist/benchmark.js" ]; then
echo ""
echo "3. TypeScript Engine"
echo "--------------------"
cd "$PROJECT_ROOT/ts-engine"
time node dist/benchmark.js \
--data "$FIX_DATA_FILE" \
--iter 3 \
--warmup 2
fi
# Large scale test
echo ""
echo "======================================="
echo "Large Scale Test (100k synthetic messages)"
echo "======================================="
# Generate and test with large dataset
"$PROJECT_ROOT/bin/benchmark-go" -engine all -iter 1 -warmup 1000
echo ""
echo "======================================="
echo "Benchmark Complete!"
echo "======================================="
# Optional: Download real FIX data from public source
echo ""
echo "To test with real FIX data, you can download from:"
echo " - https://www.fixprotocol.org/samples"
echo " - https://github.com/quickfix/quickfix/tree/master/spec/fix"
echo ""
echo "Run with: ./benchmark.sh --data path/to/fix_data.csv"