#!/bin/bash # # Change to repo root cd $(dirname $0)/../../.. export OUTPUT_DIR=testoutput oldpwd=`pwd` # tcmalloc if [ ! -f gperftools/.libs/libtcmalloc.so ]; then git clone https://github.com/gperftools/gperftools.git cd gperftools ./autogen.sh ./configure make -j8 cd .. fi # download datasets for benchmark cd benchmarks ./download_data.sh datasets=$(for file in $(find . -type f -name "dataset.*.pb" -not -path "./tmp/*"); do echo "$(pwd)/$file"; done | xargs) echo $datasets cd $oldpwd # build Python protobuf ./autogen.sh ./configure CXXFLAGS="-fPIC -O2" make -j8 cd python python setup.py build --cpp_implementation pip install . --user # build and run Python benchmark cd ../benchmarks make python-pure-python-benchmark make python-cpp-reflection-benchmark make -j8 python-cpp-generated-code-benchmark echo "[" > tmp/python_result.json echo "benchmarking pure python..." ./python-pure-python-benchmark --json --behavior_prefix="pure-python-benchmark" $datasets >> tmp/python_result.json echo "," >> "tmp/python_result.json" echo "benchmarking python cpp reflection..." env LD_PRELOAD="$oldpwd/gperftools/.libs/libtcmalloc.so" LD_LIBRARY_PATH="$oldpwd/src/.libs" ./python-cpp-reflection-benchmark --json --behavior_prefix="cpp-reflection-benchmark" $datasets >> tmp/python_result.json echo "," >> "tmp/python_result.json" echo "benchmarking python cpp generated code..." env LD_PRELOAD="$oldpwd/gperftools/.libs/libtcmalloc.so" LD_LIBRARY_PATH="$oldpwd/src/.libs" ./python-cpp-generated-code-benchmark --json --behavior_prefix="cpp-generated-code-benchmark" $datasets >> tmp/python_result.json echo "]" >> "tmp/python_result.json" cd $oldpwd # build CPP protobuf ./configure make clean && make -j8 # build Java protobuf cd java mvn package cd .. # build CPP benchmark cd benchmarks mv tmp/python_result.json . && make clean && make -j8 cpp-benchmark && mv python_result.json tmp echo "benchmarking cpp..." env LD_PRELOAD="$oldpwd/gperftools/.libs/libtcmalloc.so" ./cpp-benchmark --benchmark_min_time=5.0 --benchmark_out_format=json --benchmark_out="tmp/cpp_result.json" $datasets cd $oldpwd # build go protobuf export PATH="`pwd`/src:$PATH" export GOPATH="$HOME/gocode" mkdir -p "$GOPATH/src/github.com/google" rm -f "$GOPATH/src/github.com/protocolbuffers/protobuf" ln -s "`pwd`" "$GOPATH/src/github.com/protocolbuffers/protobuf" export PATH="$GOPATH/bin:$PATH" go get github.com/golang/protobuf/protoc-gen-go # build go benchmark cd benchmarks make go-benchmark echo "benchmarking go..." ./go-benchmark $datasets > tmp/go_result.txt # build java benchmark make java-benchmark echo "benchmarking java..." ./java-benchmark -Cresults.file.options.file="tmp/java_result.json" $datasets make js-benchmark echo "benchmarking js..." ./js-benchmark $datasets --json_output=$(pwd)/tmp/node_result.json make -j8 generate_proto3_data proto3_datasets=$(for file in $datasets; do echo $(pwd)/tmp/proto3_data/${file#$(pwd)}; done | xargs) echo $proto3_datasets # build php benchmark make -j8 php-c-benchmark echo "benchmarking php_c..." ./php-c-benchmark $proto3_datasets --json --behavior_prefix="php_c" > tmp/php_c_result.json # upload result to bq make python_add_init env LD_LIBRARY_PATH="$oldpwd/src/.libs" python -m util.result_uploader -php_c="../tmp/php_c_result.json" \ -cpp="../tmp/cpp_result.json" -java="../tmp/java_result.json" -go="../tmp/go_result.txt" -python="../tmp/python_result.json" -node="../tmp/node_result.json" cd $oldpwd