memgraph/tests/mgbench/benchgraph.sh

164 lines
4.5 KiB
Bash
Raw Normal View History

#!/bin/bash -e
pushd () { command pushd "$@" > /dev/null; }
popd () { command popd "$@" > /dev/null; }
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
pushd "$SCRIPT_DIR"
print_help () {
echo -e "$0\t\t => runs all available benchmarks with the prompt"
echo -e "$0 run_all\t => runs all available benchmarks"
echo -e "$0 zip\t => packages all result files and info about the system"
echo -e "$0 clean\t => removes all result files including the zip"
echo -e "$0 -h\t => prints help"
echo ""
echo " env vars:"
echo " MGBENCH_MEMGRAPH_BIN_PATH -> path to the memgraph binary in the release mode"
echo " MGBENCH_NEO_BIN_PATH -> path to the neo4j binary"
exit 0
}
MG_PATH="${MGBENCH_MEMGRAPH_BIN_PATH:-$SCRIPT_DIR/../../build/memgraph}"
NEO_PATH="${MGBENCH_NEO_BIN_PATH:-$SCRIPT_DIR/../../libs/neo4j/bin/neo4j}"
# If you want to skip some of the workloads or workers, just comment lines
# under the WORKLOADS or WORKERS variables.
WORKLOADS=(
pokec_small
pokec_medium
ldbc_interactive_sf0_1
ldbc_interactive_sf1
ldbc_bi_sf1
ldbc_interactive_sf3
ldbc_bi_sf3
)
WORKERS=(
24
48
)
check_binary () {
binary_path=$1
if [ -f "$binary_path" ]; then
echo "$binary_path found."
else
echo "Failed to find $binary_path exiting..."
exit 1
fi
}
check_all_binaries () {
check_binary "$MG_PATH"
check_binary "$NEO_PATH"
}
pokec_small () {
workers=$1
echo "running ${FUNCNAME[0]} with $workers client workers"
python3 graph_bench.py --vendor memgraph "$MG_PATH" --vendor neo4j "$NEO_PATH" \
--dataset-name pokec --dataset-group basic --dataset-size small \
--realistic 500 30 70 0 0 \
--realistic 500 30 70 0 0 \
--realistic 500 50 50 0 0 \
--realistic 500 70 30 0 0 \
--realistic 500 30 40 10 20 \
--mixed 500 30 0 0 0 70 \
--num-workers-for-benchmark "$workers"
}
pokec_medium () {
workers=$1
echo "running ${FUNCNAME[0]} with $workers client workers"
python3 graph_bench.py --vendor memgraph "$MG_PATH" --vendor neo4j "$NEO_PATH" \
--dataset-name pokec --dataset-group basic --dataset-size medium \
--realistic 500 30 70 0 0 \
--realistic 500 30 70 0 0 \
--realistic 500 50 50 0 0 \
--realistic 500 70 30 0 0 \
--realistic 500 30 40 10 20 \
--mixed 500 30 0 0 0 70 \
--num-workers-for-benchmark "$workers"
}
ldbc_interactive_sf0_1 () {
workers=$1
echo "running ${FUNCNAME[0]} with $workers client workers"
python3 graph_bench.py --vendor memgraph "$MG_PATH" --vendor neo4j "$NEO_PATH" \
--dataset-name ldbc_interactive --dataset-group interactive --dataset-size sf0.1 \
--num-workers-for-benchmark "$workers"
}
ldbc_interactive_sf1 () {
workers=$1
echo "running ${FUNCNAME[0]} with $workers client workers"
python3 graph_bench.py --vendor memgraph "$MG_PATH" --vendor neo4j "$NEO_PATH" \
--dataset-name ldbc_interactive --dataset-group interactive --dataset-size sf1 \
--num-workers-for-benchmark "$workers"
}
ldbc_bi_sf1 () {
workers=$1
echo "running ${FUNCNAME[0]} with $workers client workers"
python3 graph_bench.py --vendor memgraph "$MG_PATH" --vendor neo4j "$NEO_PATH" \
--dataset-name ldbc_bi --dataset-group bi --dataset-size sf1 \
--num-workers-for-benchmark "$workers"
}
ldbc_interactive_sf3 () {
workers=$1
echo "running ${FUNCNAME[0]} with $workers client workers"
python3 graph_bench.py --vendor memgraph "$MG_PATH" --vendor neo4j "$NEO_PATH" \
--dataset-name ldbc_interactive --dataset-group interactive --dataset-size sf3 \
--num-workers-for-benchmark "$workers"
}
ldbc_bi_sf3 () {
workers=$1
echo "running ${FUNCNAME[0]} with $workers client workers"
python3 graph_bench.py --vendor memgraph "$MG_PATH" --vendor neo4j "$NEO_PATH" \
--dataset-name ldbc_bi --dataset-group bi --dataset-size sf3 \
--num-workers-for-benchmark "$workers"
}
run_all () {
for workload in "${WORKLOADS[@]}"; do
for workers in "${WORKERS[@]}"; do
$workload "$workers"
sleep 1
done
done
}
package_all_results () {
cat /proc/cpuinfo > cpu.sysinfo
cat /proc/meminfo > mem.sysinfo
zip data.zip ./*.json ./*.report ./*.log ./*.sysinfo
}
clean_all_results () {
rm data.zip ./*.json ./*.report ./*.log ./*.sysinfo
}
if [ "$#" -eq 0 ]; then
check_all_binaries
read -p "Run all benchmarks? y|Y for YES, anything else NO " -n 1 -r
if [[ $REPLY =~ ^[Yy]$ ]]; then
run_all
fi
elif [ "$#" -eq 1 ]; then
case $1 in
run_all)
run_all
;;
zip)
package_all_results
;;
clean)
clean_all_results
;;
*)
print_help
;;
esac
else
print_help
fi