-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Prototype for running a subset of benchmarks on a pull request (#58)
Benchmarking: Commit script for running subset of benchmarks to test a PR Squashing commits: * Adding prototype for running test against a pr * Setting to use default RUNS too * Addressing points and also setting default runs to 30 to match the scripts in node/benchmark * Updating usage * Rework to make it less hacky
- Loading branch information
1 parent
061d1ab
commit 2214520
Showing
1 changed file
with
97 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
#!/bin/bash | ||
function mandatory() { | ||
if [ -z "${!1}" ]; then | ||
echo "${1} not set" | ||
usage | ||
exit | ||
fi | ||
} | ||
|
||
function optional() { | ||
if [ -z "${!1}" ]; then | ||
echo -n "${1} not set (ok)" | ||
if [ -n "${2}" ]; then | ||
echo -n ", default is: ${2}" | ||
export ${1}="${2}" | ||
fi | ||
echo "" | ||
fi | ||
} | ||
function usage(){ | ||
echo "Usage:" | ||
|
||
echo "This script has two use cases:" | ||
echo "Use case 1: We want to test the impact of a PR on a branch." | ||
echo "To run this, declare:" | ||
echo "The script expects the following variables to be set:" | ||
echo "CATEGORY = a category of tests to run - folders in benchmark/" | ||
echo "BRANCH = the branch the test should be based off. e.g. master" | ||
echo "PULL_ID = the pull request that contains changes to test" | ||
echo "-------------------------------------------------------------" | ||
echo "Use case 2: We want to compare two branches, tags or commits." | ||
echo "To run this, declare:" | ||
echo "CATEGORY = a category of tests to run - folders in benchmark/" | ||
echo "BASE = the branch/tag/commit the test should be based off. e.g. master" | ||
echo "TARGET = the branch/tag/commit to compare against base" | ||
echo "-------------------------------------------------------------" | ||
echo "The following are optional across both use cases" | ||
echo "RUNS = defaults to empty" | ||
echo "FILTER = defaults to empty" | ||
echo "MACHINE_THREADS - used for building node. Defaults to all threads on machine" | ||
|
||
} | ||
|
||
if [ -z $PULL_ID ]; then | ||
#PULL_ID isn't declared. Therefore we are probably in use case #2 | ||
export USE_CASE=2 | ||
mandatory BASE | ||
mandatory TARGET | ||
else | ||
export USE_CASE=1 | ||
mandatory BRANCH | ||
mandatory PULL_ID | ||
fi | ||
mandatory CATEGORY | ||
optional RUNS | ||
optional FILTER | ||
getMACHINE_THREADS=`cat /proc/cpuinfo |grep processor|tail -n1|awk {'print $3'}` | ||
let getMACHINE_THREADS=getMACHINE_THREADS+1 #getting threads this way is 0 based. Add one | ||
optional MACHINE_THREADS $getMACHINE_THREADS | ||
rm -rf node | ||
git clone https://github.com/nodejs/node.git | ||
cd node | ||
case $USE_CASE in | ||
1) | ||
git checkout $BRANCH | ||
;; | ||
2) | ||
git checkout $BASE | ||
;; | ||
esac | ||
|
||
# build master | ||
./configure | ||
make -j${MACHINE_THREADS} | ||
mv out/Release/node ./node-master | ||
|
||
# build pr | ||
case $USE_CASE in | ||
1) | ||
curl https://patch-diff.githubusercontent.com/raw/nodejs/node/pull/${PULL_ID}.patch|git apply | ||
;; | ||
2) | ||
git checkout $TARGET | ||
;; | ||
esac | ||
./configure | ||
make -j${MACHINE_THREADS} | ||
mv out/Release/node ./node-pr | ||
if [ -n "$FILTER" ]; then | ||
FILTER="--filter ${FILTER}" | ||
fi | ||
if [ -n "$RUNS" ]; then | ||
RUNS="--runs ${RUNS}" | ||
fi | ||
# run benchmark | ||
./node-master benchmark/compare.js --old ./node-master --new ./node-pr $FILTER $RUNS -- $CATEGORY | tee output.csv | ||
cat output.csv | Rscript benchmark/compare.R |