benchmark.yml 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. name: Benchmark
  2. on:
  3. push:
  4. branches:
  5. - master
  6. jobs:
  7. benchmark:
  8. if: github.repository == 'anza-xyz/agave'
  9. name: benchmark
  10. runs-on: benchmark
  11. strategy:
  12. fail-fast: false
  13. matrix:
  14. # before adding your benchmark. please check these steps:
  15. # 1. generate a file that includes your benchmark result. it should looks like
  16. #
  17. # ```
  18. # test bench_accounts_delta_hash ... bench: 48,035,858 ns/iter (+/- 2,118,806)
  19. # ```
  20. #
  21. # 2. run `DRY_RUN=1 ./ci/upload-benchmark.sh <YOUR_BENCHMARK_RESULT_FILE_PATH>` to ensure the datapoints are correct
  22. # it should looks similar to this:
  23. #
  24. # ```
  25. # datapoint: ,commit=xxxx,test_suite=xxxx,name=bench_accounts_delta_hash median=48035858,deviation=2118806i
  26. # ```
  27. #
  28. # you only need to check `name`, `median` and `deviation`
  29. #
  30. test:
  31. - {
  32. name: "solana-runtime",
  33. commands: ["cargo +$rust_nightly bench -p solana-runtime"],
  34. }
  35. - {
  36. name: "solana-gossip",
  37. commands: ["cargo bench -p solana-gossip -- --output-format bencher --noplot"],
  38. }
  39. - {
  40. name: "solana-poh",
  41. commands: ["cargo +$rust_nightly bench -p solana-poh"],
  42. }
  43. - {
  44. name: "solana-core",
  45. commands: ["cargo +$rust_nightly bench -p solana-core"],
  46. }
  47. - {
  48. name: "sbf",
  49. before_command: "make -C programs/sbf all",
  50. commands:
  51. [
  52. "cargo +$rust_nightly bench --manifest-path programs/sbf/Cargo.toml --features=sbf_c",
  53. ],
  54. }
  55. # spliting solana-accounts-db because it includes criterion bench
  56. - {
  57. name: "solana-accounts-db",
  58. commands:
  59. [
  60. "cargo +$rust_nightly bench -p solana-accounts-db --bench accounts_index",
  61. "cargo +$rust_nightly bench -p solana-accounts-db --bench accounts",
  62. "cargo +$rust_nightly bench -p solana-accounts-db --bench append_vec",
  63. "cargo +$rust_nightly bench -p solana-accounts-db --bench bench_accounts_file -- --output-format bencher",
  64. "cargo +$rust_nightly bench -p solana-accounts-db --bench bench_hashing -- --output-format bencher",
  65. "cargo +$rust_nightly bench -p solana-accounts-db --bench bench_serde -- --output-format bencher",
  66. ],
  67. }
  68. steps:
  69. - name: Checkout
  70. uses: actions/checkout@v6
  71. - name: Before Command
  72. if: ${{ matrix.test.before_command != '' }}
  73. run: |
  74. ${{ matrix.test.before_command }}
  75. - name: Command
  76. run: |
  77. source ci/rust-version.sh nightly
  78. echo '${{ toJson(matrix.test.commands) }}' | jq -r '.[]' | while read command; do
  79. eval $command | tee -a benchmark
  80. done
  81. - name: Upload Result
  82. run: |
  83. TEST_SUITE="${{ matrix.test.name }}" \
  84. COMMIT_HASH="$(git rev-parse HEAD)" \
  85. INFLUX_HOST="${{ secrets.BENCHMARK_INFLUX_HOST }}" \
  86. INFLUX_DB="${{ secrets.BENCHMARK_INFLUX_DB }}" \
  87. INFLUX_USER="${{ secrets.BENCHMARK_INFLUX_USER }}" \
  88. INFLUX_PASSWORD="${{ secrets.BENCHMARK_INFLUX_PASSWORD }}" \
  89. INFLUX_MEASUREMENT="${{ secrets.BENCHMARK_INFLUX_MEASUREMENT }}" \
  90. ./ci/upload-benchmark.sh benchmark