xref: /aosp_15_r20/external/protobuf/kokoro/linux/benchmark/run.sh (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
1*1b3f573fSAndroid Build Coastguard Worker#!/bin/bash
2*1b3f573fSAndroid Build Coastguard Worker#
3*1b3f573fSAndroid Build Coastguard Worker# Change to repo root
4*1b3f573fSAndroid Build Coastguard Workercd $(dirname $0)/../../..
5*1b3f573fSAndroid Build Coastguard Worker
6*1b3f573fSAndroid Build Coastguard Workerset -ex
7*1b3f573fSAndroid Build Coastguard Worker
8*1b3f573fSAndroid Build Coastguard Workerexport OUTPUT_DIR=testoutput
9*1b3f573fSAndroid Build Coastguard Workerrepo_root="$(pwd)"
10*1b3f573fSAndroid Build Coastguard Worker
11*1b3f573fSAndroid Build Coastguard Worker# TODO(jtattermusch): Add back support for benchmarking with tcmalloc for C++ and python.
12*1b3f573fSAndroid Build Coastguard Worker# This feature was removed since it used to use tcmalloc from https://github.com/gperftools/gperftools.git
13*1b3f573fSAndroid Build Coastguard Worker# which is very outdated. See https://github.com/protocolbuffers/protobuf/issues/8725.
14*1b3f573fSAndroid Build Coastguard Worker
15*1b3f573fSAndroid Build Coastguard Worker# download datasets for benchmark
16*1b3f573fSAndroid Build Coastguard Workerpushd benchmarks
17*1b3f573fSAndroid Build Coastguard Workerdatasets=$(for file in $(find . -type f -name "dataset.*.pb" -not -path "./tmp/*"); do echo "$(pwd)/$file"; done | xargs)
18*1b3f573fSAndroid Build Coastguard Workerecho $datasets
19*1b3f573fSAndroid Build Coastguard Workerpopd
20*1b3f573fSAndroid Build Coastguard Worker
21*1b3f573fSAndroid Build Coastguard Worker# build Python protobuf
22*1b3f573fSAndroid Build Coastguard Worker./autogen.sh
23*1b3f573fSAndroid Build Coastguard Worker./configure CXXFLAGS="-fPIC -O2"
24*1b3f573fSAndroid Build Coastguard Workermake -j8
25*1b3f573fSAndroid Build Coastguard Workerpushd python
26*1b3f573fSAndroid Build Coastguard Workerpython3 -m venv env
27*1b3f573fSAndroid Build Coastguard Workersource env/bin/activate
28*1b3f573fSAndroid Build Coastguard Workerpython3 setup.py build --cpp_implementation
29*1b3f573fSAndroid Build Coastguard Workerpip3 install --install-option="--cpp_implementation" .
30*1b3f573fSAndroid Build Coastguard Workerpopd
31*1b3f573fSAndroid Build Coastguard Worker
32*1b3f573fSAndroid Build Coastguard Worker# build and run Python benchmark
33*1b3f573fSAndroid Build Coastguard Worker# We do this before building protobuf C++ since C++ build
34*1b3f573fSAndroid Build Coastguard Worker# will rewrite some libraries used by protobuf python.
35*1b3f573fSAndroid Build Coastguard Workerpushd benchmarks
36*1b3f573fSAndroid Build Coastguard Workermake python-pure-python-benchmark
37*1b3f573fSAndroid Build Coastguard Workermake python-cpp-reflection-benchmark
38*1b3f573fSAndroid Build Coastguard Workermake -j8 python-cpp-generated-code-benchmark
39*1b3f573fSAndroid Build Coastguard Workerecho "[" > tmp/python_result.json
40*1b3f573fSAndroid Build Coastguard Workerecho "benchmarking pure python..."
41*1b3f573fSAndroid Build Coastguard Worker./python-pure-python-benchmark --json --behavior_prefix="pure-python-benchmark" $datasets  >> tmp/python_result.json
42*1b3f573fSAndroid Build Coastguard Workerecho "," >> "tmp/python_result.json"
43*1b3f573fSAndroid Build Coastguard Workerecho "benchmarking python cpp reflection..."
44*1b3f573fSAndroid Build Coastguard Workerenv LD_LIBRARY_PATH="${repo_root}/src/.libs" ./python-cpp-reflection-benchmark --json --behavior_prefix="cpp-reflection-benchmark" $datasets  >> tmp/python_result.json
45*1b3f573fSAndroid Build Coastguard Workerecho "," >> "tmp/python_result.json"
46*1b3f573fSAndroid Build Coastguard Workerecho "benchmarking python cpp generated code..."
47*1b3f573fSAndroid Build Coastguard Workerenv LD_LIBRARY_PATH="${repo_root}/src/.libs" ./python-cpp-generated-code-benchmark --json --behavior_prefix="cpp-generated-code-benchmark" $datasets >> tmp/python_result.json
48*1b3f573fSAndroid Build Coastguard Workerecho "]" >> "tmp/python_result.json"
49*1b3f573fSAndroid Build Coastguard Workerpopd
50*1b3f573fSAndroid Build Coastguard Worker
51*1b3f573fSAndroid Build Coastguard Worker# build CPP protobuf
52*1b3f573fSAndroid Build Coastguard Worker./configure
53*1b3f573fSAndroid Build Coastguard Workermake clean && make -j8
54*1b3f573fSAndroid Build Coastguard Worker
55*1b3f573fSAndroid Build Coastguard Workerpushd java
56*1b3f573fSAndroid Build Coastguard Workermvn package -B -Dmaven.test.skip=true
57*1b3f573fSAndroid Build Coastguard Workerpopd
58*1b3f573fSAndroid Build Coastguard Worker
59*1b3f573fSAndroid Build Coastguard Workerpushd benchmarks
60*1b3f573fSAndroid Build Coastguard Worker
61*1b3f573fSAndroid Build Coastguard Worker# build and run C++ benchmark
62*1b3f573fSAndroid Build Coastguard Worker# "make clean" deletes the contents of the tmp/ directory, so we move it elsewhere and then restore it once build is done.
63*1b3f573fSAndroid Build Coastguard Worker# TODO(jtattermusch): find a less clumsy way of protecting python_result.json contents
64*1b3f573fSAndroid Build Coastguard Workermv tmp/python_result.json . && make clean && make -j8 cpp-benchmark && mv python_result.json tmp
65*1b3f573fSAndroid Build Coastguard Workerecho "benchmarking cpp..."
66*1b3f573fSAndroid Build Coastguard Workerenv ./cpp-benchmark --benchmark_min_time=5.0 --benchmark_out_format=json --benchmark_out="tmp/cpp_result.json" $datasets
67*1b3f573fSAndroid Build Coastguard Worker
68*1b3f573fSAndroid Build Coastguard Worker# TODO(jtattermusch): add benchmarks for https://github.com/protocolbuffers/protobuf-go.
69*1b3f573fSAndroid Build Coastguard Worker# The original benchmarks for https://github.com/golang/protobuf were removed
70*1b3f573fSAndroid Build Coastguard Worker# because:
71*1b3f573fSAndroid Build Coastguard Worker# * they were broken and haven't been producing results for a long time
72*1b3f573fSAndroid Build Coastguard Worker# * the https://github.com/golang/protobuf implementation has been superseded by
73*1b3f573fSAndroid Build Coastguard Worker#   https://github.com/protocolbuffers/protobuf-go
74*1b3f573fSAndroid Build Coastguard Worker
75*1b3f573fSAndroid Build Coastguard Worker# build and run java benchmark (java 11 is required)
76*1b3f573fSAndroid Build Coastguard Workermake java-benchmark
77*1b3f573fSAndroid Build Coastguard Workerecho "benchmarking java..."
78*1b3f573fSAndroid Build Coastguard Worker./java-benchmark -Cresults.file.options.file="tmp/java_result.json" $datasets
79*1b3f573fSAndroid Build Coastguard Worker
80*1b3f573fSAndroid Build Coastguard Worker# TODO(jtattermusch): re-enable JS benchmarks once https://github.com/protocolbuffers/protobuf/issues/8747 is fixed.
81*1b3f573fSAndroid Build Coastguard Worker# build and run js benchmark
82*1b3f573fSAndroid Build Coastguard Worker# make js-benchmark
83*1b3f573fSAndroid Build Coastguard Worker# echo "benchmarking js..."
84*1b3f573fSAndroid Build Coastguard Worker# ./js-benchmark $datasets  --json_output=$(pwd)/tmp/node_result.json
85*1b3f573fSAndroid Build Coastguard Worker
86*1b3f573fSAndroid Build Coastguard Worker# TODO(jtattermusch): add php-c-benchmark. Currently its build is broken.
87*1b3f573fSAndroid Build Coastguard Worker
88*1b3f573fSAndroid Build Coastguard Worker# persist raw the results in the build job log (for better debuggability)
89*1b3f573fSAndroid Build Coastguard Workercat tmp/cpp_result.json
90*1b3f573fSAndroid Build Coastguard Workercat tmp/java_result.json
91*1b3f573fSAndroid Build Coastguard Workercat tmp/python_result.json
92*1b3f573fSAndroid Build Coastguard Worker
93*1b3f573fSAndroid Build Coastguard Worker# print the postprocessed results to the build job log
94*1b3f573fSAndroid Build Coastguard Worker# TODO(jtattermusch): re-enable uploading results to bigquery (it is currently broken)
95*1b3f573fSAndroid Build Coastguard Workermake python_add_init
96*1b3f573fSAndroid Build Coastguard Workerenv LD_LIBRARY_PATH="${repo_root}/src/.libs" python3 -m util.result_parser \
97*1b3f573fSAndroid Build Coastguard Worker	-cpp="../tmp/cpp_result.json" -java="../tmp/java_result.json" -python="../tmp/python_result.json"
98*1b3f573fSAndroid Build Coastguard Workerpopd
99*1b3f573fSAndroid Build Coastguard Worker
100