mirror of https://github.com/smithy-lang/smithy-rs
RFC30: Compile time benchmark (#2617)
## Motivation and Context This PR implements ci-script for bench marking compile time. Results are turned into a markdown file and compile time is normalized to a value relative to the compile time of S3's sdk on dev profile without any features. Benchmark is triggered for every PR. I considered using AWS batch, however, I decided not to move forward with for following reasons - I do not have access to your AWS account, thus making the debugging extremely difficult - Fork's github action will always fail if you block access ## Testing NA ## Checklist - [ ] I have updated `CHANGELOG.next.toml` if I made changes to the smithy-rs codegen or runtime crates - [ ] I have updated `CHANGELOG.next.toml` if I made changes to the AWS SDK, generated SDK code, or SDK runtime crates ---- _By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice._ --------- Co-authored-by: Zelda Hessler <zhessler@amazon.com>
This commit is contained in:
parent
334891d98f
commit
a6c3aba5eb
|
@ -135,10 +135,45 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
aws s3 cp target/doc "s3://${S3_BUCKET_NAME}/docs/${{ inputs.head_revision }}" --recursive
|
aws s3 cp target/doc "s3://${S3_BUCKET_NAME}/docs/${{ inputs.head_revision }}" --recursive
|
||||||
|
|
||||||
|
compiletime-benchmark:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Run Compiletime Benchmark
|
||||||
|
permissions:
|
||||||
|
id-token: write
|
||||||
|
contents: read
|
||||||
|
pull-requests: write
|
||||||
|
outputs:
|
||||||
|
compiletime-benchmark: ${{ steps.compiletime-benchmark.outputs.compiletime-benchmark }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: actions/cache@v3
|
||||||
|
name: Gradle Cache
|
||||||
|
with:
|
||||||
|
path: |
|
||||||
|
~/.gradle/caches
|
||||||
|
~/.gradle/wrapper
|
||||||
|
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-gradle-
|
||||||
|
# JDK is needed to generate code
|
||||||
|
- name: Set up JDK
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
distribution: corretto
|
||||||
|
java-package: jdk
|
||||||
|
java-version: ${{ env.java_version }}
|
||||||
|
- uses: dtolnay/rust-toolchain@master
|
||||||
|
with:
|
||||||
|
toolchain: ${{ env.rust_version }}
|
||||||
|
- name: run benchmark
|
||||||
|
id: run-compiletime-benchmark
|
||||||
|
run: bash tools/ci-scripts/compiletime-benchmark && cat /tmp/compiletime-benchmark.md >> "$GITHUB_OUTPUT"
|
||||||
|
|
||||||
post-bot-comment:
|
post-bot-comment:
|
||||||
needs:
|
needs:
|
||||||
- generate-diff
|
- generate-diff
|
||||||
- generate-doc-preview
|
- generate-doc-preview
|
||||||
|
- compiletime-benchmark
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Post bot comment
|
name: Post bot comment
|
||||||
permissions:
|
permissions:
|
||||||
|
@ -164,6 +199,8 @@ jobs:
|
||||||
issue_number: ${{ inputs.issue_number }},
|
issue_number: ${{ inputs.issue_number }},
|
||||||
owner: context.repo.owner,
|
owner: context.repo.owner,
|
||||||
repo: context.repo.repo,
|
repo: context.repo.repo,
|
||||||
body: '${{ steps.bot-messages.outputs.codegen-diff }}\n\n' +
|
body: '${{ steps.compiletime-benchmark.outputs.compiletime-benchmark }}\n\n' +
|
||||||
|
'${{ steps.bot-messages.outputs.codegen-diff }}\n\n' +
|
||||||
'${{ needs.generate-doc-preview.outputs.bot-message }}\n\n'
|
'${{ needs.generate-doc-preview.outputs.bot-message }}\n\n'
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
set -eux
|
||||||
|
|
||||||
|
export TIMEFORMAT=%R
|
||||||
|
|
||||||
|
function compile() {
|
||||||
|
cd $1 &&
|
||||||
|
export CARGORUSTFLAG="" &&
|
||||||
|
cargo build &>/dev/null && cargo clean && # this is for downloading crates
|
||||||
|
\time --format="%e seconds" bash -c "cargo build &> /dev/null" && cargo clean &&
|
||||||
|
\time --format="%e seconds" bash -c "cargo build --release &> /dev/null" && cargo clean &&
|
||||||
|
export CARGORUSTFLAG="--cfg aws_sdk_unstable" &&
|
||||||
|
\time --format="%e seconds" bash -c "cargo build --all-features &>/dev/null" && cargo clean &&
|
||||||
|
\time --format="%e seconds" bash -c "cargo build --all-features --release &>/dev/null" && cargo clean
|
||||||
|
}
|
||||||
|
|
||||||
|
./gradlew :aws:sdk:assemble
|
||||||
|
DIR=$PWD
|
||||||
|
for variable in $(dir "aws/sdk/build/aws-sdk/sdk"); do
|
||||||
|
if [[ $variable != *"aws-"* ]]; then
|
||||||
|
echo "START" &>>/tmp/compiletime-benchmark.txt
|
||||||
|
echo "$variable" &>>/tmp/compiletime-benchmark.txt
|
||||||
|
compile "$DIR/aws/sdk/build/aws-sdk/sdk/$variable" &>>/tmp/compiletime-benchmark.txt
|
||||||
|
echo "END" &>>/tmp/compiletime-benchmark.txt
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
cd $DIR
|
||||||
|
python3 tools/compiletime-benchmark/format.py
|
|
@ -0,0 +1,40 @@
|
||||||
|
#
|
||||||
|
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
#
|
||||||
|
|
||||||
|
import itertools
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
f = open("/tmp/compiletime-benchmark.txt", "r").read()
|
||||||
|
iter = map(lambda x: x.split("END"), f.split("START"))
|
||||||
|
iter = itertools.chain.from_iterable(iter)
|
||||||
|
markdown = """
|
||||||
|
| sdk name | dev | release | dev all features | release all features |
|
||||||
|
| -------- | --- | ------- | ---------------- | -------------------- |
|
||||||
|
"""
|
||||||
|
idx = 0
|
||||||
|
for i in iter:
|
||||||
|
idx += 1
|
||||||
|
print("============")
|
||||||
|
print(idx)
|
||||||
|
print(i)
|
||||||
|
print("============")
|
||||||
|
|
||||||
|
lines = i.splitlines()
|
||||||
|
if len(lines) > 1:
|
||||||
|
continue
|
||||||
|
|
||||||
|
sdk_name = lines[0]
|
||||||
|
row = "\n|" + sdk_name + \
|
||||||
|
"|".join(map(lambda x: float(x), lines[1:])) + "|"
|
||||||
|
|
||||||
|
markdown += row
|
||||||
|
|
||||||
|
print(markdown)
|
||||||
|
with open("/tmp/compiletime-benchmark.md", "w") as f:
|
||||||
|
f.write(markdown)
|
||||||
|
f.flush()
|
||||||
|
|
||||||
|
main()
|
Loading…
Reference in New Issue