From f9492b2c3a81d64a1ce3e298c6d2f55e95f3abde Mon Sep 17 00:00:00 2001 From: Wood Date: Mon, 6 Oct 2025 23:41:12 +0800 Subject: [PATCH] peformance optimization --- EXTREME_PERFORMANCE.md | 441 ----------------------------------- PERFORMANCE.md | 319 ------------------------- PERFORMANCE_INTEGRATION.md | 208 ----------------- PERFORMANCE_OPTIMIZATIONS.md | 298 ----------------------- 4 files changed, 1266 deletions(-) delete mode 100644 EXTREME_PERFORMANCE.md delete mode 100644 PERFORMANCE.md delete mode 100644 PERFORMANCE_INTEGRATION.md delete mode 100644 PERFORMANCE_OPTIMIZATIONS.md diff --git a/EXTREME_PERFORMANCE.md b/EXTREME_PERFORMANCE.md deleted file mode 100644 index fa7716e..0000000 --- a/EXTREME_PERFORMANCE.md +++ /dev/null @@ -1,441 +0,0 @@ -# 🚀 极致性能优化 - 最终报告 - -## 概述 -通过集成 `src/perf` 目录的所有极致优化技术,实现了**微秒级**的交易延迟。 - ---- - -## 已实施的深度优化 - -### 1. 零分配序列化器 ⚡ - -**文件**: `src/swqos/optimized_serialization.rs` - -**技术**: -- 10,000 个预分配缓冲区池 -- 零分配 bincode 序列化 -- 缓冲区自动回收重用 -- SIMD 优化的 Base64 编码 - -**代码示例**: -```rust -// 旧代码 (每次分配) -let serialized = bincode::serialize(&transaction)?; -let encoded = STANDARD.encode(&serialized); - -// 新代码 (零分配) -let (encoded, sig) = serialize_transaction_zero_alloc( - &transaction, - UiTransactionEncoding::Base64 -).await?; -``` - -**性能收益**: -- 序列化延迟: **500μs → 20μs** (25x 提升) -- 内存分配: **每次 → 0** (零分配) -- GC 压力: **消除 95%** - ---- - -### 2. 无锁并行执行器 🔓 - -**文件**: `src/trading/core/lockfree_parallel.rs` - -**技术**: -- `crossbeam` 无锁环形缓冲区 -- 原子操作替代 mutex -- 自旋等待替代 channel -- CPU 缓存行对齐 - -**代码对比**: -```rust -// 旧代码 (mpsc channel) -let (tx, rx) = mpsc::channel(100); -tx.send(result).await; -let result = rx.recv().await; - -// 新代码 (无锁队列) -let collector = LockFreeResultCollector::new(100); -collector.submit_result(result); // 无锁推送 -let result = collector.wait_for_success().await; // 自旋轮询 -``` - -**性能收益**: -- 任务启动延迟: **1-2ms → 50μs** (20-40x 提升) -- 结果收集延迟: **200μs → 10μs** (20x 提升) -- 锁竞争: **消除 100%** - ---- - -### 3. 交易构建器对象池 ♻️ - -**文件**: `src/trading/core/transaction_pool.rs` - -**技术**: -- 1000 个预分配构建器 -- 自动 RAII 回收 -- Vec 容量预留 (32 指令, 8 查找表) -- 零运行时分配 - -**代码示例**: -```rust -// 旧代码 -let mut instructions = Vec::new(); // 每次分配 - -// 新代码 -let mut builder = acquire_builder(); // 从池获取 -let message = builder.build_zero_alloc(...); -release_builder(builder); // 归还池 -``` - -**性能收益**: -- 构建器创建: **~50μs → <1μs** (50x 提升) -- 内存分配: **减少 90%** -- 对象重用率: **>95%** - ---- - -### 4. CPU 缓存预取优化 💨 - -**文件**: `src/trading/core/fast_execution.rs` - -**技术**: -- `_mm_prefetch` 硬件指令 -- 预测性数据预加载 -- 分支预测提示 (`likely`/`unlikely`) -- SIMD 内存操作 - -**代码示例**: -```rust -// 预取指令到 L1 缓存 -PrefetchOptimizer::prefetch_instructions(&instructions); - -// 预取 keypair 数据 -PrefetchOptimizer::prefetch_keypair(&payer); - -// 分支预测优化 -if BranchOptimizer::likely(is_buy) { - // 大概率路径 -} -``` - -**性能收益**: -- 缓存未命中: **减少 60-70%** -- 指令处理延迟: **减少 30-40%** -- 分支预测准确率: **>95%** - ---- - -### 5. SIMD 加速内存操作 🔥 - -**文件**: `src/perf/hardware_optimizations.rs` - -**技术**: -- AVX2/AVX512 向量指令 -- 并行内存拷贝/比较 -- 硬件加速编码 -- 缓存行对齐 - -**代码示例**: -```rust -// SIMD 加速拷贝 -unsafe { - FastMemoryOps::fast_copy(dst, src, len); // AVX2 -} - -// SIMD 加速比较 -unsafe { - let equal = FastMemoryOps::fast_compare(a, b, len); -} -``` - -**性能收益**: -- 内存拷贝速度: **3-5x 提升** (使用 AVX2) -- 内存比较速度: **4-8x 提升** -- Base64 编码: **2-3x 提升** - ---- - -## 性能基准测试 - -### 端到端延迟分解 - -#### 优化前: -``` -总延迟: 11-20ms -├─ 交易构建: 5-10ms -├─ 并行调度: 1-2ms -├─ 序列化: 0.5ms -├─ 网络发送: 2-5ms -├─ 日志开销: 1.5ms -└─ 缓存查询: 1ms -``` - -#### 优化后: -``` -总延迟: 0.3-0.5ms ✅ -├─ 交易构建: 50μs (-100x) -├─ 并行调度: 10μs (-100x) -├─ 序列化: 20μs (-25x) -├─ 网络发送: 200μs (-10x) -├─ 日志开销: 10μs (-50x) -└─ 缓存查询: 1μs (-100x) -``` - -**总提升**: **300-500μs vs 11-20ms** = **22-67x 提升** 🚀 - ---- - -### 各组件性能对比 - -| 组件 | 优化前 | 优化后 | 提升倍数 | -|------|--------|--------|----------| -| **序列化** | 500μs | 20μs | **25x** | -| **并行启动** | 1-2ms | 10-50μs | **20-200x** | -| **缓存查询** | 100ns | <10ns | **10x** | -| **内存拷贝** | 基准 | 基准/3-5 | **3-5x** | -| **构建器创建** | 50μs | <1μs | **50x** | -| **CPU 缓存命中率** | ~70% | ~95% | **+25%** | -| **锁竞争** | 存在 | **0** | **无限** | - ---- - -## 技术栈对比 - -### 旧架构 -``` -┌─────────────────┐ -│ tokio::mpsc │ ← 锁竞争 -├─────────────────┤ -│ Vec::new() │ ← 每次分配 -├─────────────────┤ -│ bincode │ ← 标准序列化 -├─────────────────┤ -│ CLru + RwLock │ ← 锁竞争 -├─────────────────┤ -│ println! │ ← 同步阻塞 -└─────────────────┘ -``` - -### 新架构 (极致优化) -``` -┌─────────────────────────┐ -│ ArrayQueue (无锁) │ ✅ 零竞争 -├─────────────────────────┤ -│ 对象池 (预分配) │ ✅ 零分配 -├─────────────────────────┤ -│ ZeroAllocSerializer │ ✅ 零分配 -├─────────────────────────┤ -│ DashMap (无锁) │ ✅ 零竞争 -├─────────────────────────┤ -│ log::debug! (异步) │ ✅ 非阻塞 -├─────────────────────────┤ -│ SIMD 内存操作 │ ✅ 硬件加速 -├─────────────────────────┤ -│ CPU 缓存预取 │ ✅ 预测加载 -└─────────────────────────┘ -``` - ---- - -## 内存使用分析 - -### 静态内存 (启动时预分配) -``` -序列化器池: 10,000 × 256KB = ~2.4GB -交易构建器池: 1,000 × 8KB = ~8MB -缓存系统: 100,000 × 2KB = ~200MB -──────────────────────────────────── -总计: ~2.6GB -``` - -### 动态内存 (运行时) -``` -优化前: 每笔交易 ~500KB 分配 -优化后: 每笔交易 <10KB 分配 (-98%) -``` - ---- - -## 使用方法 - -### 1. 默认启用 (推荐) -```rust -use sol_trade_sdk::trading::TradeFactory; - -// 默认已启用所有极致优化 -let executor = TradeFactory::create_executor(dex_type, params); -``` - -### 2. 显式启用超快模式 -```rust -let executor = GenericTradeExecutor::new_ultra_fast( - instruction_builder, - "protocol_name" -); -``` - -### 3. 禁用优化 (回退) -```rust -let mut executor = GenericTradeExecutor::new(...); -executor.disable_lockfree(); // 使用标准 mpsc -``` - ---- - -## 性能监控 - -### 查看序列化器统计 -```rust -use sol_trade_sdk::swqos::optimized_serialization::get_serializer_stats; - -let (available, capacity) = get_serializer_stats(); -println!("缓冲区池: {}/{}", available, capacity); -``` - -### 查看构建器池统计 -```rust -use sol_trade_sdk::trading::core::transaction_pool::get_pool_stats; - -let (available, capacity) = get_pool_stats(); -println!("构建器池: {}/{}", available, capacity); -``` - ---- - -## 调优建议 - -### 1. 内存优化 -如果内存受限,可以减小池大小: -```rust -// 在 optimized_serialization.rs 中 -static SERIALIZER: Lazy> = Lazy::new(|| { - Arc::new(ZeroAllocSerializer::new( - 1_000, // 减少到 1k (从 10k) - 64 * 1024, // 保持 64KB - )) -}); -``` - -### 2. CPU 优化 -绑定进程到特定 CPU: -```bash -taskset -c 0-7 ./your_binary # Linux -``` - -### 3. 网络优化 -调整操作系统参数: -```bash -# Linux -sudo sysctl -w net.core.rmem_max=134217728 -sudo sysctl -w net.core.wmem_max=134217728 -sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 67108864" -sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 67108864" -``` - ---- - -## 基准测试 - -### 运行性能测试 -```bash -# 编译优化版本 -cargo build --release - -# 运行基准测试 -cargo test --release --package sol-trade-sdk --lib perf::extreme_performance_test - -# 压力测试 -cargo run --release --example benchmark_trading -``` - -### 预期结果 -``` -✅ P50 延迟: <300μs -✅ P95 延迟: <500μs -✅ P99 延迟: <1ms -✅ 吞吐量: >2000 TPS -``` - ---- - -## 已知限制 - -### 1. 内存占用 -- 预分配内存: ~2.6GB -- 适合内存充足的服务器 -- 可通过调整池大小优化 - -### 2. SIMD 指令集 -- 主要针对 x86_64 -- ARM 有自动回退 -- macOS M1/M2 部分优化受限 - -### 3. CPU 绑定 -- macOS 不支持 CPU 亲和性 -- 已有回退机制 -- Linux 效果最佳 - ---- - -## 后续优化空间 - -虽然已经达到极致,但仍有潜力: - -### 1. 内核绕过网络栈 (Linux only) -**技术**: io_uring + DPDK -**潜在收益**: 网络延迟再降低 50% -**要求**: Linux 5.1+, root 权限 - -### 2. 用户态 TCP 栈 -**技术**: mTCP / F-Stack -**潜在收益**: 绕过内核开销 -**复杂度**: 高 - -### 3. FPGA 加速 -**技术**: 硬件序列化/签名 -**潜在收益**: 降至纳秒级 -**成本**: 高 - ---- - -## 总结 - -### ✅ 已达成目标 - -| 目标 | 结果 | 状态 | -|------|------|------| -| 端到端延迟 <1ms | **0.3-0.5ms** | ✅ 超额完成 | -| 零分配路径 | **95%+ 零分配** | ✅ 达成 | -| 无锁并发 | **100% 无锁** | ✅ 达成 | -| SIMD 加速 | **AVX2 支持** | ✅ 达成 | -| CPU 缓存优化 | **95% 命中率** | ✅ 达成 | - -### 📈 性能提升汇总 - -``` -总体延迟: 11-20ms → 0.3-0.5ms (22-67x) -序列化: 500μs → 20μs (25x) -并行启动: 1-2ms → 10-50μs (20-200x) -内存分配: 基准 → -98% (减少) -缓存命中: 70% → 95% (+25%) -锁竞争: 存在 → 0 (消除) -``` - -### 🚀 最终性能等级 - -``` -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 🏆 ULTRA LOW LATENCY 🏆 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 微秒级交易执行系统 - 适用于高频交易 / MEV / 抢跑 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -``` - ---- - -**生成时间**: 2025-10-05 -**优化版本**: v3.0.1+extreme-perf -**维护者**: Claude Code Extreme Performance Team -**Benchmark**: <1ms latency @ 99% percentile diff --git a/PERFORMANCE.md b/PERFORMANCE.md deleted file mode 100644 index 9c14f6c..0000000 --- a/PERFORMANCE.md +++ /dev/null @@ -1,319 +0,0 @@ -# 性能优化总结 - -## 概述 - -本项目默认集成了极致性能优化技术,实现**亚毫秒级**(<1ms)的交易执行延迟。所有优化都是透明的,无需额外配置。 - ---- - -## 核心优化 - -### 1. 内存管理 - -**零分配设计**: -- 对象池预分配 (交易构建器: 1000个) -- 缓冲区重用 (序列化器: 10,000个) -- 内存预留策略 - -**收益**: 减少 95% 运行时分配 - -### 2. 并发执行 - -**无锁架构**: -- crossbeam 无锁队列 -- 原子操作替代 mutex -- CPU 缓存行对齐 - -**收益**: 消除 100% 锁竞争 - -### 3. CPU 优化 - -**硬件加速**: -- SIMD 内存操作 (AVX2/AVX512) -- CPU 缓存预取 -- 分支预测优化 - -**收益**: 内存操作提速 3-5x - -### 4. 缓存系统 - -**高性能缓存**: -- DashMap 无锁哈希表 -- 容量: 100,000 条 (从 10,000) -- 并发线性扩展 - -**收益**: 查询延迟 100ns → <10ns - -### 5. 网络层 - -**连接池优化**: -- 连接数: 256 (从 64) -- TCP nodelay 启用 -- HTTP/2 自适应流控 - -**收益**: 网络延迟降低 60-70% - ---- - -## 性能指标 - -### 延迟对比 - -| 组件 | 优化前 | 当前 | 提升 | -|------|--------|------|------| -| 端到端延迟 | 11-20ms | **0.3-0.5ms** | **22-67x** | -| 序列化 | 500μs | 20μs | 25x | -| 并行启动 | 1-2ms | 10-50μs | 20-200x | -| 缓存查询 | 100ns | <10ns | 10x | -| 内存拷贝 | 基准 | 基准/3-5 | 3-5x | - -### 目标达成 - -- ✅ P50 延迟: <300μs -- ✅ P95 延迟: <500μs -- ✅ P99 延迟: <1ms -- ✅ 吞吐量: >2000 TPS -- ✅ 零分配率: >95% - ---- - -## 使用方法 - -### 默认使用 (推荐) - -```rust -use sol_trade_sdk::trading::TradeFactory; - -// 所有优化默认启用 -let executor = TradeFactory::create_executor(dex_type, params); -let (success, signature) = executor.swap(swap_params).await?; -``` - -### 监控性能 - -```rust -// 查看序列化器状态 -use sol_trade_sdk::swqos::serialization::get_serializer_stats; -let (available, capacity) = get_serializer_stats(); - -// 查看构建器池状态 -use sol_trade_sdk::trading::core::transaction_pool::get_pool_stats; -let (available, capacity) = get_pool_stats(); -``` - ---- - -## 内存使用 - -### 预分配内存 (启动时) - -``` -序列化器池: 10,000 × 256KB ≈ 2.4GB -交易构建器池: 1,000 × 8KB ≈ 8MB -缓存系统: 100,000 × 2KB ≈ 200MB -───────────────────────────────── -总计: ~2.6GB -``` - -### 运行时内存 - -- 每笔交易: <10KB (原 ~500KB) -- 减少: **98%** - ---- - -## 系统要求 - -### 最低配置 - -- CPU: 4核 -- 内存: 4GB -- 操作系统: Linux/macOS/Windows - -### 推荐配置 - -- CPU: 8核+ (支持 AVX2) -- 内存: 8GB+ -- 操作系统: Linux (最佳性能) - ---- - -## 平台支持 - -| 平台 | 状态 | 说明 | -|------|------|------| -| Linux x86_64 | ✅ 完全支持 | 最佳性能 | -| macOS x86_64 | ✅ 完全支持 | CPU 亲和性回退 | -| macOS ARM64 | ✅ 支持 | 部分 SIMD 回退 | -| Windows x86_64 | ✅ 支持 | 完整功能 | - ---- - -## 配置调优 - -### 减少内存占用 - -如需减少内存使用,可修改池大小: - -**src/swqos/serialization.rs**: -```rust -static SERIALIZER: Lazy> = Lazy::new(|| { - Arc::new(ZeroAllocSerializer::new( - 1_000, // 从 10,000 减少 - 64 * 1024, // 保持 64KB - )) -}); -``` - -**src/trading/core/transaction_pool.rs**: -```rust -static TX_BUILDER_POOL: Lazy>> = Lazy::new(|| { - let pool = ArrayQueue::new(100); // 从 1000 减少 - // ... -}); -``` - -### 网络优化 (Linux) - -```bash -# 增加网络缓冲区 -sudo sysctl -w net.core.rmem_max=134217728 -sudo sysctl -w net.core.wmem_max=134217728 - -# 优化 TCP 参数 -sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 67108864" -sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 67108864" - -# 启用 TCP Fast Open -sudo sysctl -w net.ipv4.tcp_fastopen=3 -``` - ---- - -## 性能测试 - -### 编译 - -```bash -cargo build --release -``` - -### 运行测试 - -```bash -# 功能测试 -cargo test --release - -# perf 模块性能测试 -cargo test --release --package sol-trade-sdk --lib perf:: - -# 端到端基准测试 -cargo run --release --example benchmark_trading -``` - ---- - -## 架构 - -### 执行流程 - -``` -用户请求 - ↓ -执行器 (executor.rs) - ├─ CPU 预取 (execution.rs) - ├─ 指令处理 (execution.rs) - └─ 并行执行 (async_executor.rs) - ├─ 构建器池 (transaction_pool.rs) - ├─ 序列化 (serialization.rs) - └─ 网络发送 (swqos/*.rs) - ↓ - 结果收集 (无锁队列) - ↓ - 返回签名 -``` - -### 技术栈 - -``` -应用层: -├─ GenericTradeExecutor # 交易执行器 -├─ InstructionProcessor # 指令处理 -└─ ExecutionPath # 路径选择 - -并发层: -├─ ResultCollector # 结果收集器 -├─ execute_parallel # 并行执行 -└─ CPU 亲和性绑定 - -内存层: -├─ ZeroAllocSerializer # 序列化器 -├─ TX_BUILDER_POOL # 构建器池 -└─ DashMap # 缓存 - -硬件层: -├─ SIMD 内存操作 # AVX2/AVX512 -├─ CPU 缓存预取 # _mm_prefetch -└─ 分支预测 # likely/unlikely -``` - ---- - -## 常见问题 - -### Q: 内存占用过高? - -A: 可减小对象池大小 (见配置调优),或增加系统内存。 - -### Q: 某些平台性能不如预期? - -A: Linux x86_64 性能最佳。macOS ARM 会自动回退部分 SIMD 优化。 - -### Q: 如何验证优化生效? - -A: 查看日志输出的延迟时间,应 <1ms。使用 `get_serializer_stats()` 检查缓冲区重用率。 - -### Q: 可以禁用优化吗? - -A: 优化是透明的,无禁用选项。如需调试,可在编译时使用 `--debug` 而非 `--release`。 - ---- - -## 版本历史 - -### v3.0.1+perf (当前) - -- ✅ 零分配序列化器 -- ✅ 无锁并行执行 -- ✅ SIMD 内存优化 -- ✅ 交易构建器池 -- ✅ CPU 缓存预取 -- ✅ 10x 缓存容量 -- ✅ 网络层优化 - -**总延迟**: 0.3-0.5ms - -### v3.0.0 (基准) - -**总延迟**: 11-20ms - ---- - -## 性能等级 - -``` -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 🏆 ULTRA LOW LATENCY 🏆 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 亚毫秒级交易执行系统 - 适用于高频交易 / MEV / 抢跑 -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - <1ms @ 99% percentile -━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -``` - ---- - -**维护**: Claude Code Performance Team -**更新**: 2025-10-05 -**版本**: v3.0.1+perf diff --git a/PERFORMANCE_INTEGRATION.md b/PERFORMANCE_INTEGRATION.md deleted file mode 100644 index da5c358..0000000 --- a/PERFORMANCE_INTEGRATION.md +++ /dev/null @@ -1,208 +0,0 @@ -# 🚀 性能优化集成总结 - -本文档记录了 sol-trade-sdk 中所有性能优化模块的集成情况。 - -## 📦 性能优化模块 - -### 1. **SIMD 向量化优化** (`src/perf/simd.rs`) - -#### 功能特性 -- AVX2 内存操作(拷贝/比较/清零) -- 批量 u64 数学运算 -- 快速哈希计算(FNV-1a) -- Base64 编码加速 - -#### 实际应用 -- ✅ `swqos/serialization.rs` - Base64 编码使用 SIMD 加速 -- ✅ `trading/core/execution.rs` - 内存操作使用 AVX2 指令 - -```rust -// 使用示例 -SIMDMemory::copy_avx2(dst, src, len); -SIMDSerializer::encode_base64_simd(data); -``` - ---- - -### 2. **零拷贝 I/O** (`src/perf/zero_copy_io.rs`) - -#### 功能特性 -- 内存映射缓冲区 (`MemoryMappedBuffer`) -- DMA 传输管理 (`DirectMemoryAccessManager`) -- 零拷贝块分配 (`ZeroCopyBlock`) -- 共享内存池 (`SharedMemoryPool`) - -#### 实际应用 -- ✅ `trading/core/transaction_pool.rs` - 导出为公共 API -- 提供零拷贝内存管理基础设施 - -```rust -// 使用示例 -let manager = ZeroCopyMemoryManager::new(pool_id, size, block_size)?; -let block = manager.allocate_block(); -``` - ---- - -### 3. **系统调用绕过** (`src/perf/syscall_bypass.rs`) - -#### 功能特性 -- 快速时间戳获取(绕过系统调用) -- vDSO 优化 -- 批处理系统调用 -- 内存池分配器 - -#### 实际应用 -- ✅ `trading/core/executor.rs` - 使用快速时间戳 - -```rust -// 使用示例 -let timestamp_ns = SYSCALL_BYPASS.fast_timestamp_nanos(); -``` - ---- - -### 4. **编译器优化** (`src/perf/compiler_optimization.rs`) - -#### 功能特性 -- 编译时常量计算 -- 预计算哈希表(256 条目) -- 预计算路由表(1024 条目) -- 零运行时开销事件处理 - -#### 实际应用 -- ✅ `swqos/serialization.rs` - 编译时事件路由 -- ✅ `common/fast_fn.rs` - 编译时哈希优化 - -```rust -// 使用示例 -static PROCESSOR: CompileTimeOptimizedEventProcessor = - CompileTimeOptimizedEventProcessor::new(); - -let route = PROCESSOR.route_event_zero_cost(event_id); -let hash = PROCESSOR.hash_lookup_optimized(key); -``` - ---- - -### 5. **硬件优化** (`src/perf/hardware_optimizations.rs`) - -#### 功能特性 -- 分支预测优化 (`likely`/`unlikely`) -- CPU 缓存预取 -- SIMD 内存操作 - -#### 实际应用 -- ✅ `trading/core/execution.rs` - 分支预测和缓存预取 - -```rust -// 使用示例 -if BranchOptimizer::likely(condition) { - fast_path(); -} - -BranchOptimizer::prefetch_read_data(&data); -``` - ---- - -## ⚙️ 编译器配置优化 - -### Cargo.toml 配置 - -```toml -[profile.release] -opt-level = 3 # 最高优化级别 -lto = "fat" # 胖LTO -codegen-units = 1 # 单代码生成单元 -panic = "abort" # 恐慌即中止 -overflow-checks = false # 禁用溢出检查 -strip = true # 去除符号表 -``` - -### .cargo/config.toml 配置 - -```toml -[build] -rustflags = [ - "-C", "target-cpu=native", - "-C", "target-feature=+sse4.2,+avx,+avx2,+fma,+bmi1,+bmi2,+lzcnt,+popcnt", - "-C", "inline-threshold=1000", -] -``` - ---- - -## 📊 性能优化应用矩阵 - -| 模块 | SIMD | Zero-Copy | Syscall Bypass | Compiler Opt | Hardware Opt | -|------|------|-----------|----------------|--------------|--------------| -| `swqos/serialization.rs` | ✅ | - | - | ✅ | - | -| `trading/core/execution.rs` | ✅ | - | - | - | ✅ | -| `trading/core/executor.rs` | - | - | ✅ | - | - | -| `trading/core/transaction_pool.rs` | - | ✅ | - | - | - | -| `common/fast_fn.rs` | - | - | - | ✅ | - | - ---- - -## 🎯 优化效果 - -### 编译时优化 -- 零运行时开销的事件路由 -- 预计算的哈希表和路由表 -- 常量折叠和内联优化 - -### 运行时优化 -- SIMD 向量化加速内存操作 -- 零拷贝减少内存分配 -- 系统调用绕过减少延迟 - -### 编译器优化 -- LTO 跨crate内联 -- 本机 CPU 特性利用 -- 死代码消除 - ---- - -## 🔧 使用建议 - -### 发布构建 -```bash -# 使用所有优化编译 -cargo build --release - -# 查看编译器标志 -cargo rustc --release -- --print cfg -``` - -### 性能分析 -```bash -# 检查 SIMD 指令生成 -cargo rustc --release -- --emit asm - -# 查看内联决策 -RUSTFLAGS="-C inline-threshold=1000" cargo build --release -``` - ---- - -## 📝 注意事项 - -1. **AVX2 要求**: SIMD 优化需要 CPU 支持 AVX2 指令集 -2. **平台兼容性**: 某些优化(如 syscall_bypass)在不同平台有差异 -3. **编译时间**: 启用 LTO 会增加编译时间,但提升运行时性能 -4. **调试**: 发布版本禁用了调试信息,调试时使用 `profile.dev` - ---- - -## 🚀 未来优化方向 - -- [ ] AVX-512 支持(更宽的向量) -- [ ] io_uring 异步 I/O(Linux) -- [ ] Profile-Guided Optimization (PGO) -- [ ] 更多编译时常量计算 - ---- - -**生成时间**: 2025-10-06 -**SDK 版本**: 3.0.1 diff --git a/PERFORMANCE_OPTIMIZATIONS.md b/PERFORMANCE_OPTIMIZATIONS.md deleted file mode 100644 index f2bed42..0000000 --- a/PERFORMANCE_OPTIMIZATIONS.md +++ /dev/null @@ -1,298 +0,0 @@ -# 性能优化总结 - -## 概述 -本次优化专注于将交易延迟降至极致,通过应用 `src/perf` 目录中的极致优化技术,预期将端到端延迟从 20-50ms 降低至 **<1ms**。 - -## 已完成的优化 - -### 1. 依赖项升级 (Cargo.toml) - -添加了高性能依赖: -```toml -crossbeam-queue = "0.3" # 无锁队列 -crossbeam-utils = "0.8" # 缓存行对齐工具 -memmap2 = "0.9" # 内存映射IO -num_cpus = "1.16" # CPU核心检测 -``` - -**收益**: 为后续优化提供基础设施支持 - ---- - -### 2. 缓存系统升级 (src/common/fast_fn.rs) - -#### 优化前: -- 使用 `CLruCache` + `RwLock` (有锁缓存) -- 缓存大小: 10,000 条 -- 读写需要锁竞争 - -#### 优化后: -- 使用 `DashMap` (无锁哈希表) -- 缓存大小: **100,000 条** (10x 提升) -- 零锁竞争,完全并发读写 - -**代码变更**: -```rust -// 旧代码 -static INSTRUCTION_CACHE: Lazy>> = ...; -let cache = INSTRUCTION_CACHE.read(); // 需要锁 -if let Some(cached) = cache.peek(&key) { ... } - -// 新代码 -static INSTRUCTION_CACHE: Lazy> = ...; -INSTRUCTION_CACHE.entry(key).or_insert_with(compute_fn).clone() // 无锁 -``` - -**性能提升**: -- 缓存查询延迟: **100ns → <10ns** (10x 提升) -- 并发性能: 线性扩展,无锁竞争 -- 缓存命中率: 提升 (更大容量) - ---- - -### 3. 日志优化 (src/trading/core/) - -#### 优化前: -```rust -println!("Building transaction: {:?}", elapsed); // 同步阻塞 -``` - -#### 优化后: -```rust -log::debug!("Building transaction: {:?}", elapsed); // 异步日志 -``` - -**性能提升**: -- 移除主线程阻塞 -- 日志开销: **~500μs → <10μs** (50x 提升) - ---- - -### 4. 网络层优化 (src/swqos/*.rs) - -#### 优化的客户端: -- ✅ jito.rs -- ✅ bloxroute.rs -- ✅ astralane.rs -- ✅ blockrazor.rs -- ✅ flashblock.rs -- ✅ nextblock.rs -- ✅ node1.rs -- ✅ temporal.rs -- ✅ zeroslot.rs - -#### HTTP 客户端配置对比: - -| 参数 | 优化前 | 优化后 | 说明 | -|------|--------|--------|------| -| `pool_max_idle_per_host` | 32-64 | **256** | 连接池容量 4x-8x 提升 | -| `pool_idle_timeout` | 30-300s | **120s** | 标准化超时 | -| `tcp_keepalive` | 300-1200s | **60s** | 更快的连接健康检查 | -| `tcp_nodelay` | 未设置 | **true** | 禁用 Nagle 算法 | -| `http2_adaptive_window` | 未设置 | **true** | 自适应流控 | -| `timeout` | 10-15s | **3s** | 超时时间降低 3x-5x | -| `connect_timeout` | 5s | **2s** | 连接超时降低 2.5x | - -**性能提升**: -- 连接复用率: 大幅提升 (更大连接池) -- 网络延迟: **~2-5ms → <500μs** (4-10x 提升) -- TCP 延迟: 禁用 Nagle 算法减少 40-200ms -- 故障检测: 更快超时,减少等待时间 - ---- - -## 预期性能提升 - -| 指标 | 优化前 | 优化后 | 提升倍数 | -|------|--------|--------|----------| -| **缓存查询延迟** | ~100ns | **<10ns** | **10x** | -| **日志开销** | ~500μs | **<10μs** | **50x** | -| **网络IO延迟** | ~2-5ms | **<500μs** | **4-10x** | -| **TCP建立延迟** | 40-200ms | **0ms** (禁用Nagle) | **显著** | -| **并发缓存性能** | 线性下降 | **线性扩展** | **无限** | - -### 端到端延迟估算: - -**优化前**: -``` -交易构建: 5-10ms -+ 并行调度: 1-2ms -+ 网络序列化: 0.5ms -+ HTTP发送: 2-5ms -+ 日志开销: 0.5ms × 3 = 1.5ms -+ 缓存查询: 0.1ms × 10 = 1ms -= 总计: 11-20ms -``` - -**优化后**: -``` -交易构建: 0.1ms (优化后) -+ 并行调度: 0.05ms -+ 网络序列化: 0.02ms -+ HTTP发送: 0.3-0.5ms -+ 日志开销: 0.01ms × 3 = 0.03ms -+ 缓存查询: 0.001ms × 10 = 0.01ms -= 总计: 0.5-0.7ms ✅ -``` - -**提升**: **11-20ms → 0.5-0.7ms** = **15-40x 提升** - ---- - -## 后续优化建议 - -虽然已完成核心优化,但 `src/perf` 目录还有更多极致优化可应用: - -### 1. 零拷贝内存管理 -**文件**: `src/perf/zero_copy_io.rs` -- 内存映射缓冲区 -- SIMD加速内存拷贝 -- 共享内存池 - -**潜在收益**: 减少 50-80% 内存拷贝开销 - -### 2. 无锁事件分发器 -**文件**: `src/perf/ultra_low_latency.rs` -- 替换 `tokio::mpsc::channel` -- CPU 亲和性精细控制 -- 预测性预取 - -**潜在收益**: 并发性能提升 5-10x - -### 3. SIMD序列化加速 -**文件**: `src/perf/hardware_optimizations.rs` -- AVX2/AVX512 加速 Base64 编码 -- 向量化 JSON 序列化 - -**潜在收益**: 序列化速度提升 3-5x - -### 4. 协议栈绕过 -**文件**: `src/perf/kernel_bypass.rs` -- 用户态网络栈 (io_uring) -- 零拷贝网络传输 - -**潜在收益**: 网络延迟降低 50-70% -**注意**: 需要 Linux 5.1+ 和特殊权限 - ---- - -## 验证与测试 - -### 编译验证 -```bash -cargo check -cargo build --release -``` - -### 性能测试 -```bash -# 使用 perf 模块的性能测试 -cargo test --release --package sol-trade-sdk --lib perf::extreme_performance_test -``` - -### 压力测试 -建议测试场景: -1. **缓存压力测试**: 100k 并发查询 -2. **网络吞吐测试**: 1000 TPS 交易提交 -3. **端到端延迟测试**: P50/P95/P99 延迟分布 - ---- - -## 性能监控 - -### 关键指标 -```rust -use crate::perf::PerformanceOptimizer; - -let perf_optimizer = PerformanceOptimizer::new(config)?; -perf_optimizer.start().await?; - -// 10秒间隔自动输出性能统计 -// 包括: 事件数, 平均延迟, P99延迟, <1ms达成率 -``` - -### 日志级别设置 -```bash -# 生产环境: 禁用 debug 日志以最大化性能 -RUST_LOG=info cargo run - -# 开发调试: 启用 debug 日志 -RUST_LOG=debug cargo run -``` - ---- - -## 回滚方案 - -所有优化都是向后兼容的。如遇问题: - -1. **缓存系统回滚**: -```bash -git checkout HEAD -- src/common/fast_fn.rs -# 并恢复 Cargo.toml 中的 clru 依赖 -``` - -2. **网络配置回滚**: -```bash -git checkout HEAD -- src/swqos/*.rs -``` - -3. **完全回滚**: -```bash -git stash -# 或 -git reset --hard -``` - ---- - -## 已知限制 - -### 1. 系统权限优化 (已跳过) -以下优化需要特殊权限,当前**未启用**: -- 进程优先级提升 (`setpriority`) - 需要 root -- 实时调度策略 (`SCHED_FIFO`) - 需要 CAP_SYS_NICE -- 内存锁定 (`mlock`) - 需要权限 -- 内核网络参数调优 - 需要 root - -### 2. 平台限制 -- SIMD 优化主要针对 x86_64 -- macOS 不支持 CPU 亲和性绑定 (已有回退) -- io_uring (内核绕过) 需要 Linux 5.1+ - -### 3. OpenSSL 依赖 -项目依赖 OpenSSL,macOS 用户需要: -```bash -brew install openssl@3 -export OPENSSL_DIR=/opt/homebrew/opt/openssl@3 -``` - ---- - -## 总结 - -### ✅ 已完成 -- [x] 添加性能优化依赖 -- [x] 启用 perf 模块 -- [x] 升级缓存系统 (无锁 + 10x 容量) -- [x] 优化日志系统 (异步) -- [x] 优化所有网络客户端 (9个) - -### 📈 预期收益 -- 端到端延迟: **15-40x 提升** -- 缓存性能: **10x 提升** -- 网络延迟: **4-10x 提升** -- 并发能力: **线性扩展** - -### 🚀 下一步 -根据实际测试结果,可选择性地集成: -- 零拷贝内存管理 -- 无锁事件分发器 -- SIMD 序列化加速 -- 内核绕过网络栈 (Linux) - ---- - -**生成时间**: 2025-10-05 -**优化版本**: v3.0.1+perf -**维护者**: Claude Code Performance Team