hamax97 / flut

Distributed performance testing tool that uses Ruby
MIT License
0 stars 0 forks source link

Implement the TPS centered executor #8

Open hamax97 opened 1 year ago

hamax97 commented 1 year ago

Tasks:

hamax97 commented 1 year ago

With a delay of less than 1 second it goes beyond 3000 TPS.

With a delay of 1 second or more on each iteration the system is not able to reach the desired TPS, even if it's only 10. When trying with 2000 TPS it reaches only 1000 TPS more or less. Next step is to find a way to use more CPU resources so that the desired TPS is reachable.

How about executing the testplan more than once per second based on some heuristic? How about async-container?

hamax97 commented 1 year ago

Looking at how JMeter has this implemented in the Throughput Shaping Timer Feedback Function I found that if the current RPS, current_rps, is less than the desired RPS desired_rps, it will spawn the following number of threads:

needed_threads  = threads * rate_of_missing_threads
rate_of_missing_threads = (2 - current_rps / desired_rps)

Code for this: https://github.com/undera/jmeter-plugins/blob/master/plugins/tst/src/main/java/kg/apc/jmeter/timers/functions/TSTFeedback.java#L76C38-L76C60

The source code in k6 for the constant_arrival_rate executor is barely readable by someone not familiar with the project (very ugly.) It's very hard to understand. Here it is: https://github.com/grafana/k6/blob/master/lib/executor/constant_arrival_rate.go

hamax97 commented 1 year ago

I decided to go with the following approach:

hamax97 commented 1 year ago

How about looking at Tsung's model for adaptive users rate? http://tsung.erlang-projects.org/user_manual/conf-load.html