Dokumen ini mencakup lingkungan pengujian, tooling, metodologi, dan hasil benchmark performa instans Tair (Edisi Perusahaan) berbasis SSD.
Lingkungan pengujian
Item | Description |
Region and zone | Hangzhou Zone J |
Instance architecture | Standard master-replica architecture. Untuk detailnya, lihat Standard architecture. |
Stress testing host | Instans Elastic Compute Service (ECS) tipe |
Instance types tested |
|
Benchmark ini mencakup dua skenario yang mewakili ujung berlawanan dari spektrum pemanfaatan memori:
Memory larger than data volume: Sebagian besar data muat dalam memori dengan rasio memori terhadap data sekitar 7:1, merepresentasikan pola akses yang didominasi memori.
Data volume larger than memory: Hanya sebagian data yang di-cache di memori, sehingga sebagian besar permintaan baca/tulis memerlukan I/O disk dengan rasio memori terhadap data sekitar 1:4, merepresentasikan pola akses yang didominasi SSD.
Test tool
Benchmark ini menggunakan YCSB, sebuah framework benchmarking database berbasis Java open-source.
Kode sumber YCSB telah dimodifikasi untuk mendukung parameter recordcount bertipe LONG serta menguji perintah string Redis. Untuk kode sumber yang telah dimodifikasi, lihat YCSB source code.
Test script
Skrip berikut menjalankan pengujian performa untuk skenario data volume larger than memory:
#!/bin/bash
ip=192.168.0.23
port=3100
timeout=30000
command_group=string
recordcount=640000000
run_operationcount=640000000
fieldcount=1
fieldlength=100
threads=64
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
Parameter | Description |
| Alamat IP instans Tair |
| Port layanan instans Tair |
| Waktu tunggu perintah. Satuan: ms |
| Tipe data yang diuji. Diatur ke |
| Jumlah catatan yang dimuat selama fase pemuatan data |
| Jumlah operasi selama fase eksekusi. Pada kedua skenario, atur nilai ini sama dengan |
| Jumlah bidang per catatan. Diatur ke |
| Panjang setiap bidang dalam byte. Diatur ke |
| Jumlah thread klien YCSB. Berbeda-beda tergantung tipe instans. |
Test metrics
Metric | Description |
QPS | Jumlah operasi baca dan tulis yang diproses per detik |
Average latency | Latensi rata-rata operasi baca atau tulis. Satuan: µs |
99th percentile latency | Latensi tertinggi untuk 99% operasi tercepat. Satuan: µs. Misalnya, nilai 500 µs berarti 99% operasi selesai dalam waktu 500 µs. |
Test results
Memory size larger than data volume
Dengan rasio memori terhadap data sekitar 7:1, sebagian besar permintaan dilayani dari memori.
Instance type | YCSB configuration | Workload | QPS | Average latency (µs) | 99th percentile latency (µs) |
| recordcount=20.000.000 run_operationcount=20.000.000 threads=64 fieldlength=100 | Load | 42.275 | 1.511 | 4.987 |
Uniform-Read | 104.303 | 611 | 2.163 | ||
Zipfian-Read | 105.217 | 605 | 2.259 | ||
Uniform-50%Read-50%Update | 52.267 | Read: 1.114 | Read: 4.191 | ||
Update: 1.329 | Update: 4.827 | ||||
| recordcount=40.000.000 run_operationcount=40.000.000 threads=128 fieldlength=100 | Load | 64.104 | 1.993 | 5.951 |
Uniform-Read | 174.533 | 730 | 2.049 | ||
Zipfian-Read | 177.612 | 718 | 2.033 | ||
Uniform-50%Read-50%Update | 75.762 | Read: 1.509 | Read: 4.667 | ||
Update: 1.864 | Update: 5.479 | ||||
| recordcount=60.000.000 run_operationcount=60.000.000 threads=192 fieldlength=100 | Load | 116.107 | 1.647 | 9.983 |
Uniform-Read | 225.613 | 847 | 3.687 | ||
Zipfian-Read | 234.014 | 816 | 3.279 | ||
Uniform-50%Read-50%Update | 138.884 | Read: 1.321 | Read: 8.131 | ||
Update: 1.435 | Update: 8.479 | ||||
| recordcount=120.000.000 run_operationcount=120.000.000 threads=384 fieldlength=100 | Load | 170.447 | 2.246 | 11.935 |
Uniform-Read | 323.136 | 1.184 | 4.005 | ||
Zipfian-Read | 330.023 | 1.159 | 3.951 | ||
Uniform-50%Read-50%Update | 207.350 | Read: 1.759 | Read: 9.031 | ||
Update: 1.934 | Update: 9.439 |
Data volume larger than memory size
Dengan rasio memori terhadap data sekitar 1:4, sebagian besar permintaan memerlukan I/O disk, sehingga latensi lebih tinggi dibandingkan skenario dominasi memori di atas.
Instance type | YCSB configuration | Workload | QPS | Average latency (µs) | 99th percentile latency (µs) |
| recordcount=640.000.000 run_operationcount=640.000.000 threads=64 fieldlength=100 | Load | 33.198 | 1.925 | 7.699 |
Uniform-Read | 48.243 | 1.324 | 3.659 | ||
Zipfian-Read | 66.635 | 958 | 3.003 | ||
Uniform-50%Read-50%Update | 28.779 | Read: 2.169 | Read: 7.531 | ||
Update: 2.272 | Update: 7.851 | ||||
| recordcount=1.280.000.000 run_operationcount=1.280.000.000 threads=128 fieldlength=100 | Load | 48.605 | 2.631 | 8.463 |
Uniform-Read | 83.687 | 1.527 | 3.889 | ||
Zipfian-Read | 113.742 | 1.123 | 3.351 | ||
Uniform-50%Read-50%Update | 46.606 | Read: 2.652 | Read: 8.815 | ||
Update: 2.835 | Update: 9.367 | ||||
| recordcount=1.920.000.000 run_operationcount=1.920.000.000 threads=192 fieldlength=100 | Load | 89.421 | 2.144 | 15.351 |
Uniform-Read | 115.967 | 1.653 | 9.311 | ||
Zipfian-Read | 155.686 | 1.231 | 6.359 | ||
Uniform-50%Read-50%Update | 72.890 | Read: 2.585 | Read: 16.479 | ||
Update: 2.676 | Update: 16.719 | ||||
| recordcount=3.840.000.000 run_operationcount=3.840.000.000 threads=384 fieldlength=100 | Load | 137.521 | 2.789 | 16.591 |
Uniform-Read | 185.273 | 2.070 | 8.575 | ||
Zipfian-Read | 238.099 | 1.610 | 6.203 | ||
Uniform-50%Read-50%Update | 128.080 | Read: 2.930 | Read: 15.535 | ||
Update: 3.060 | Update: 15.807 |
