mirror of
https://github.com/luxfi/dex.git
synced 2026-09-24 00:26:31 +00:00
135 lines
3.8 KiB
Bash
Executable File
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" |