diff options
Diffstat (limited to 'third_party/protobuf/3.6.0/benchmarks/util/run_and_upload.py')
-rw-r--r-- | third_party/protobuf/3.6.0/benchmarks/util/run_and_upload.py | 290 |
1 files changed, 0 insertions, 290 deletions
diff --git a/third_party/protobuf/3.6.0/benchmarks/util/run_and_upload.py b/third_party/protobuf/3.6.0/benchmarks/util/run_and_upload.py deleted file mode 100644 index ae22a668bb..0000000000 --- a/third_party/protobuf/3.6.0/benchmarks/util/run_and_upload.py +++ /dev/null @@ -1,290 +0,0 @@ -import argparse -import os -import re -import copy -import uuid -import calendar -import time -import big_query_utils -import datetime -import json -# This import depends on the automake rule protoc_middleman, please make sure -# protoc_middleman has been built before run this file. -import os.path, sys -sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), os.pardir)) -import tmp.benchmarks_pb2 as benchmarks_pb2 -from click.types import STRING - -_PROJECT_ID = 'grpc-testing' -_DATASET = 'protobuf_benchmark_result' -_TABLE = 'opensource_result_v1' -_NOW = "%d%02d%02d" % (datetime.datetime.now().year, - datetime.datetime.now().month, - datetime.datetime.now().day) - -file_size_map = {} - -def get_data_size(file_name): - if file_name in file_size_map: - return file_size_map[file_name] - benchmark_dataset = benchmarks_pb2.BenchmarkDataset() - benchmark_dataset.ParseFromString( - open(os.path.dirname(os.path.abspath(__file__)) + "/../" + file_name).read()) - size = 0 - count = 0 - for payload in benchmark_dataset.payload: - size += len(payload) - count += 1 - file_size_map[file_name] = (size, 1.0 * size / count) - return size, 1.0 * size / count - - -def extract_file_name(file_name): - name_list = re.split("[/\.]", file_name) - short_file_name = "" - for name in name_list: - if name[:14] == "google_message": - short_file_name = name - return short_file_name - - -cpp_result = [] -python_result = [] -java_result = [] -go_result = [] - - -# CPP results example: -# [ -# "benchmarks": [ -# { -# "bytes_per_second": int, -# "cpu_time": int, -# "name: string, -# "time_unit: string, -# ... -# }, -# ... -# ], -# ... -# ] -def parse_cpp_result(filename): - global cpp_result - if filename == "": - return - if filename[0] != '/': - filename = os.path.dirname(os.path.abspath(__file__)) + '/' + filename - with open(filename) as f: - results = json.loads(f.read()) - for benchmark in results["benchmarks"]: - data_filename = "".join( - re.split("(_parse_|_serialize)", benchmark["name"])[0]) - behavior = benchmark["name"][len(data_filename) + 1:] - cpp_result.append({ - "language": "cpp", - "dataFileName": data_filename, - "behavior": behavior, - "throughput": benchmark["bytes_per_second"] / 2.0 ** 20 - }) - - -# Python results example: -# [ -# [ -# { -# "filename": string, -# "benchmarks": { -# behavior: results, -# ... -# }, -# "message_name": STRING -# }, -# ... -# ], #pure-python -# ... -# ] -def parse_python_result(filename): - global python_result - if filename == "": - return - if filename[0] != '/': - filename = os.path.dirname(os.path.abspath(__file__)) + '/' + filename - with open(filename) as f: - results_list = json.loads(f.read()) - for results in results_list: - for result in results: - _, avg_size = get_data_size(result["filename"]) - for behavior in result["benchmarks"]: - python_result.append({ - "language": "python", - "dataFileName": extract_file_name(result["filename"]), - "behavior": behavior, - "throughput": avg_size / - result["benchmarks"][behavior] * 1e9 / 2 ** 20 - }) - - -# Java results example: -# [ -# { -# "id": string, -# "instrumentSpec": {...}, -# "measurements": [ -# { -# "weight": float, -# "value": { -# "magnitude": float, -# "unit": string -# }, -# ... -# }, -# ... -# ], -# "run": {...}, -# "scenario": { -# "benchmarkSpec": { -# "methodName": string, -# "parameters": { -# defined parameters in the benchmark: parameters value -# }, -# ... -# }, -# ... -# } -# -# }, -# ... -# ] -def parse_java_result(filename): - global average_bytes_per_message, java_result - if filename == "": - return - if filename[0] != '/': - filename = os.path.dirname(os.path.abspath(__file__)) + '/' + filename - with open(filename) as f: - results = json.loads(f.read()) - for result in results: - total_weight = 0 - total_value = 0 - for measurement in result["measurements"]: - total_weight += measurement["weight"] - total_value += measurement["value"]["magnitude"] - avg_time = total_value * 1.0 / total_weight - total_size, _ = get_data_size( - result["scenario"]["benchmarkSpec"]["parameters"]["dataFile"]) - java_result.append({ - "language": "java", - "throughput": total_size / avg_time * 1e9 / 2 ** 20, - "behavior": result["scenario"]["benchmarkSpec"]["methodName"], - "dataFileName": extract_file_name( - result["scenario"]["benchmarkSpec"]["parameters"]["dataFile"]) - }) - - -# Go benchmark results: -# -# goos: linux -# goarch: amd64 -# Benchmark/.././datasets/google_message2/dataset.google_message2.pb/Unmarshal-12 3000 705784 ns/op -# Benchmark/.././datasets/google_message2/dataset.google_message2.pb/Marshal-12 2000 634648 ns/op -# Benchmark/.././datasets/google_message2/dataset.google_message2.pb/Size-12 5000 244174 ns/op -# Benchmark/.././datasets/google_message2/dataset.google_message2.pb/Clone-12 300 4120954 ns/op -# Benchmark/.././datasets/google_message2/dataset.google_message2.pb/Merge-12 300 4108632 ns/op -# PASS -# ok _/usr/local/google/home/yilunchong/mygit/protobuf/benchmarks 124.173s -def parse_go_result(filename): - global go_result - if filename == "": - return - if filename[0] != '/': - filename = os.path.dirname(os.path.abspath(__file__)) + '/' + filename - with open(filename) as f: - for line in f: - result_list = re.split("[\ \t]+", line) - if result_list[0][:9] != "Benchmark": - continue - first_slash_index = result_list[0].find('/') - last_slash_index = result_list[0].rfind('/') - full_filename = result_list[0][first_slash_index+4:last_slash_index] # delete ../ prefix - total_bytes, _ = get_data_size(full_filename) - behavior_with_suffix = result_list[0][last_slash_index+1:] - last_dash = behavior_with_suffix.rfind("-") - if last_dash == -1: - behavior = behavior_with_suffix - else: - behavior = behavior_with_suffix[:last_dash] - go_result.append({ - "dataFilename": extract_file_name(full_filename), - "throughput": total_bytes / float(result_list[2]) * 1e9 / 2 ** 20, - "behavior": behavior, - "language": "go" - }) - - -def get_metadata(): - build_number = os.getenv('BUILD_NUMBER') - build_url = os.getenv('BUILD_URL') - job_name = os.getenv('JOB_NAME') - git_commit = os.getenv('GIT_COMMIT') - # actual commit is the actual head of PR that is getting tested - git_actual_commit = os.getenv('ghprbActualCommit') - - utc_timestamp = str(calendar.timegm(time.gmtime())) - metadata = {'created': utc_timestamp} - - if build_number: - metadata['buildNumber'] = build_number - if build_url: - metadata['buildUrl'] = build_url - if job_name: - metadata['jobName'] = job_name - if git_commit: - metadata['gitCommit'] = git_commit - if git_actual_commit: - metadata['gitActualCommit'] = git_actual_commit - - return metadata - - -def upload_result(result_list, metadata): - for result in result_list: - new_result = copy.deepcopy(result) - new_result['metadata'] = metadata - bq = big_query_utils.create_big_query() - row = big_query_utils.make_row(str(uuid.uuid4()), new_result) - if not big_query_utils.insert_rows(bq, _PROJECT_ID, _DATASET, - _TABLE + "$" + _NOW, - [row]): - print 'Error when uploading result', new_result - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument("-cpp", "--cpp_input_file", - help="The CPP benchmark result file's name", - default="") - parser.add_argument("-java", "--java_input_file", - help="The Java benchmark result file's name", - default="") - parser.add_argument("-python", "--python_input_file", - help="The Python benchmark result file's name", - default="") - parser.add_argument("-go", "--go_input_file", - help="The golang benchmark result file's name", - default="") - args = parser.parse_args() - - parse_cpp_result(args.cpp_input_file) - parse_python_result(args.python_input_file) - parse_java_result(args.java_input_file) - parse_go_result(args.go_input_file) - - metadata = get_metadata() - print "uploading cpp results..." - upload_result(cpp_result, metadata) - print "uploading java results..." - upload_result(java_result, metadata) - print "uploading python results..." - upload_result(python_result, metadata) - print "uploading go results..." - upload_result(go_result, metadata) |