diff --git a/.github/workflows/pr-benchmark-rust.yml b/.github/workflows/pr-benchmark-rust.yml index 33cab44fc..99f5442fd 100644 --- a/.github/workflows/pr-benchmark-rust.yml +++ b/.github/workflows/pr-benchmark-rust.yml @@ -122,7 +122,8 @@ jobs: echo "sccache not available, using regular cargo" fi # Run only the summary benchmark for quick validation in PRs - cargo bench --bench request_processing -- benchmark_summary --exact + # Capture output to file for CI summary + cargo bench --bench request_processing -- benchmark_summary --exact 2>&1 | tee benchmark_output.txt - name: Upload benchmark results if: always() @@ -131,6 +132,7 @@ jobs: name: request-processing-results-${{ github.sha }} path: | sgl-model-gateway/target/criterion/benchmark_summary/ + sgl-model-gateway/benchmark_output.txt retention-days: 30 - name: Show sccache stats @@ -193,7 +195,8 @@ jobs: else echo "sccache not available, using regular cargo" fi - cargo bench --bench tokenizer_benchmark + # Capture output to file for CI summary + cargo bench --bench tokenizer_benchmark 2>&1 | tee benchmark_output.txt - name: Upload benchmark results if: always() @@ -202,6 +205,7 @@ jobs: name: tokenizer-results-${{ github.sha }} path: | sgl-model-gateway/target/criterion/tokenizer*/ + sgl-model-gateway/benchmark_output.txt retention-days: 30 benchmark-tool-parser: @@ -260,7 +264,8 @@ jobs: else echo "sccache not available, using regular cargo" fi - cargo bench --bench tool_parser_benchmark + # Capture output to file for CI summary + cargo bench --bench tool_parser_benchmark 2>&1 | tee benchmark_output.txt - name: Upload benchmark results if: always() @@ -269,6 +274,7 @@ jobs: name: tool-parser-results-${{ github.sha }} path: | sgl-model-gateway/target/criterion/tool_parser*/ + sgl-model-gateway/benchmark_output.txt retention-days: 30 - name: Show sccache stats @@ -289,30 +295,81 @@ jobs: - name: Generate summary run: | - echo "## Benchmark Results Summary" > summary.md + echo "## 🚀 Benchmark Results Summary" > summary.md echo "" >> summary.md + + # Request Processing Benchmark echo "### Request Processing" >> summary.md - if [ -d "benchmark-results/request-processing-results-${{ github.sha }}" ]; then - echo "✅ Completed" >> summary.md + REQ_DIR="benchmark-results/request-processing-results-${{ github.sha }}" + if [ -d "$REQ_DIR" ]; then + echo "✅ **Completed**" >> summary.md + if [ -f "$REQ_DIR/benchmark_output.txt" ]; then + echo "" >> summary.md + echo "
" >> summary.md + echo "View Results" >> summary.md + echo "" >> summary.md + echo '```' >> summary.md + # Extract the summary section (starts with "SGLang Model Gateway" or performance data) + grep -A 100 "SGLang Model Gateway\|Quick Performance\|Performance Insights" "$REQ_DIR/benchmark_output.txt" | head -50 >> summary.md || cat "$REQ_DIR/benchmark_output.txt" | tail -60 >> summary.md + echo '```' >> summary.md + echo "
" >> summary.md + fi else echo "❌ Failed or skipped" >> summary.md fi echo "" >> summary.md + + # Tokenizer Benchmark echo "### Tokenizer" >> summary.md - if [ -d "benchmark-results/tokenizer-results-${{ github.sha }}" ]; then - echo "✅ Completed" >> summary.md + TOK_DIR="benchmark-results/tokenizer-results-${{ github.sha }}" + if [ -d "$TOK_DIR" ]; then + echo "✅ **Completed**" >> summary.md + if [ -f "$TOK_DIR/benchmark_output.txt" ]; then + echo "" >> summary.md + echo "
" >> summary.md + echo "View Results" >> summary.md + echo "" >> summary.md + echo '```' >> summary.md + # Extract the summary table section + grep -A 200 "TOKENIZER BENCHMARK SUMMARY\|ENCODING THROUGHPUT" "$TOK_DIR/benchmark_output.txt" | head -100 >> summary.md || cat "$TOK_DIR/benchmark_output.txt" | tail -100 >> summary.md + echo '```' >> summary.md + echo "
" >> summary.md + fi else echo "❌ Failed or skipped" >> summary.md fi echo "" >> summary.md + + # Tool Parser Benchmark echo "### Tool Parser" >> summary.md - if [ -d "benchmark-results/tool-parser-results-${{ github.sha }}" ]; then - echo "✅ Completed" >> summary.md + TOOL_DIR="benchmark-results/tool-parser-results-${{ github.sha }}" + if [ -d "$TOOL_DIR" ]; then + echo "✅ **Completed**" >> summary.md + if [ -f "$TOOL_DIR/benchmark_output.txt" ]; then + echo "" >> summary.md + echo "
" >> summary.md + echo "View Results" >> summary.md + echo "" >> summary.md + echo '```' >> summary.md + # Extract the summary table section + grep -A 200 "TOOL PARSER BENCHMARK SUMMARY\|REGISTRY OPERATIONS\|COMPLETE PARSING" "$TOOL_DIR/benchmark_output.txt" | head -100 >> summary.md || cat "$TOOL_DIR/benchmark_output.txt" | tail -100 >> summary.md + echo '```' >> summary.md + echo "
" >> summary.md + fi else echo "❌ Failed or skipped" >> summary.md fi + + echo "" >> summary.md + echo "---" >> summary.md + echo "_Generated at $(date -u '+%Y-%m-%d %H:%M:%S UTC')_" >> summary.md + + # Display summary in logs cat summary.md + # Write to GitHub Step Summary for visibility in the Actions UI + cat summary.md >> $GITHUB_STEP_SUMMARY + - name: Upload summary uses: actions/upload-artifact@v4 with: diff --git a/sgl-model-gateway/benches/request_processing.rs b/sgl-model-gateway/benches/request_processing.rs index 60d51faf0..34a331a56 100644 --- a/sgl-model-gateway/benches/request_processing.rs +++ b/sgl-model-gateway/benches/request_processing.rs @@ -577,8 +577,8 @@ fn bench_full_round_trip(c: &mut Criterion) { fn benchmark_summary(c: &mut Criterion) { let group = c.benchmark_group("benchmark_summary"); - println!("\nSGLang Router Performance Benchmark Suite"); - println!("============================================="); + println!("\nSGLang Model Gateway Performance Benchmark Suite"); + println!("================================================="); // Quick performance overview let generate_req = create_sample_generate_request();