From d8ab7c688a3826fa7ff848b073e341b1db3cdcbd Mon Sep 17 00:00:00 2001 From: Takayuki Date: Fri, 26 Mar 2021 02:55:54 +0900 Subject: [PATCH 1/3] benchmark fix benchmark use sh fix path bench bench get latest artifacts fix artifact name farm complete farm-linux replace fnm with farm bench specify workflow permission permission permission permission permission bench executable run shell script permission use rbenv in github change min-runs export env install rbenv remove rbenv install -L add uninstall fix min-runs fix min-runs 3 runs use home path warmup add ruby bin path fix ./farm change min-runs to 10 replace farm with frum get latest release remove id change param type embed params rm overlappted params echo url add option rename farm to frum uninstall every time rm version force uninstall prepare benchmark remove comment remove warmup add frum_reason command exists? print help print version chmod add warmup make install -j remove warmup add warmup 20 runs benchmark for initializing install version before benchmark fix subcommand not compress fix indent fix indent fix command benchmark init init install and local all --- .github/workflows/benchmark.yml | 177 ++++++++++++++++++++++++++++++++ benchmarks/frum | 6 ++ benchmarks/frum_reason | 6 ++ benchmarks/rbenv | 6 ++ benchmarks/run | 54 ++++++++++ benchmarks/run_init | 51 +++++++++ src/commands/install.rs | 2 + 7 files changed, 302 insertions(+) create mode 100644 .github/workflows/benchmark.yml create mode 100755 benchmarks/frum create mode 100644 benchmarks/frum_reason create mode 100755 benchmarks/rbenv create mode 100755 benchmarks/run create mode 100755 benchmarks/run_init diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml new file mode 100644 index 00000000..646f483c --- /dev/null +++ b/.github/workflows/benchmark.yml @@ -0,0 +1,177 @@ +name: Benchmark + +on: + push: + branches: + - benchmark + +jobs: + build_linux_binary: + name: Build Linux binary + runs-on: ${{ matrix.os }} + env: + CARGO: cargo + TARGET_DIR: ./target + RUST_BACKTRACE: 1 + strategy: + matrix: + build: [linux] + include: + - build: linux + os: ubuntu-18.04 + rust: stable + target: x86_64-unknown-linux-musl + steps: + - uses: actions/checkout@v2 + - name: Install Rust + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ matrix.rust }} + profile: minimal + override: true + target: ${{ matrix.target }} + + - name: Use Cross + run: | + cargo install cross + echo "CARGO=cross" >> $GITHUB_ENV + echo "TARGET_FLAGS=--target ${{ matrix.target }}" >> $GITHUB_ENV + echo "TARGET_DIR=./target/${{ matrix.target }}" >> $GITHUB_ENV + + - name: Show command used for Cargo + run: | + echo "cargo command is: ${{ env.CARGO }}" + echo "target flag is: ${{ env.TARGET_FLAGS }}" + echo "target dir is: ${{ env.TARGET_DIR }}" + + - name: Build static binary + run: ${{ env.CARGO }} build ${{ env.TARGET_FLAGS }} --verbose --release + + - uses: actions/upload-artifact@v2 + with: + name: frum-linux + path: target/x86_64-unknown-linux-musl/release/frum + + benchmark_init_on_linux: + name: Benchmark init (Linux) + needs: [build_linux_binary] + runs-on: ubuntu-latest + steps: + - uses: octokit/request-action@v2.x + id: get_benchmark_workflows + with: + route: GET /repos/:repository/actions/runs + repository: ${{ github.repository }} + branch: benchmark + status: completed + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: octokit/request-action@v2.x + id: get_latest_release + with: + route: GET /repos/:repository/releases/latest + repository: ${{ github.repository }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Take the output + run: | + URL=$(echo '${{ steps.get_latest_release.outputs.data }}' | jq -r '.assets | map(select(.name | endswith("x86_64-unknown-linux-musl.tar.gz"))) | .[0].browser_download_url') + echo $URL + curl -L $URL -H 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' > /tmp/frum-latest.tar.gz + mkdir ~/.frum-latest + tar -zxvf /tmp/frum-latest.tar.gz -C ~/.frum-latest --strip-components=1 + ls -lah ~/.frum-latest + - uses: actions/checkout@v2 + - name: Install hyperfine + run: | + wget https://github.com/sharkdp/hyperfine/releases/download/v1.10.0/hyperfine_1.10.0_amd64.deb + sudo dpkg -i hyperfine_1.10.0_amd64.deb + - name: Install rbenv + run: | + git clone https://github.com/sstephenson/rbenv.git ~/.rbenv + git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build + - uses: actions/download-artifact@v2 + with: + name: frum-linux + path: target/release/ + - name: Run benchmarks + run: ./benchmarks/run_init + + - name: Read basic.md for the generated report + id: basic_result + uses: juliangruber/read-file-action@v1 + with: + path: benchmarks/results/basic.md + + - uses: octokit/request-action@v2.x + with: + route: POST /repos/:repository/commits/:commit_sha/comments + repository: ${{ github.repository }} + commit_sha: ${{ github.sha }} + body: | + | + ${{ steps.basic_result.outputs.content }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + benchmark_all_on_linux: + name: Benchmark all (Linux) + needs: [build_linux_binary] + runs-on: ubuntu-latest + steps: + - uses: octokit/request-action@v2.x + id: get_benchmark_workflows + with: + route: GET /repos/:repository/actions/runs + repository: ${{ github.repository }} + branch: benchmark + status: completed + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - uses: octokit/request-action@v2.x + id: get_latest_release + with: + route: GET /repos/:repository/releases/latest + repository: ${{ github.repository }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Take the output + run: | + URL=$(echo '${{ steps.get_latest_release.outputs.data }}' | jq -r '.assets | map(select(.name | endswith("x86_64-unknown-linux-musl.tar.gz"))) | .[0].browser_download_url') + echo $URL + curl -L $URL -H 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' > /tmp/frum-latest.tar.gz + mkdir ~/.frum-latest + tar -zxvf /tmp/frum-latest.tar.gz -C ~/.frum-latest --strip-components=1 + ls -lah ~/.frum-latest + - uses: actions/checkout@v2 + - name: Install hyperfine + run: | + wget https://github.com/sharkdp/hyperfine/releases/download/v1.10.0/hyperfine_1.10.0_amd64.deb + sudo dpkg -i hyperfine_1.10.0_amd64.deb + - name: Install rbenv + run: | + git clone https://github.com/sstephenson/rbenv.git ~/.rbenv + git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build + - uses: actions/download-artifact@v2 + with: + name: frum-linux + path: target/release/ + - name: Run benchmarks + run: ./benchmarks/run + + - name: Read basic.md for the generated report + id: basic_result + uses: juliangruber/read-file-action@v1 + with: + path: benchmarks/results/basic.md + + - uses: octokit/request-action@v2.x + with: + route: POST /repos/:repository/commits/:commit_sha/comments + repository: ${{ github.repository }} + commit_sha: ${{ github.sha }} + body: | + | + ${{ steps.basic_result.outputs.content }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/benchmarks/frum b/benchmarks/frum new file mode 100755 index 00000000..d028f092 --- /dev/null +++ b/benchmarks/frum @@ -0,0 +1,6 @@ +#!/bin/bash + +eval "$(~/.frum-latest/frum init)" +~/.frum-latest/frum install 2.6.5 +~/.frum-latest/frum local 2.6.5 +ruby -v diff --git a/benchmarks/frum_reason b/benchmarks/frum_reason new file mode 100644 index 00000000..5c03fcaa --- /dev/null +++ b/benchmarks/frum_reason @@ -0,0 +1,6 @@ +#!/bin/bash + +eval "$(frum init)" +frum install 2.6.5 +frum local 2.6.5 +ruby -v diff --git a/benchmarks/rbenv b/benchmarks/rbenv new file mode 100755 index 00000000..219706be --- /dev/null +++ b/benchmarks/rbenv @@ -0,0 +1,6 @@ +#!/bin/bash + +eval "$(rbenv init -)" +rbenv install 2.6.5 +rbenv local 2.6.5 +ruby -v diff --git a/benchmarks/run b/benchmarks/run new file mode 100755 index 00000000..cb194d47 --- /dev/null +++ b/benchmarks/run @@ -0,0 +1,54 @@ +# #!/bin/bash + +set -e + +export frum_DIR + +BASE_DIR="$(dirname "$(realpath "$0")")" +cd "$BASE_DIR" || exit 1 + +frum_DIR="$(mktemp -d)" +export PATH="$BASE_DIR/../target/release:$PATH" + +mkdir results 2>/dev/null || : + +if [ ! -f "$BASE_DIR/../target/release/frum" ]; then + echo "Can't access the release version of frum" + exit 1 +fi + +if ! command -v hyperfine >/dev/null 2>&1; then + echo "Can't access Hyperfine. Are you sure it is installed?" + echo " if not, visit https://github.com/sharkdp/hyperfine" + exit 1 +fi + +chmod +x ./frum +chmod +x ./frum_reason +chmod +x ./rbenv +chmod +x ~/.frum-latest/frum +chmod +x ../target/release/frum + +export PATH="$HOME/.rbenv/bin:$PATH" +export PATH="$HOME/.rbenv/shims:$PATH" + +# command exists? +~/.frum-latest/frum -V +frum -V +rbenv -v +frum install 2.6.5 +rbenv install 2.6.5 +frum global 2.6.5 +rbenv global 2.6.5 + +hyperfine \ + --warmup 2 \ + --min-runs=20 \ + --time-unit=millisecond \ + --export-json="./results/basic.json" \ + --export-markdown="./results/basic.md" \ + --show-output \ + --prepare 'rm -rf ~/.rbenv/versions/2.6.5 ~/.frum/versions/2.6.5' \ + "./rbenv" \ + "./frum" \ + "./frum_reason" diff --git a/benchmarks/run_init b/benchmarks/run_init new file mode 100755 index 00000000..c35ac7d7 --- /dev/null +++ b/benchmarks/run_init @@ -0,0 +1,51 @@ +# #!/bin/bash + +set -e + +export frum_DIR + +BASE_DIR="$(dirname "$(realpath "$0")")" +cd "$BASE_DIR" || exit 1 + +frum_DIR="$(mktemp -d)" +export PATH="$BASE_DIR/../target/release:$PATH" + +mkdir results 2>/dev/null || : + +if [ ! -f "$BASE_DIR/../target/release/frum" ]; then + echo "Can't access the release version of frum" + exit 1 +fi + +if ! command -v hyperfine >/dev/null 2>&1; then + echo "Can't access Hyperfine. Are you sure it is installed?" + echo " if not, visit https://github.com/sharkdp/hyperfine" + exit 1 +fi + +chmod +x ~/.frum-latest/frum +chmod +x ../target/release/frum + +export PATH="$HOME/.rbenv/bin:$PATH" +export PATH="$HOME/.rbenv/shims:$PATH" + +# command exists? +~/.frum-latest/frum -V +frum -V +rbenv -v +frum install 2.6.5 +rbenv install 2.6.5 +frum global 2.6.5 +rbenv global 2.6.5 + +hyperfine \ + --warmup 2 \ + --min-runs=20 \ + --time-unit=millisecond \ + --export-json="./results/basic.json" \ + --export-markdown="./results/basic.md" \ + --show-output \ + --prepare 'rm -rf ~/.rbenv/versions/2.6.5 ~/.frum/versions/2.6.5' \ + 'eval "$(rbenv init -)"' \ + 'eval "$(frum init)"' \ + 'eval "$(~/.frum-latest/frum init)"' \ diff --git a/src/commands/install.rs b/src/commands/install.rs index f1937d0f..0d22666f 100644 --- a/src/commands/install.rs +++ b/src/commands/install.rs @@ -227,6 +227,8 @@ fn build_package( }; debug!("make install"); let make_install = Command::new("make") + .arg("-j") + .arg(&num_cpus::get().to_string()) .arg("install") .current_dir(¤t_dir) .output() From 888d4a54b6b91a36254f254764b996fa27773462 Mon Sep 17 00:00:00 2001 From: Takayuki Maeda Date: Fri, 27 Aug 2021 11:16:54 +0900 Subject: [PATCH 2/3] 2021-8-27-1 From 433bc16db47b80ef64be56662ef323f583587f48 Mon Sep 17 00:00:00 2001 From: Takayuki Maeda Date: Fri, 27 Aug 2021 11:25:52 +0900 Subject: [PATCH 3/3] run lscpu --- .github/workflows/benchmark.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 646f483c..9002b032 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -97,6 +97,8 @@ jobs: - name: Run benchmarks run: ./benchmarks/run_init + - run: lscpu + - name: Read basic.md for the generated report id: basic_result uses: juliangruber/read-file-action@v1 @@ -159,6 +161,8 @@ jobs: - name: Run benchmarks run: ./benchmarks/run + - run: lscpu + - name: Read basic.md for the generated report id: basic_result uses: juliangruber/read-file-action@v1