smoke: support node
image
#151
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Benchmark | |
on: | |
schedule: | |
# Run at 03:00 clock UTC on Monday and Wednesday | |
- cron: "0 03 * * 1,3" | |
pull_request: | |
paths: | |
- '.github/workflows/benchmark.yml' | |
workflow_dispatch: | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
contrib-build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Setup Golang | |
uses: actions/setup-go@v4 | |
with: | |
go-version-file: 'go.work' | |
cache-dependency-path: "**/*.sum" | |
- name: Build Contrib | |
run: | | |
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sudo sh -s -- -b /usr/local/bin v1.51.2 | |
make -e DOCKER=false nydusify-release | |
- name: Upload Nydusify | |
uses: actions/upload-artifact@master | |
with: | |
name: nydusify-artifact | |
path: contrib/nydusify/cmd/nydusify | |
nydus-build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Rust Cache | |
uses: Swatinem/[email protected] | |
with: | |
cache-on-failure: true | |
shared-key: Linux-cargo-amd64 | |
- name: Build Nydus | |
run: | | |
rustup component add rustfmt clippy | |
make | |
- name: Upload Nydus Binaries | |
uses: actions/upload-artifact@master | |
with: | |
name: nydus-artifact | |
path: | | |
target/release/nydus-image | |
target/release/nydusd | |
benchmark-description: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Description | |
run: | | |
echo "## Benchmark Environment" > $GITHUB_STEP_SUMMARY | |
echo "| operating system | cpu | memory " >> $GITHUB_STEP_SUMMARY | |
echo "|:----------------:|:---:|:------ " >> $GITHUB_STEP_SUMMARY | |
echo "| ubuntu-22.04 | 2-core CPU (x86_64) | 7GB |" >> $GITHUB_STEP_SUMMARY | |
benchmark-fsversion-v5: | |
runs-on: ubuntu-latest | |
needs: [contrib-build, nydus-build] | |
strategy: | |
matrix: | |
include: | |
- image: wordpress | |
tag: 6.1.1 | |
- image: node | |
tag: 19.8 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Download Nydus | |
uses: actions/download-artifact@master | |
with: | |
name: nydus-artifact | |
path: target/release | |
- name: Download Nydusify | |
uses: actions/download-artifact@master | |
with: | |
name: nydusify-artifact | |
path: contrib/nydusify/cmd | |
- name: Prepare Environment | |
run: | | |
sudo bash misc/performance/prepare.sh | |
- name: BenchMark Test | |
run: | | |
export BENCHMARK_TEST_IMAGE=${{ matrix.image }}:${{ matrix.tag }} | |
export BENCHMARK_MODE=fs-version-5 | |
export BENCHMARK_METRIC_FILE=${{ matrix.image }}-fsversion-v5.json | |
sudo -E make smoke-benchmark | |
- name: Save BenchMark Result | |
uses: actions/upload-artifact@v3 | |
with: | |
name: benchmark-fsversion-v5-${{ matrix.image }} | |
path: smoke/${{ matrix.image }}-fsversion-v5.json | |
benchmark-fsversion-v6: | |
runs-on: ubuntu-latest | |
needs: [contrib-build, nydus-build] | |
strategy: | |
matrix: | |
include: | |
- image: wordpress | |
tag: 6.1.1 | |
- image: node | |
tag: 19.8 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Download Nydus | |
uses: actions/download-artifact@master | |
with: | |
name: nydus-artifact | |
path: target/release | |
- name: Download Nydusify | |
uses: actions/download-artifact@master | |
with: | |
name: nydusify-artifact | |
path: contrib/nydusify/cmd | |
- name: Prepare Environment | |
run: | | |
sudo bash misc/performance/prepare.sh | |
- name: BenchMark Test | |
run: | | |
export BENCHMARK_TEST_IMAGE=${{ matrix.image }}:${{ matrix.tag }} | |
export BENCHMARK_MODE=fs-version-6 | |
export BENCHMARK_METRIC_FILE=${{ matrix.image }}-fsversion-v6.json | |
sudo -E make smoke-benchmark | |
- name: Save BenchMark Result | |
uses: actions/upload-artifact@v3 | |
with: | |
name: benchmark-fsversion-v6-${{ matrix.image }} | |
path: smoke/${{ matrix.image }}-fsversion-v6.json | |
benchmark-zran: | |
runs-on: ubuntu-latest | |
needs: [contrib-build, nydus-build] | |
strategy: | |
matrix: | |
include: | |
- image: wordpress | |
tag: 6.1.1 | |
- image: node | |
tag: 19.8 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Download Nydus | |
uses: actions/download-artifact@master | |
with: | |
name: nydus-artifact | |
path: target/release | |
- name: Download Nydusify | |
uses: actions/download-artifact@master | |
with: | |
name: nydusify-artifact | |
path: contrib/nydusify/cmd | |
- name: Prepare Environment | |
run: | | |
sudo bash misc/performance/prepare.sh | |
- name: BenchMark Test | |
run: | | |
export BENCHMARK_TEST_IMAGE=${{ matrix.image }}:${{ matrix.tag }} | |
export BENCHMARK_MODE=zran | |
export BENCHMARK_METRIC_FILE=${{ matrix.image }}-zran.json | |
sudo -E make smoke-benchmark | |
- name: Save BenchMark Result | |
uses: actions/upload-artifact@v3 | |
with: | |
name: benchmark-zran-${{ matrix.image }} | |
path: smoke/${{ matrix.image }}-zran.json | |
benchmark-result: | |
runs-on: ubuntu-latest | |
needs: [benchmark-fsversion-v5, benchmark-fsversion-v6, benchmark-zran] | |
strategy: | |
matrix: | |
include: | |
- image: wordpress | |
tag: 6.1.1 | |
- image: node | |
tag: 19.8 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Download benchmark-fsversion-v5 | |
uses: actions/download-artifact@v3 | |
with: | |
name: benchmark-fsversion-v5-${{ matrix.image }} | |
path: benchmark-result | |
- name: Download benchmark-fsversion-v6 | |
uses: actions/download-artifact@v3 | |
with: | |
name: benchmark-fsversion-v6-${{ matrix.image }} | |
path: benchmark-result | |
- name: Download benchmark-zran | |
uses: actions/download-artifact@v3 | |
with: | |
name: benchmark-zran-${{ matrix.image }} | |
path: benchmark-result | |
- uses: geekyeggo/delete-artifact@v2 | |
with: | |
name: "*-${{matrix.image}}" | |
- name: Benchmark Summary | |
run: | | |
case ${{matrix.image}} in | |
"wordpress") | |
echo "### workload: wait the 80 port response" > $GITHUB_STEP_SUMMARY | |
;; | |
"node") | |
echo "### workload: node index.js; wait the 80 port response" > $GITHUB_STEP_SUMMARY | |
;; | |
esac | |
cd benchmark-result | |
metric_files=( | |
"${{ matrix.image }}-fsversion-v5.json" | |
"${{ matrix.image }}-fsversion-v6.json" | |
"${{ matrix.image }}-zran.json" | |
) | |
echo "| bench-result | e2e-time(s) | read-count | read-amount(MB) | image-size(MB) |" >> $GITHUB_STEP_SUMMARY | |
echo "|:-------------|:----------:|:----------:|:---------------:|:--------:|" >> $GITHUB_STEP_SUMMARY | |
for file in "${metric_files[@]}"; do | |
name=$(basename "$file" .json | sed 's/^[^-]*-\(.*\)$/\1/') | |
data=$(jq -r '. | "\(.e2e_time / 1e9) \(.read_count) \(.read_amount_total / (1024 * 1024)) \(.image_size / (1024 * 1024))"' "$file" | \ | |
awk '{ printf "%.2f | %.0f | %.2f | %.2f", $1, $2, $3, $4 }') | |
echo "| $name | $data |" >> $GITHUB_STEP_SUMMARY | |
done |