gvisor/benchmarks/workloads/redisbenchmark/__init__.py

86 lines
1.9 KiB
Python

# python3
# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Redis-benchmark tool."""
import re
OPERATIONS = [
"PING_INLINE",
"PING_BULK",
"SET",
"GET",
"INCR",
"LPUSH",
"RPUSH",
"LPOP",
"RPOP",
"SADD",
"HSET",
"SPOP",
"LRANGE_100",
"LRANGE_300",
"LRANGE_500",
"LRANGE_600",
"MSET",
]
METRICS = dict()
SAMPLE_DATA = """
"PING_INLINE","48661.80"
"PING_BULK","50301.81"
"SET","48923.68"
"GET","49382.71"
"INCR","49975.02"
"LPUSH","49875.31"
"RPUSH","50276.52"
"LPOP","50327.12"
"RPOP","50556.12"
"SADD","49504.95"
"HSET","49504.95"
"SPOP","50025.02"
"LPUSH (needed to benchmark LRANGE)","48875.86"
"LRANGE_100 (first 100 elements)","33955.86"
"LRANGE_300 (first 300 elements)","16550.81"
"LRANGE_500 (first 450 elements)","13653.74"
"LRANGE_600 (first 600 elements)","11219.57"
"MSET (10 keys)","44682.75"
"""
# pylint: disable=unused-argument
def sample(**kwargs) -> str:
return SAMPLE_DATA
# Bind a metric for each operation noted above.
for op in OPERATIONS:
def bind(metric):
"""Bind op to a new scope."""
# pylint: disable=unused-argument
def parse(data: str, **kwargs) -> float:
"""Operation throughput in requests/sec."""
regex = r"\"" + metric + r"( .*)?\",\"(\d*.\d*)"
res = re.compile(regex).search(data)
if res:
return float(res.group(2))
return 0.0
parse.__name__ = metric
return parse
METRICS[op] = bind(op)