From f85bc9eb9a932988bdab198f9da20c2fea55bac2 Mon Sep 17 00:00:00 2001 From: Christopher Peplin Date: Thu, 22 Aug 2013 10:35:35 -0400 Subject: Add benchmarking tests for binary encoding (moved from cantranslator). --- benchmark/pip-requirements.txt | 1 + benchmark/proto/.gitignore | 1 + benchmark/proto/compare_sizes.py | 31 +++++++++++++++++++++++++++++++ benchmark/proto/generate.sh | 3 +++ benchmark/proto/openxc.proto | 21 +++++++++++++++++++++ 5 files changed, 57 insertions(+) create mode 100644 benchmark/pip-requirements.txt create mode 100644 benchmark/proto/.gitignore create mode 100644 benchmark/proto/compare_sizes.py create mode 100755 benchmark/proto/generate.sh create mode 100644 benchmark/proto/openxc.proto diff --git a/benchmark/pip-requirements.txt b/benchmark/pip-requirements.txt new file mode 100644 index 00000000..7f147d92 --- /dev/null +++ b/benchmark/pip-requirements.txt @@ -0,0 +1 @@ +protobuf==2.5.0 diff --git a/benchmark/proto/.gitignore b/benchmark/proto/.gitignore new file mode 100644 index 00000000..0520d7d2 --- /dev/null +++ b/benchmark/proto/.gitignore @@ -0,0 +1 @@ +*_pb2.py diff --git a/benchmark/proto/compare_sizes.py b/benchmark/proto/compare_sizes.py new file mode 100644 index 00000000..ce6b25b9 --- /dev/null +++ b/benchmark/proto/compare_sizes.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python + +from __future__ import division +import sys + +import openxc_pb2 +import json + +def sizeof_fmt(num): + for unit in ['bytes', 'KB', 'MB', 'GB', 'TB']: + if num < 1024.0: + return "%3.1f%s" % (num, unit) + num /= 1024.0 + +total_json_size = 0 +total_binary_size = 0 + +trace_file = sys.argv[1] +for line in open(trace_file): + raw_message = json.loads(line) + total_json_size += len(json.dumps(raw_message)) + binary_message = openxc_pb2.RawMessage() + binary_message.message_id = raw_message['id'] + binary_message.data = int(raw_message['data'], 0) + total_binary_size += len(binary_message.SerializeToString()) + +print("For the trace file %s..." % trace_file) +print("Total transferred JSON size is %s" % sizeof_fmt(total_json_size)) +print("Total transferred binary size is %s" % sizeof_fmt(total_binary_size)) +print("Binary encoding is %f%% smaller than JSON overall" % ( + 100 - (total_binary_size / total_json_size * 100))) diff --git a/benchmark/proto/generate.sh b/benchmark/proto/generate.sh new file mode 100755 index 00000000..576b7b13 --- /dev/null +++ b/benchmark/proto/generate.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +protoc -I . --python_out=. openxc.proto diff --git a/benchmark/proto/openxc.proto b/benchmark/proto/openxc.proto new file mode 100644 index 00000000..0af663c8 --- /dev/null +++ b/benchmark/proto/openxc.proto @@ -0,0 +1,21 @@ +package openxc; + +message RawMessage { + optional uint32 message_id = 1; + optional double data = 2; +} + +message TranslatedStringMessage { + optional string name = 1; + optional string value = 2; +} + +message TranslatedNumericMessage { + optional string name = 1; + optional double value = 2; +} + +message TranslatedBooleanMessage { + optional string name = 1; + optional bool value = 2; +} -- cgit 1.2.3-korg