diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index c7af576f08..e9b1fc4847 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,21 +2,20 @@ -## Breaking Changes +## API Changes - + ## Notes & open questions - - + ## Change checklist - + - [ ] Self-review. - [ ] Documentation updates following the [style guide](https://rust-lang.github.io/rfcs/1574-more-api-documentation-conventions.html#appendix-a-full-conventions-text), if relevant. - [ ] Tests if relevant. -- [ ] All breaking changes documented. +- [ ] All API changes documented. - [ ] This PR was created by a human that thought critically about the proposed change and wrote an as clear and concise description as they could. diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml deleted file mode 100644 index a90ab00586..0000000000 --- a/.github/workflows/perf.yml +++ /dev/null @@ -1,309 +0,0 @@ -name: Performance Tests - -on: - pull_request: - push: - branches: - - main - workflow_dispatch: - inputs: - compare_upstream: - type: boolean - default: true - description: Compare against upstream quinn - publish_metrics: - type: boolean - default: false - description: Publish metrics to perf.iroh.computer - -concurrency: - group: perf-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -env: - RUST_BACKTRACE: 1 - RUSTFLAGS: -Dwarnings - SCCACHE_GHA_ENABLED: "true" - RUSTC_WRAPPER: "sccache" - -# Default to read-only; jobs that need more grant it explicitly. -permissions: - contents: read - -jobs: - build: - name: Build ${{ matrix.impl }} perf - runs-on: [self-hosted, linux, X64] - timeout-minutes: 30 - strategy: - fail-fast: false - matrix: - include: - - impl: noq - artifact: noq-perf - - impl: upstream-quinn - artifact: quinn-perf-upstream - steps: - - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 - if: matrix.impl == 'noq' - with: - persist-credentials: false - - - uses: dtolnay/rust-toolchain@6c977a6ca4077a0ceb28ffbe03f59d46e9ac8772 # v1 - with: - toolchain: stable - - - uses: mozilla-actions/sccache-action@7d986dd989559c6ecdb630a3fd2557667be217ad # v0.0.9 - - - name: Get latest quinn release tag - if: matrix.impl == 'upstream-quinn' - id: quinn-release - run: | - LATEST_TAG=$(curl -s https://api.github.com/repos/quinn-rs/quinn/releases/latest | jq -r '.tag_name') - echo "tag=$LATEST_TAG" >> $GITHUB_OUTPUT - echo "Using upstream quinn release: $LATEST_TAG" - - - name: Clone upstream quinn - if: matrix.impl == 'upstream-quinn' - run: | - rm -rf /tmp/upstream-quinn - git clone --depth 1 --branch ${STEPS_QUINN_RELEASE_OUTPUTS_TAG} \ - https://github.com/quinn-rs/quinn.git /tmp/upstream-quinn - env: - STEPS_QUINN_RELEASE_OUTPUTS_TAG: ${{ steps.quinn-release.outputs.tag }} - - - name: Build perf binary - run: cargo build --locked --release -p perf --features json-output - working-directory: ${{ matrix.impl == 'upstream-quinn' && '/tmp/upstream-quinn' || '.' }} - - - name: Upload binary - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: ${{ matrix.artifact }} - path: ${{ matrix.impl == 'upstream-quinn' && '/tmp/upstream-quinn/target/release/quinn-perf' || 'target/release/noq-perf' }} - retention-days: 1 - - raw-perf: - name: Raw perf ${{ matrix.impl }} - needs: build - runs-on: [self-hosted, linux, X64] - timeout-minutes: 30 - strategy: - fail-fast: false - matrix: - impl: [noq, upstream-quinn] - include: - - impl: noq - artifact: noq-perf - - impl: upstream-quinn - artifact: quinn-perf-upstream - steps: - - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 - with: - persist-credentials: false - - - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 - with: - name: ${{ matrix.artifact }} - path: ./bin - - - name: Run benchmarks - run: | - PERF_BIN=$(ls ./bin/noq-perf ./bin/quinn-perf 2>/dev/null | head -1) - chmod +x "$PERF_BIN" - ./.github/scripts/run_perf.sh "$PERF_BIN" results/${{ matrix.impl }} - - - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: raw-results-${{ matrix.impl }} - path: results/ - retention-days: 3 - - netsim-perf: - name: Netsim perf ${{ matrix.impl }} - needs: build - runs-on: [self-hosted, linux, X64] - timeout-minutes: 30 - strategy: - fail-fast: false - matrix: - impl: [noq, upstream-quinn] - include: - - impl: noq - artifact: noq-perf - - impl: upstream-quinn - artifact: quinn-perf-upstream - steps: - - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 - with: - persist-credentials: false - - - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 - with: - name: ${{ matrix.artifact }} - path: ./bin - - - name: Fetch netsim - run: | - rm -rf /tmp/chuck - git clone --depth 1 https://github.com/n0-computer/chuck.git /tmp/chuck - - - name: Install netsim deps - run: | - cd /tmp/chuck/netsim - sudo apt-get update - ./setup.sh || true - ./cleanup.sh || true - - - name: Setup netsim bins - run: | - mkdir -p /tmp/chuck/netsim/bins - if [ -f ./bin/noq-perf ]; then - chmod +x ./bin/noq-perf - cp ./bin/noq-perf /tmp/chuck/netsim/bins/noq-perf - else - chmod +x ./bin/quinn-perf - cp ./bin/quinn-perf /tmp/chuck/netsim/bins/noq-perf - fi - - - name: Run netsim perf test - id: run_netsim - continue-on-error: true - run: | - ./.github/scripts/run_netsim_perf.sh ${{ matrix.impl }} /tmp/chuck/netsim - - - name: Collect results - if: always() - run: | - mkdir -p results/${{ matrix.impl }} - cp /tmp/chuck/netsim/report/*.json results/${{ matrix.impl }}/ 2>/dev/null || true - cp /tmp/chuck/netsim/logs/*.log results/${{ matrix.impl }}/ 2>/dev/null || true - - - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - if: always() - with: - name: netsim-results-${{ matrix.impl }} - path: results/ - retention-days: 3 - - - name: Cleanup netsim - if: always() - run: | - cd /tmp/chuck/netsim - ./cleanup.sh || true - - compare: - permissions: - contents: read - pull-requests: write # posts the comparison comment - name: Compare results - needs: [raw-perf, netsim-perf] - if: always() - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0 - with: - persist-credentials: false - - - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 - with: - pattern: raw-results-* - merge-multiple: true - path: raw-results/ - - - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 - with: - pattern: netsim-results-* - merge-multiple: true - path: netsim-results/ - - - name: Setup Python - uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 - with: - python-version: '3.11' - - - name: Generate comparison report - id: compare - run: | - python .github/scripts/compare_results.py raw-results/ netsim-results/ > comparison.md - echo "COMPARISON<> $GITHUB_OUTPUT - cat comparison.md >> $GITHUB_OUTPUT - echo "EOF" >> $GITHUB_OUTPUT - - - name: Convert to Metro format - run: | - python .github/scripts/perf_to_metro.py raw-results/ netsim-results/ \ - --commit ${{ github.sha }} > metro.json - - - name: Show results - run: | - echo "=== Comparison Report ===" - cat comparison.md - echo "" - echo "=== Metro Metrics ===" - cat metro.json - - - name: Upload comparison report - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 - with: - name: perf-comparison-report - path: | - comparison.md - metro.json - retention-days: 7 - - - name: Publish metrics to Metro - if: github.event_name == 'push' && github.ref == 'refs/heads/main' - run: | - if [[ -n "${{ secrets.METRO_TOKEN }}" && -n "${{ secrets.METRO_ENDPOINT }}" ]]; then - curl -X POST \ - -H "Content-Type: application/json" \ - -H "Authorization: Bearer ${{ secrets.METRO_TOKEN }}" \ - --data @metro.json \ - "${{ secrets.METRO_ENDPOINT }}" - else - echo "Metro secrets not configured, skipping publish" - fi - - - name: Find existing comment - if: github.event_name == 'pull_request' - uses: peter-evans/find-comment@3eae4d37986fb5a8592848f6a574fdf654e61f9e # v3.1.0 - id: find-comment - with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: 'github-actions[bot]' - body-includes: '' - - - name: Create new PR comment - if: github.event_name == 'pull_request' && steps.find-comment.outputs.comment-id == '' - uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 - with: - issue-number: ${{ github.event.pull_request.number }} - body: | - - ## Performance Comparison Report - -
- ${{ github.event.pull_request.head.sha }} - artifacts - - ${{ steps.compare.outputs.COMPARISON }} - -
- - - name: Update existing PR comment - if: github.event_name == 'pull_request' && steps.find-comment.outputs.comment-id != '' - uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 - with: - comment-id: ${{ steps.find-comment.outputs.comment-id }} - edit-mode: append - body: | - - --- -
- ${{ github.event.pull_request.head.sha }} - artifacts - - ${{ steps.compare.outputs.COMPARISON }} - -
- diff --git a/Cargo.lock b/Cargo.lock index a056d946a3..4c19159c8f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -540,9 +540,9 @@ checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "chacha20" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81" +checksum = "65c35e4b699c7e15ccbe7ee35c005e4fc0a278d22238a2857e6ce2dadeda1b06" dependencies = [ "cfg-if", "cpufeatures 0.3.0",