perf: implement SIMD-accelerated event processing and optimize streaming performance

- Add SIMD utilities for fast byte array comparison and discriminator matching
- Optimize event processor with batch processing and memory pool
- Refactor global state management with concurrent data structures
- Remove deprecated batch processing module
- Enhance metrics collection with reduced overhead
- Improve parser efficiency across all protocol implementations
- Add performance benchmarking dependencies (criterion, wide)
- Update documentation and examples for new architecture

Performance improvements:
- SIMD-accelerated byte operations for instruction parsing
- Concurrent HashMap (DashMap) for better multi-threading
- Optimized memory allocation patterns
- Reduced lock contention in event processing pipeline

Breaking changes: Removed batch.rs module, updated parser interfaces
This commit is contained in:
ysq
2025-08-31 22:18:18 +08:00
parent 52a489ae80
commit 74781e5cbe
30 changed files with 1297 additions and 1259 deletions
+147 -147
View File
@@ -53,7 +53,7 @@ use solana_streamer_sdk::{
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Starting Solana Streamer...");
test_grpc().await?;
// test_shreds().await?;
test_shreds().await?;
Ok(())
}
@@ -188,151 +188,151 @@ async fn test_shreds() -> Result<(), Box<dyn std::error::Error>> {
fn create_event_callback() -> impl Fn(Box<dyn UnifiedEvent>) {
|event: Box<dyn UnifiedEvent>| {
// println!(
// "🎉 Event received! Type: {:?}, transaction_index: {:?}",
// event.event_type(),
// event.transaction_index()
// );
// match_event!(event, {
// // -------------------------- block meta -----------------------
// BlockMetaEvent => |e: BlockMetaEvent| {
// println!("BlockMetaEvent: {:?}", e.metadata.program_handle_time_consuming_us);
// },
// // -------------------------- bonk -----------------------
// BonkPoolCreateEvent => |e: BonkPoolCreateEvent| {
// // When using grpc, you can get block_time from each event
// println!("block_time: {:?}, block_time_ms: {:?}", e.metadata.block_time, e.metadata.block_time_ms);
// println!("BonkPoolCreateEvent: {:?}", e.base_mint_param.symbol);
// },
// BonkTradeEvent => |e: BonkTradeEvent| {
// println!("BonkTradeEvent: {e:?}");
// },
// BonkMigrateToAmmEvent => |e: BonkMigrateToAmmEvent| {
// println!("BonkMigrateToAmmEvent: {e:?}");
// },
// BonkMigrateToCpswapEvent => |e: BonkMigrateToCpswapEvent| {
// println!("BonkMigrateToCpswapEvent: {e:?}");
// },
// // -------------------------- pumpfun -----------------------
// PumpFunTradeEvent => |e: PumpFunTradeEvent| {
// println!("PumpFunTradeEvent: {e:?}");
// },
// PumpFunMigrateEvent => |e: PumpFunMigrateEvent| {
// println!("PumpFunMigrateEvent: {e:?}");
// },
// PumpFunCreateTokenEvent => |e: PumpFunCreateTokenEvent| {
// println!("PumpFunCreateTokenEvent: {e:?}");
// },
// // -------------------------- pumpswap -----------------------
// PumpSwapBuyEvent => |e: PumpSwapBuyEvent| {
// println!("Buy event: {e:?}");
// },
// PumpSwapSellEvent => |e: PumpSwapSellEvent| {
// println!("Sell event: {e:?}");
// },
// PumpSwapCreatePoolEvent => |e: PumpSwapCreatePoolEvent| {
// println!("CreatePool event: {e:?}");
// },
// PumpSwapDepositEvent => |e: PumpSwapDepositEvent| {
// println!("Deposit event: {e:?}");
// },
// PumpSwapWithdrawEvent => |e: PumpSwapWithdrawEvent| {
// println!("Withdraw event: {e:?}");
// },
// // -------------------------- raydium_cpmm -----------------------
// RaydiumCpmmSwapEvent => |e: RaydiumCpmmSwapEvent| {
// println!("RaydiumCpmmSwapEvent: {e:?}");
// },
// RaydiumCpmmDepositEvent => |e: RaydiumCpmmDepositEvent| {
// println!("RaydiumCpmmDepositEvent: {e:?}");
// },
// RaydiumCpmmInitializeEvent => |e: RaydiumCpmmInitializeEvent| {
// println!("RaydiumCpmmInitializeEvent: {e:?}");
// },
// RaydiumCpmmWithdrawEvent => |e: RaydiumCpmmWithdrawEvent| {
// println!("RaydiumCpmmWithdrawEvent: {e:?}");
// },
// // -------------------------- raydium_clmm -----------------------
// RaydiumClmmSwapEvent => |e: RaydiumClmmSwapEvent| {
// println!("RaydiumClmmSwapEvent: {e:?}");
// },
// RaydiumClmmSwapV2Event => |e: RaydiumClmmSwapV2Event| {
// println!("RaydiumClmmSwapV2Event: {e:?}");
// },
// RaydiumClmmClosePositionEvent => |e: RaydiumClmmClosePositionEvent| {
// println!("RaydiumClmmClosePositionEvent: {e:?}");
// },
// RaydiumClmmDecreaseLiquidityV2Event => |e: RaydiumClmmDecreaseLiquidityV2Event| {
// println!("RaydiumClmmDecreaseLiquidityV2Event: {e:?}");
// },
// RaydiumClmmCreatePoolEvent => |e: RaydiumClmmCreatePoolEvent| {
// println!("RaydiumClmmCreatePoolEvent: {e:?}");
// },
// RaydiumClmmIncreaseLiquidityV2Event => |e: RaydiumClmmIncreaseLiquidityV2Event| {
// println!("RaydiumClmmIncreaseLiquidityV2Event: {e:?}");
// },
// RaydiumClmmOpenPositionWithToken22NftEvent => |e: RaydiumClmmOpenPositionWithToken22NftEvent| {
// println!("RaydiumClmmOpenPositionWithToken22NftEvent: {e:?}");
// },
// RaydiumClmmOpenPositionV2Event => |e: RaydiumClmmOpenPositionV2Event| {
// println!("RaydiumClmmOpenPositionV2Event: {e:?}");
// },
// // -------------------------- raydium_amm_v4 -----------------------
// RaydiumAmmV4SwapEvent => |e: RaydiumAmmV4SwapEvent| {
// println!("RaydiumAmmV4SwapEvent: {e:?}");
// },
// RaydiumAmmV4DepositEvent => |e: RaydiumAmmV4DepositEvent| {
// println!("RaydiumAmmV4DepositEvent: {e:?}");
// },
// RaydiumAmmV4Initialize2Event => |e: RaydiumAmmV4Initialize2Event| {
// println!("RaydiumAmmV4Initialize2Event: {e:?}");
// },
// RaydiumAmmV4WithdrawEvent => |e: RaydiumAmmV4WithdrawEvent| {
// println!("RaydiumAmmV4WithdrawEvent: {e:?}");
// },
// RaydiumAmmV4WithdrawPnlEvent => |e: RaydiumAmmV4WithdrawPnlEvent| {
// println!("RaydiumAmmV4WithdrawPnlEvent: {e:?}");
// },
// // -------------------------- account -----------------------
// BonkPoolStateAccountEvent => |e: BonkPoolStateAccountEvent| {
// println!("BonkPoolStateAccountEvent: {e:?}");
// },
// BonkGlobalConfigAccountEvent => |e: BonkGlobalConfigAccountEvent| {
// println!("BonkGlobalConfigAccountEvent: {e:?}");
// },
// BonkPlatformConfigAccountEvent => |e: BonkPlatformConfigAccountEvent| {
// println!("BonkPlatformConfigAccountEvent: {e:?}");
// },
// PumpSwapGlobalConfigAccountEvent => |e: PumpSwapGlobalConfigAccountEvent| {
// println!("PumpSwapGlobalConfigAccountEvent: {e:?}");
// },
// PumpSwapPoolAccountEvent => |e: PumpSwapPoolAccountEvent| {
// println!("PumpSwapPoolAccountEvent: {e:?}");
// },
// PumpFunBondingCurveAccountEvent => |e: PumpFunBondingCurveAccountEvent| {
// println!("PumpFunBondingCurveAccountEvent: {e:?}");
// },
// PumpFunGlobalAccountEvent => |e: PumpFunGlobalAccountEvent| {
// println!("PumpFunGlobalAccountEvent: {e:?}");
// },
// RaydiumAmmV4AmmInfoAccountEvent => |e: RaydiumAmmV4AmmInfoAccountEvent| {
// println!("RaydiumAmmV4AmmInfoAccountEvent: {e:?}");
// },
// RaydiumClmmAmmConfigAccountEvent => |e: RaydiumClmmAmmConfigAccountEvent| {
// println!("RaydiumClmmAmmConfigAccountEvent: {e:?}");
// },
// RaydiumClmmPoolStateAccountEvent => |e: RaydiumClmmPoolStateAccountEvent| {
// println!("RaydiumClmmPoolStateAccountEvent: {e:?}");
// },
// RaydiumClmmTickArrayStateAccountEvent => |e: RaydiumClmmTickArrayStateAccountEvent| {
// println!("RaydiumClmmTickArrayStateAccountEvent: {e:?}");
// },
// RaydiumCpmmAmmConfigAccountEvent => |e: RaydiumCpmmAmmConfigAccountEvent| {
// println!("RaydiumCpmmAmmConfigAccountEvent: {e:?}");
// },
// RaydiumCpmmPoolStateAccountEvent => |e: RaydiumCpmmPoolStateAccountEvent| {
// println!("RaydiumCpmmPoolStateAccountEvent: {e:?}");
// },
// });
println!(
"🎉 Event received! Type: {:?}, transaction_index: {:?}",
event.event_type(),
event.transaction_index()
);
match_event!(event, {
// -------------------------- block meta -----------------------
BlockMetaEvent => |e: BlockMetaEvent| {
println!("BlockMetaEvent: {:?}", e.metadata.program_handle_time_consuming_us);
},
// -------------------------- bonk -----------------------
BonkPoolCreateEvent => |e: BonkPoolCreateEvent| {
// When using grpc, you can get block_time from each event
println!("block_time: {:?}, block_time_ms: {:?}", e.metadata.block_time, e.metadata.block_time_ms);
println!("BonkPoolCreateEvent: {:?}", e.base_mint_param.symbol);
},
BonkTradeEvent => |e: BonkTradeEvent| {
println!("BonkTradeEvent: {e:?}");
},
BonkMigrateToAmmEvent => |e: BonkMigrateToAmmEvent| {
println!("BonkMigrateToAmmEvent: {e:?}");
},
BonkMigrateToCpswapEvent => |e: BonkMigrateToCpswapEvent| {
println!("BonkMigrateToCpswapEvent: {e:?}");
},
// -------------------------- pumpfun -----------------------
PumpFunTradeEvent => |e: PumpFunTradeEvent| {
println!("PumpFunTradeEvent: {e:?}");
},
PumpFunMigrateEvent => |e: PumpFunMigrateEvent| {
println!("PumpFunMigrateEvent: {e:?}");
},
PumpFunCreateTokenEvent => |e: PumpFunCreateTokenEvent| {
println!("PumpFunCreateTokenEvent: {e:?}");
},
// -------------------------- pumpswap -----------------------
PumpSwapBuyEvent => |e: PumpSwapBuyEvent| {
println!("Buy event: {e:?}");
},
PumpSwapSellEvent => |e: PumpSwapSellEvent| {
println!("Sell event: {e:?}");
},
PumpSwapCreatePoolEvent => |e: PumpSwapCreatePoolEvent| {
println!("CreatePool event: {e:?}");
},
PumpSwapDepositEvent => |e: PumpSwapDepositEvent| {
println!("Deposit event: {e:?}");
},
PumpSwapWithdrawEvent => |e: PumpSwapWithdrawEvent| {
println!("Withdraw event: {e:?}");
},
// -------------------------- raydium_cpmm -----------------------
RaydiumCpmmSwapEvent => |e: RaydiumCpmmSwapEvent| {
println!("RaydiumCpmmSwapEvent: {e:?}");
},
RaydiumCpmmDepositEvent => |e: RaydiumCpmmDepositEvent| {
println!("RaydiumCpmmDepositEvent: {e:?}");
},
RaydiumCpmmInitializeEvent => |e: RaydiumCpmmInitializeEvent| {
println!("RaydiumCpmmInitializeEvent: {e:?}");
},
RaydiumCpmmWithdrawEvent => |e: RaydiumCpmmWithdrawEvent| {
println!("RaydiumCpmmWithdrawEvent: {e:?}");
},
// -------------------------- raydium_clmm -----------------------
RaydiumClmmSwapEvent => |e: RaydiumClmmSwapEvent| {
println!("RaydiumClmmSwapEvent: {e:?}");
},
RaydiumClmmSwapV2Event => |e: RaydiumClmmSwapV2Event| {
println!("RaydiumClmmSwapV2Event: {e:?}");
},
RaydiumClmmClosePositionEvent => |e: RaydiumClmmClosePositionEvent| {
println!("RaydiumClmmClosePositionEvent: {e:?}");
},
RaydiumClmmDecreaseLiquidityV2Event => |e: RaydiumClmmDecreaseLiquidityV2Event| {
println!("RaydiumClmmDecreaseLiquidityV2Event: {e:?}");
},
RaydiumClmmCreatePoolEvent => |e: RaydiumClmmCreatePoolEvent| {
println!("RaydiumClmmCreatePoolEvent: {e:?}");
},
RaydiumClmmIncreaseLiquidityV2Event => |e: RaydiumClmmIncreaseLiquidityV2Event| {
println!("RaydiumClmmIncreaseLiquidityV2Event: {e:?}");
},
RaydiumClmmOpenPositionWithToken22NftEvent => |e: RaydiumClmmOpenPositionWithToken22NftEvent| {
println!("RaydiumClmmOpenPositionWithToken22NftEvent: {e:?}");
},
RaydiumClmmOpenPositionV2Event => |e: RaydiumClmmOpenPositionV2Event| {
println!("RaydiumClmmOpenPositionV2Event: {e:?}");
},
// -------------------------- raydium_amm_v4 -----------------------
RaydiumAmmV4SwapEvent => |e: RaydiumAmmV4SwapEvent| {
println!("RaydiumAmmV4SwapEvent: {e:?}");
},
RaydiumAmmV4DepositEvent => |e: RaydiumAmmV4DepositEvent| {
println!("RaydiumAmmV4DepositEvent: {e:?}");
},
RaydiumAmmV4Initialize2Event => |e: RaydiumAmmV4Initialize2Event| {
println!("RaydiumAmmV4Initialize2Event: {e:?}");
},
RaydiumAmmV4WithdrawEvent => |e: RaydiumAmmV4WithdrawEvent| {
println!("RaydiumAmmV4WithdrawEvent: {e:?}");
},
RaydiumAmmV4WithdrawPnlEvent => |e: RaydiumAmmV4WithdrawPnlEvent| {
println!("RaydiumAmmV4WithdrawPnlEvent: {e:?}");
},
// -------------------------- account -----------------------
BonkPoolStateAccountEvent => |e: BonkPoolStateAccountEvent| {
println!("BonkPoolStateAccountEvent: {e:?}");
},
BonkGlobalConfigAccountEvent => |e: BonkGlobalConfigAccountEvent| {
println!("BonkGlobalConfigAccountEvent: {e:?}");
},
BonkPlatformConfigAccountEvent => |e: BonkPlatformConfigAccountEvent| {
println!("BonkPlatformConfigAccountEvent: {e:?}");
},
PumpSwapGlobalConfigAccountEvent => |e: PumpSwapGlobalConfigAccountEvent| {
println!("PumpSwapGlobalConfigAccountEvent: {e:?}");
},
PumpSwapPoolAccountEvent => |e: PumpSwapPoolAccountEvent| {
println!("PumpSwapPoolAccountEvent: {e:?}");
},
PumpFunBondingCurveAccountEvent => |e: PumpFunBondingCurveAccountEvent| {
println!("PumpFunBondingCurveAccountEvent: {e:?}");
},
PumpFunGlobalAccountEvent => |e: PumpFunGlobalAccountEvent| {
println!("PumpFunGlobalAccountEvent: {e:?}");
},
RaydiumAmmV4AmmInfoAccountEvent => |e: RaydiumAmmV4AmmInfoAccountEvent| {
println!("RaydiumAmmV4AmmInfoAccountEvent: {e:?}");
},
RaydiumClmmAmmConfigAccountEvent => |e: RaydiumClmmAmmConfigAccountEvent| {
println!("RaydiumClmmAmmConfigAccountEvent: {e:?}");
},
RaydiumClmmPoolStateAccountEvent => |e: RaydiumClmmPoolStateAccountEvent| {
println!("RaydiumClmmPoolStateAccountEvent: {e:?}");
},
RaydiumClmmTickArrayStateAccountEvent => |e: RaydiumClmmTickArrayStateAccountEvent| {
println!("RaydiumClmmTickArrayStateAccountEvent: {e:?}");
},
RaydiumCpmmAmmConfigAccountEvent => |e: RaydiumCpmmAmmConfigAccountEvent| {
println!("RaydiumCpmmAmmConfigAccountEvent: {e:?}");
},
RaydiumCpmmPoolStateAccountEvent => |e: RaydiumCpmmPoolStateAccountEvent| {
println!("RaydiumCpmmPoolStateAccountEvent: {e:?}");
},
});
}
}