From e553b10b432dc6f73a8a36a1990f7692f7e2444f Mon Sep 17 00:00:00 2001 From: Kacy Fortner Date: Sun, 15 Feb 2026 22:23:54 -0500 Subject: [PATCH] fix: proto benchmark key collision and memory benchmark DBSIZE parsing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit proto benchmark: warmup keys used the same prefix for both raw SET and PROTO.SET, causing WRONGTYPE errors when raw GET hit proto-typed keys. use distinct prefixes (raw_warmup: vs proto_warmup:) for each benchmark. memory benchmark: ember returns DBSIZE as a bare number (e.g. "8605") while redis returns "(integer) 8605". awk '{print $2}' only worked for redis format, returning empty for ember — causing 0 bytes/key. switched to awk '{print $NF}' which handles both formats. --- bench/bench-memory.sh | 4 ++-- bench/bench-proto.py | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bench/bench-memory.sh b/bench/bench-memory.sh index 62585d2b..c5961278 100755 --- a/bench/bench-memory.sh +++ b/bench/bench-memory.sh @@ -137,7 +137,7 @@ measure_ember_type() { local mem_after mem_after=$(get_redis_memory "$port") local keys - keys=$(redis-cli -p "$port" DBSIZE 2>/dev/null | awk '{print $2}' | tr -d '\r') + keys=$(redis-cli -p "$port" DBSIZE 2>/dev/null | awk '{print $NF}' | tr -d '\r') local used=$((mem_after - mem_before)) local bytes_per_key=0 @@ -183,7 +183,7 @@ measure_redis_type() { local mem_after mem_after=$(get_redis_memory "$port") local keys - keys=$(redis-cli -p "$port" DBSIZE 2>/dev/null | awk '{print $2}' | tr -d '\r') + keys=$(redis-cli -p "$port" DBSIZE 2>/dev/null | awk '{print $NF}' | tr -d '\r') local used=$((mem_after - mem_before)) local bytes_per_key=0 diff --git a/bench/bench-proto.py b/bench/bench-proto.py index 3ce2f0ca..ad760628 100755 --- a/bench/bench-proto.py +++ b/bench/bench-proto.py @@ -102,7 +102,7 @@ def compute_stats(elapsed, latencies, count): def bench_raw_set(r, keys, value, warmup=1000): """raw SET throughput (no validation).""" for i in range(warmup): - r.set(f"warmup:{i}", value) + r.set(f"raw_warmup:{i}", value) latencies = [] start = time.perf_counter() @@ -117,7 +117,7 @@ def bench_raw_set(r, keys, value, warmup=1000): def bench_raw_get(r, keys, warmup=1000): """raw GET throughput.""" for i in range(warmup): - r.get(f"warmup:{i}") + r.get(f"raw_warmup:{i}") latencies = [] start = time.perf_counter() @@ -132,7 +132,7 @@ def bench_raw_get(r, keys, warmup=1000): def bench_proto_set(r, keys, value, type_name, warmup=1000): """PROTO.SET throughput (schema-validated).""" for i in range(warmup): - r.execute_command("PROTO.SET", f"warmup:{i}", type_name, value) + r.execute_command("PROTO.SET", f"proto_warmup:{i}", type_name, value) latencies = [] start = time.perf_counter() @@ -147,7 +147,7 @@ def bench_proto_set(r, keys, value, type_name, warmup=1000): def bench_proto_get(r, keys, warmup=1000): """PROTO.GET throughput.""" for i in range(warmup): - r.execute_command("PROTO.GET", f"warmup:{i}") + r.execute_command("PROTO.GET", f"proto_warmup:{i}") latencies = [] start = time.perf_counter() @@ -162,7 +162,7 @@ def bench_proto_get(r, keys, warmup=1000): def bench_proto_getfield(r, keys, field, warmup=1000): """PROTO.GETFIELD throughput (single field read).""" for i in range(warmup): - r.execute_command("PROTO.GETFIELD", f"warmup:{i}", field) + r.execute_command("PROTO.GETFIELD", f"proto_warmup:{i}", field) latencies = [] start = time.perf_counter() @@ -177,7 +177,7 @@ def bench_proto_getfield(r, keys, field, warmup=1000): def bench_proto_setfield(r, keys, field, value, warmup=1000): """PROTO.SETFIELD throughput (single field update).""" for i in range(warmup): - r.execute_command("PROTO.SETFIELD", f"warmup:{i}", field, value) + r.execute_command("PROTO.SETFIELD", f"proto_warmup:{i}", field, value) latencies = [] start = time.perf_counter()