Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Speed up list by using compacted strings #297

Merged
merged 3 commits into from
Jun 12, 2024

Conversation

JackyWoo
Copy link
Contributor

@JackyWoo JackyWoo commented Jun 11, 2024

Which issues of this PR fixes:

This PR try to fix #285

Change log:

Beanchmark:

only list request 
150 threads

1. List result contains 100 items, each item size is a random value range from 10 - 100 bytes.

List RPS increases from 458433 to 619388 and the TP99 looks better.

before

read requests 14826483, write requests 0, Read RPS: 458433, Read MiB/s: 2441.74
Read sampler:
0%		0.18 msec.	
10%		0.212 msec.	
20%		0.22 msec.	
30%		0.228 msec.	
40%		0.235 msec.	
50%		0.244 msec.	
60%		0.254 msec.	
70%		0.269 msec.	
80%		0.296 msec.	
90%		0.596 msec.	
95%		1.016 msec.	
99%		1.515 msec.	
99.9%		2.262 msec.	
99.99%		2.973 msec.	
{"timestamp":1718169452404,"read_results":{"total_requests":14826483,"requests_per_second":458432.9663788887,"bytes_per_second":2560348117.2260935,"percentiles":[{"0.00":0.18},{"10.00":0.212},{"20.00":0.22},{"30.00":0.228},{"40.00":0.235},{"50.00":0.244},{"60.00":0.254},{"70.00":0.269},{"80.00":0.296},{"90.00":0.596},{"95.00":1.016},{"99.00":1.515},{"99.90":2.262},{"99.99":2.973}]}}

after

read requests 14172371, write requests 0, Read RPS: 619388, Read MiB/s: 3156.67
Read sampler:
0%		0.177 msec.	
10%		0.207 msec.	
20%		0.215 msec.	
30%		0.221 msec.	
40%		0.226 msec.	
50%		0.233 msec.	
60%		0.239 msec.	
70%		0.247 msec.	
80%		0.257 msec.	
90%		0.274 msec.	
95%		0.293 msec.	
99%		0.381 msec.	
99.9%		1.268 msec.	
99.99%		5.157 msec.	
{"timestamp":1718165728991,"read_results":{"total_requests":14172371,"requests_per_second":619387.5307082109,"bytes_per_second":3310006964.104679,"percentiles":[{"0.00":0.177},{"10.00":0.207},{"20.00":0.215},{"30.00":0.221},{"40.00":0.226},{"50.00":0.233},{"60.00":0.239},{"70.00":0.247},{"80.00":0.257},{"90.00":0.274},{"95.00":0.293},{"99.00":0.381},{"99.90":1.268},{"99.99":5.157}]}}

2. List result contains 10 items, each item size is a random value range from 10 - 100 bytes.

RPS decreases from 750492 to 728299

before

read requests 14011512, write requests 0, Read RPS: 750492, Read MiB/s: 449.475
Read sampler:
0%		0.153 msec.	
10%		0.175 msec.	
20%		0.181 msec.	
30%		0.186 msec.	
40%		0.191 msec.	
50%		0.195 msec.	
60%		0.199 msec.	
70%		0.205 msec.	
80%		0.212 msec.	
90%		0.224 msec.	
95%		0.236 msec.	
99%		0.283 msec.	
99.9%		1.005 msec.	
99.99%		1.711 msec.	
{"timestamp":1718169245436,"read_results":{"total_requests":14011512,"requests_per_second":750491.8734469928,"bytes_per_second":471308896.52471157,"percentiles":[{"0.00":0.153},{"10.00":0.175},{"20.00":0.181},{"30.00":0.186},{"40.00":0.191},{"50.00":0.195},{"60.00":0.199},{"70.00":0.205},{"80.00":0.212},{"90.00":0.224},{"95.00":0.236},{"99.00":0.283},{"99.90":1.005},{"99.99":1.711}]}}

after

read requests 15859158, write requests 0, Read RPS: 728299, Read MiB/s: 527.171
Read sampler:
0%		0.151 msec.	
10%		0.177 msec.	
20%		0.183 msec.	
30%		0.188 msec.	
40%		0.193 msec.	
50%		0.198 msec.	
60%		0.203 msec.	
70%		0.209 msec.	
80%		0.218 msec.	
90%		0.232 msec.	
95%		0.248 msec.	
99%		0.383 msec.	
99.9%		1.099 msec.	
99.99%		2.594 msec.	
{"timestamp":1718169076273,"read_results":{"total_requests":15859158,"requests_per_second":728299.1706786874,"bytes_per_second":552779070.5451238,"percentiles":[{"0.00":0.151},{"10.00":0.177},{"20.00":0.183},{"30.00":0.188},{"40.00":0.193},{"50.00":0.198},{"60.00":0.203},{"70.00":0.209},{"80.00":0.218},{"90.00":0.232},{"95.00":0.248},{"99.00":0.383},{"99.90":1.099},{"99.99":2.594}]}}

In summary when list response contains more items the optimization looks better.

@JackyWoo JackyWoo added the performance Performance promotion label Jun 11, 2024
@JackyWoo JackyWoo added this to the Release v2.1.0 milestone Jun 11, 2024
@JackyWoo JackyWoo force-pushed the speed_up_list_request branch from f777839 to 2777d2a Compare June 11, 2024 10:11
@JackyWoo
Copy link
Contributor Author

JackyWoo commented Jun 12, 2024

The following is the flame graph when benchmarking with 100 items. We can see after optimization list request processing takes less CPU cycles.

  1. before optimization

image

  1. after optimization

image

@lzydmxy
Copy link
Contributor

lzydmxy commented Jun 12, 2024

LGTM

@JackyWoo JackyWoo merged commit ee43104 into JDRaftKeeper:master Jun 12, 2024
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
performance Performance promotion
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Improve performance for list request
2 participants