All Products
Search
Document Center

Tair (Redis® OSS-Compatible):Performance whitepaper of SSD-based instances

Last Updated:Mar 28, 2026

This document covers the test environment, tooling, methodology, and results for a performance benchmark of Tair (Enterprise Edition) SSD-based instances.

Test environment

ItemDescription
Region and zoneHangzhou Zone I
Instance architectureStandard master-replica architecture. For details, see Standard architecture.
Stress testing hostElastic Compute Service (ECS) instance of the ecs.g6e.13xlarge type. For details, see Overview of instance families.
Instance types testedtair.localssd.c1m4.2xlarge, tair.localssd.c1m4.4xlarge, tair.localssd.c1m4.8xlarge

The benchmark covers two scenarios that represent opposite ends of the memory utilization spectrum:

  • Memory larger than data volume: Most data fits in memory. Memory-to-data ratio is approximately 7:1. This represents an in-memory-dominant access pattern.

  • Data volume larger than memory: Only a portion of data is cached in memory, and most read/write requests require disk I/O. Memory-to-data ratio is approximately 1:4. This represents an SSD-dominant access pattern.

Test tool

The benchmark uses YCSB, an open-source Java-based database benchmarking framework.

The YCSB source code is modified to support a LONG-typed recordcount parameter and to test Redis string commands. Download the modified YCSB source package.

Test script

The following script runs performance tests for the data-volume-larger-than-memory scenario:

#!/bin/bash

ip=192.168.0.23
port=3100
timeout=30000
command_group=string
recordcount=640000000
run_operationcount=20000000
fieldcount=1
fieldlength=100
threads=32
load_sleep_time=600
run_sleep_time=60

echo "##################################### $command_group  ############################################"

# Load
./bin/ycsb load redis -s -P workloads/workloada \
  -p "redis.host=${ip}" -p "redis.port=${port}" \
  -p "recordcount=${recordcount}" -p "operationcount=${recordcount}" \
  -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" \
  -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" \
  -threads ${threads}
sleep ${load_sleep_time}

# Uniform-Read
./bin/ycsb run redis -s -P workloads/workloadc \
  -p "redis.host=${ip}" -p "redis.port=${port}" \
  -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" \
  -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" \
  -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" \
  -p "requestdistribution=uniform" -threads ${threads}
sleep ${run_sleep_time}

# Zipfian-Read
./bin/ycsb run redis -s -P workloads/workloadc \
  -p "redis.host=${ip}" -p "redis.port=${port}" \
  -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" \
  -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" \
  -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" \
  -p "requestdistribution=zipfian" -threads ${threads}
sleep ${run_sleep_time}

# Uniform-50%Read-50%Update
./bin/ycsb run redis -s -P workloads/workloada \
  -p "redis.host=${ip}" -p "redis.port=${port}" \
  -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" \
  -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" \
  -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" \
  -p "requestdistribution=uniform" -threads ${threads}

Parameters

ParameterDescription
ipIP address of the Tair instance
portService port of the Tair instance
timeoutCommand timeout. Unit: ms
command_groupData type to test. Set to string
recordcountNumber of records loaded during the data loading phase
run_operationcountNumber of operations during the run phase. For the memory-larger-than-data scenario, set this to the value of recordcount. For the data-larger-than-memory scenario, set this to recordcount ÷ 32.
fieldcountNumber of fields per record. Set to 1
fieldlengthLength of each field in bytes. Set to 100
threadsNumber of YCSB client threads. Varies by instance type.

Test metrics

MetricDescription
QPSNumber of read and write operations processed per second
Average latencyAverage latency of read or write operations. Unit: µs
99th percentile latencyHighest latency for the fastest 99% of operations. Unit: µs. For example, a value of 500 µs means 99% of operations complete within 500 µs.

Test results

Memory size larger than data volume

Memory-to-data ratio is approximately 7:1. Most requests are served from memory.

Instance typeYCSB configurationWorkloadQPSAverage latency (µs)99th percentile latency (µs)
tair.localssd.c1m4.2xlarge

recordcount=40,000,000

run_operationcount=40,000,000

threads=64

Load59,8301,0662,761
Uniform-Read158,221389891
Zipfian-Read164,233379873
Uniform-50%Read-50%Update78,099Read: 651 / Update: 974Read: 2,012 / Update: 2,731
tair.localssd.c1m4.4xlarge

recordcount=80,000,000

run_operationcount=80,000,000

threads=128

Load91,9911,3883,077
Uniform-Read302,940414921
Zipfian-Read305,639410899
Uniform-50%Read-50%Update124,929Read: 798 / Update: 1,234Read: 2,231 / Update: 3,013
tair.localssd.c1m4.8xlarge

recordcount=160,000,000

run_operationcount=160,000,000

threads=256

Load132,8651,9243,323
Uniform-Read489,2875131,313
Zipfian-Read501,8474991,272
Uniform-50%Read-50%Update187,390Read: 1,069 / Update: 1,644Read: 2,749 / Update: 3,613

Data volume larger than memory size

Memory-to-data ratio is approximately 1:4. Most requests require disk I/O, so latency is higher than in the memory-dominant scenario above.

Instance typeYCSB configurationWorkloadQPSAverage latency (µs)99th percentile latency (µs)
tair.localssd.c1m4.2xlarge

recordcount=1,280,000,000

run_operationcount=1,280,000,000

threads=64

Load50,3961,2584,463
Uniform-Read74,6118421,745
Zipfian-Read106,3665881,406
Uniform-50%Read-50%Update47,833Read: 1,232 / Write: 1,402Read: 4,049 / Write: 4,583
tair.localssd.c1m4.4xlarge

recordcount=2,560,000,000

run_operationcount=2,560,000,000

threads=128

Load81,0971,5734,119
Uniform-Read118,1411,0713,085
Zipfian-Read194,7046341,595
Uniform-50%Read-50%Update75,625Read: 1,562 / Update: 1,795Read: 4,999 / Update: 5,419
tair.localssd.c1m4.8xlarge

recordcount=5,120,000,000

run_operationcount=5,120,000,000

threads=256

Load115,6602,2105,235
Uniform-Read202,3651,2523,985
Zipfian-Read309,0198042,551
Uniform-50%Read-50%Update122,318Read: 1,861 / Update: 2,307Read: 5,603 / Update: 6,415

References

ESSD/SSD-based instances