diff --git a/.github/actions/pmem_benchmark_run/action.yml b/.github/actions/pmem_benchmark_run/action.yml new file mode 100644 index 00000000000..27c989c7ebe --- /dev/null +++ b/.github/actions/pmem_benchmark_run/action.yml @@ -0,0 +1,45 @@ +name: PMEM benchmark procedure +description: PMDK benchmarking procedure for self-hosted runners equipped with PMEM +inputs: + runtime_dir: + description: The root directory of the repository designated as runtime + required: true + reference_LIB_PATH: + description: LD_LIBRARY_PATH where the first version of PMDK is built + required: true + rival_LIB_PATH: + description: LD_LIBRARY_PATH where the second version of PMDK is built + required: true + config: + description: Name of the .cfg file to use + required: true + scenario: + description: Name of the scenario to run + required: true + pmem_path: + description: A PMEM-mounted directory to use + default: /mnt/pmem0 +runs: + using: composite + steps: + - name: Run the benchmark + working-directory: ${{ inputs.runtime_dir }} + shell: bash + run: >- + ./utils/benchmarks/run_and_combine.py + --reference ${{ inputs.reference_LIB_PATH }} --rival ${{ inputs.rival_LIB_PATH }} + --config ${{ inputs.config }} --scenario ${{ inputs.scenario }} + --pmem_path ${{ inputs.pmem_path }} + + - name: Archive logs + if: always() + uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.config }}__${{ inputs.scenario }} + path: '${{ inputs.runtime_dir }}/*.csv' + + - name: Remove logs + if: always() + working-directory: ${{ inputs.runtime_dir }} + shell: bash + run: rm -f *.csv diff --git a/.github/workflows/pmem_benchmark.yml b/.github/workflows/pmem_benchmark.yml new file mode 100644 index 00000000000..a95b9ff997e --- /dev/null +++ b/.github/workflows/pmem_benchmark.yml @@ -0,0 +1,92 @@ +name: PMEM Benchmark + +on: + workflow_dispatch: + inputs: + reference_ref: + type: string + default: master + rival_ref: + type: string + default: stable-2.0 + push: # XXX + + +jobs: + prep_runtime: + name: Prepare runtime + runs-on: [self-hosted, benchmark] + permissions: + contents: read + steps: + - name: Clone the git repo + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Build + run: make -j + + prep_contesters: + name: Prepare ${{ matrix.ROLE }} + runs-on: [self-hosted, benchmark] + needs: prep_runtime + strategy: + matrix: + include: + - ROLE: reference + GITHUB_REF: master # XXX ${{ inputs.reference_ref }} + - ROLE: rival + GITHUB_REF: stable-2.0 # XXX ${{ inputs.rival_ref }} + permissions: + contents: read + steps: + - name: Clone the git repo + uses: actions/checkout@v4 + with: + ref: ${{ matrix.GITHUB_REF }} + fetch-depth: 1 + path: ${{ matrix.ROLE }} + + - name: Build + working-directory: ${{ matrix.ROLE }} + run: make -j + + + run: + name: Run perf.cfg ${{ matrix.SCENARIO }} + runs-on: [self-hosted, benchmark] + needs: prep_contesters + strategy: + matrix: + SCENARIO: + - obj_tx_alloc_small_v_thread + - obj_pmalloc_small_v_threads + - obj_rbtree_map_insert + - obj_hashmap_tx_map_insert + steps: + - name: Benchmark + uses: ./.github/actions/pmem_benchmark_run + with: + runtime_dir: ./ + reference_LIB_PATH: reference/src/nondebug + rival_LIB_PATH: rival/src/nondebug + config: perf + scenario: ${{ matrix.SCENARIO }} + + + repack: + name: Repack + runs-on: ubuntu-latest + needs: run + steps: + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: csvs + + - name: Upload all as a single artifact + uses: actions/upload-artifact@v4 + with: + name: perf__all + path: csvs/**/*