Skip to content

Conversation

@steve-chavez
Copy link
Member

@steve-chavez steve-chavez commented Apr 20, 2025

Closes #4001.

This proves the fix on #3889, while running on v12.2.9 the loadtest doesn't even finish all the generated targets (50000) and has poor throughput, while HEAD will finish and show better throughput.

This has to be proved locally now since we already merged #3889 and released it, but it's very clear:

[nix-shell:~/Projects/postgrest]$ postgrest-loadtest-against -k jwt v12.2.9

Running loadtest on "v12.2.9"...

Preparing worktree (detached HEAD b454f29b)
Created 50000 targets in /home/stevechavez/Projects/postgrest/test/load/gen_targets.http (0.80s)
postgrest-with-postgresql-17: You can connect with: psql 'postgres:///postgres?host=/run/user/1000/postgrest/postgrest-with-postgresql-17-l0c/socket' -U postgres
postgrest-with-postgresql-17: You can tail the logs with: tail -f /run/user/1000/postgrest/postgrest-with-postgresql-17-l0c/db.log
Building postgrest (nix)... done.
Starting postgrest... done.
Requests      [total, rate, throughput]         12078, 201.27, 201.25
Duration      [total, attack, wait]             1m0s, 1m0s, 7.429ms
Latencies     [min, mean, 50, 90, 95, 99, max]  305.751µs, 4.966ms, 5.028ms, 8.792ms, 9.929ms, 11.863ms, 36.904ms
Bytes In      [total, mean]                     0, 0.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      200:12078  
Error Set:

Done running on "v12.2.9".


Running loadtest on HEAD...

Created 50000 targets in /home/stevechavez/Projects/postgrest/test/load/gen_targets.http (0.90s)
postgrest-with-postgresql-17: You can connect with: psql 'postgres:///postgres?host=/run/user/1000/postgrest/postgrest-with-postgresql-17-MkP/socket' -U postgres
postgrest-with-postgresql-17: You can tail the logs with: tail -f /run/user/1000/postgrest/postgrest-with-postgresql-17-MkP/db.log
Building postgrest (nix)... done.
Starting postgrest... done.
Requests      [total, rate, throughput]         50001, 3427.18, 3427.11
Duration      [total, attack, wait]             14.59s, 14.59s, 1.115µs
Latencies     [min, mean, 50, 90, 95, 99, max]  1.115µs, 290.499µs, 271.864µs, 364.489µs, 413.655µs, 653.284µs, 52.807ms
Bytes In      [total, mean]                     0, 0.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      0:1  200:50000  
Error Set:
no targets to attack

Done running on HEAD.

Only 12078 requests done in v12.2.9 and 50001 (all of them) on HEAD.

Comment on lines 48 to 60
# We want to ensure 401 Unauthorized responses don't happen during
# JWT validation, this can happen when the jwt `exp` is too short.
# At the same time, we want to ensure the `exp` is not too big,
# so expires will occur and postgREST will have to clean cached expired JWTs.
def estimate_adequate_jwt_exp_increase(iteration: int) -> int:
# estimated time takes to build and run postgrest itself
build_run_postgrest_time = 2
# estimated time it takes to generate the targets file
file_generation_time = TOTAL_TARGETS//(10**-5)
# estimated exp time so some JWTs will expire
dynamic_exp_inc = iteration//1000

return build_run_postgrest_time + file_generation_time + dynamic_exp_inc
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the main addition in comparison to #4023

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we account for the clock skew toleration we have built in here?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The clock skew is only honored at the time of insertion into cache. We don't take it into account when we lookup the cache.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, I realized that, too and asked the same question in the cache PR. I'm not sure whether that's the correct thing to do, though.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@taimoorzaeem That looks like the right behavior.

So the clock skew is only considered at the JWT validation phase but not during cache invalidation phase.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure whether that's the correct thing to do, though.

Yeah on second thought, doesn't make sense to slow down requests from "still valid" JWT caches.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we should make the skew configurable, so we can output it with dump-config then we could also use it as parameter of this loadtest.

That's something that can be done in another PR though.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if we should make the skew configurable, so we can output it with dump-config then we could also use it as parameter of this loadtest.

Opened #4035

@steve-chavez steve-chavez marked this pull request as draft April 20, 2025 19:43
@steve-chavez
Copy link
Member Author

steve-chavez commented Apr 20, 2025

Shoot, forgot the migrations and copy/pasted the wrong results. Will fix.

Edit: Done.

@steve-chavez steve-chavez marked this pull request as ready for review April 20, 2025 20:01
@steve-chavez
Copy link
Member Author

steve-chavez commented Apr 20, 2025

Results showing on https://github.com/PostgREST/postgrest/actions/runs/14562788036?pr=4034#summary-40848158792, head/main show better throughput than v12.2.10 but maybe that's just variance.

Let's see what it shows when merged.

@steve-chavez steve-chavez merged commit 58237be into PostgREST:main Apr 20, 2025
29 checks passed
@steve-chavez
Copy link
Member Author

Results are maintained: https://github.com/PostgREST/postgrest/actions/runs/14562931741#summary-40848497694

I wonder what has improved on main that makes the jwt results better.

@wolfgangwalther
Copy link
Member

wolfgangwalther commented Apr 22, 2025

I wonder what has improved on main that makes the jwt results better.

It could be the change from jose to jose-jwt on the haskell side?

@steve-chavez
Copy link
Member Author

It could be the change from jose to jose-jwt on the haskell side?

That looks like it! Also the increase in perf on latest CI runs looks to be around ~17%. That might make the JWT cache less impactful I presume, IIRC the gains were ~20%.

@steve-chavez
Copy link
Member Author

That might make the JWT cache less impactful I presume, IIRC the gains were ~20%.

The JWT Cache gains are still noticeable, but less than before. On v12.2.10 gains are ~28%, on devel they're ~19%.

Leaving numbers here just in case. With https://github.com/PostgREST/postgrest-benchmark, I ran:

# stable with cache enabled and disabled, on each one doing a loadtest without JWT to get max reqs and another one with same JWT
postgrest-bench-deploy && \
postgrest-bench-k6 10 k6/GETSingle.js && postgrest-bench-k6 10 k6/GETSingleJWT.js && \

PGRSTBENCH_JWT_CACHE_ENABLED="false" postgrest-bench-deploy && \
postgrest-bench-k6 10 k6/GETSingle.js && postgrest-bench-k6 10 k6/GETSingleJWT.js && \

# devel with cache enabled and disabled, on each one doing a loadtest without JWT to get max reqs and another one with same JWT
PGRSTBENCH_JWT_CACHE_ENABLED="true" PGRSTBENCH_USE_DEVEL="true" postgrest-bench-deploy && \
postgrest-bench-k6 10 k6/GETSingle.js && postgrest-bench-k6 10 k6/GETSingleJWT.js && \

PGRSTBENCH_JWT_CACHE_ENABLED="false" PGRSTBENCH_USE_DEVEL="true" postgrest-bench-deploy && \
postgrest-bench-k6 10 k6/GETSingle.js && postgrest-bench-k6 10 k6/GETSingleJWT.js
Results
building all machine configurations...
warning: you did not specify '--add-root'; the result might be removed by the garbage collector
client............> copying closure...
pg................> copying closure...
pgrst.............> copying closure...
client............> copying 0 paths...
pg................> copying 0 paths...
pgrst.............> copying 0 paths...
postgrest-bench> closures copied successfully
pg................> updating GRUB 2 menu...
client............> updating GRUB 2 menu...
pgrst.............> updating GRUB 2 menu...
client............> activating the configuration...
pg................> activating the configuration...
pg................> setting up /etc...
client............> setting up /etc...
pgrst.............> activating the configuration...
pg................> reloading user units for root...
client............> reloading user units for root...
pgrst.............> setting up /etc...
client............> restarting sysinit-reactivation.target
pg................> restarting sysinit-reactivation.target
pgrst.............> reloading user units for root...
pg................> activation finished successfully
client............> activation finished successfully
pgrst.............> restarting sysinit-reactivation.target
pgrst.............> activation finished successfully
postgrest-bench> deployment finished successfully

Running k6 with 10 vus
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.

 data_received..................: 21 MB  715 kB/s
 data_sent......................: 7.0 MB 234 kB/s
 http_req_blocked...............: avg=3.03µs  min=990ns   med=2.27µs  max=1.25ms  p(90)=2.79µs  p(95)=3.35µs 
 http_req_connecting............: avg=383ns   min=0s      med=0s      max=1.09ms  p(90)=0s      p(95)=0s     

✓ http_req_duration..............: avg=4.31ms min=1.58ms med=4.14ms max=25.43ms p(90)=5.87ms p(95)=6.5ms
{ expected_response:true }...: avg=4.31ms min=1.58ms med=4.14ms max=25.43ms p(90)=5.87ms p(95)=6.5ms
✓ http_req_failed................: 0.00% ✓ 0 ✗ 68317
http_req_receiving.............: avg=48.23µs min=18.59µs med=46.52µs max=2.37ms p(90)=58.47µs p(95)=70.78µs
http_req_sending...............: avg=12.49µs min=6.15µs med=10.63µs max=793.1µs p(90)=14.43µs p(95)=26.97µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=4.24ms min=1.51ms med=4.08ms max=25.36ms p(90)=5.81ms p(95)=6.44ms
http_reqs......................: 68317 2276.948045/s
iteration_duration.............: avg=4.37ms min=1.65ms med=4.21ms max=25.54ms p(90)=5.94ms p(95)=6.57ms
iterations.....................: 68317 2276.948045/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10

Running k6 with 10 vus
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.

 data_received..................: 21 MB 695 kB/s
 data_sent......................: 31 MB 1.0 MB/s
 http_req_blocked...............: avg=3.16µs  min=990ns   med=2.35µs  max=1.15ms   p(90)=2.88µs  p(95)=3.51µs 
 http_req_connecting............: avg=380ns   min=0s      med=0s      max=689.43µs p(90)=0s      p(95)=0s     

✓ http_req_duration..............: avg=4.41ms min=1.64ms med=4.25ms max=28.46ms p(90)=6.02ms p(95)=6.65ms
{ expected_response:true }...: avg=4.41ms min=1.64ms med=4.25ms max=28.46ms p(90)=6.02ms p(95)=6.65ms
✓ http_req_failed................: 0.00% ✓ 0 ✗ 66451
http_req_receiving.............: avg=49.49µs min=19.67µs med=47.39µs max=3.44ms p(90)=59.31µs p(95)=71.83µs
http_req_sending...............: avg=14.02µs min=7.22µs med=11.75µs max=869.19µs p(90)=24.55µs p(95)=28.87µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=4.35ms min=1.5ms med=4.18ms max=28.41ms p(90)=5.96ms p(95)=6.59ms
http_reqs......................: 66451 2214.72887/s
iteration_duration.............: avg=4.5ms min=1.72ms med=4.33ms max=28.53ms p(90)=6.11ms p(95)=6.73ms
iterations.....................: 66451 2214.72887/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10

building all machine configurations...
warning: you did not specify '--add-root'; the result might be removed by the garbage collector
client............> copying closure...
pg................> copying closure...
pgrst.............> copying closure...
client............> copying 0 paths...
pg................> copying 0 paths...
pgrst.............> copying 0 paths...
postgrest-bench> closures copied successfully
client............> updating GRUB 2 menu...
pg................> updating GRUB 2 menu...
pgrst.............> updating GRUB 2 menu...
client............> activating the configuration...
pg................> activating the configuration...
pg................> setting up /etc...
client............> setting up /etc...
pg................> reloading user units for root...
client............> reloading user units for root...
pgrst.............> stopping the following units: postgrest.service
pgrst.............> activating the configuration...
client............> restarting sysinit-reactivation.target
pg................> restarting sysinit-reactivation.target
pgrst.............> setting up /etc...
pg................> activation finished successfully
client............> activation finished successfully
pgrst.............> reloading user units for root...
pgrst.............> restarting sysinit-reactivation.target
pgrst.............> starting the following units: postgrest.service
pgrst.............> activation finished successfully
postgrest-bench> deployment finished successfully

Running k6 with 10 vus
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.

 data_received..................: 21 MB  713 kB/s
 data_sent......................: 7.0 MB 233 kB/s
 http_req_blocked...............: avg=3.04µs  min=1.2µs   med=2.27µs  max=1.18ms   p(90)=2.78µs  p(95)=3.35µs 
 http_req_connecting............: avg=352ns   min=0s      med=0s      max=569.76µs p(90)=0s      p(95)=0s     

✓ http_req_duration..............: avg=4.32ms min=1.55ms med=4.14ms max=25.48ms p(90)=5.88ms p(95)=6.49ms
{ expected_response:true }...: avg=4.32ms min=1.55ms med=4.14ms max=25.48ms p(90)=5.88ms p(95)=6.49ms
✓ http_req_failed................: 0.00% ✓ 0 ✗ 68108
http_req_receiving.............: avg=48.39µs min=17.46µs med=46.85µs max=1.78ms p(90)=58.36µs p(95)=70.99µs
http_req_sending...............: avg=12.49µs min=5.91µs med=10.65µs max=877.6µs p(90)=14.58µs p(95)=26.99µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=4.26ms min=1.51ms med=4.08ms max=25.41ms p(90)=5.81ms p(95)=6.43ms
http_reqs......................: 68108 2270.027498/s
iteration_duration.............: avg=4.39ms min=1.64ms med=4.21ms max=25.54ms p(90)=5.95ms p(95)=6.56ms
iterations.....................: 68108 2270.027498/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10

Running k6 with 10 vus
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.

 data_received..................: 17 MB 558 kB/s
 data_sent......................: 25 MB 829 kB/s
 http_req_blocked...............: avg=3.26µs  min=1.03µs  med=2.37µs  max=1.99ms  p(90)=2.88µs  p(95)=3.43µs 
 http_req_connecting............: avg=448ns   min=0s      med=0s      max=1.19ms  p(90)=0s      p(95)=0s     

✓ http_req_duration..............: avg=5.53ms min=1.73ms med=5.3ms max=21.57ms p(90)=7.65ms p(95)=8.49ms
{ expected_response:true }...: avg=5.53ms min=1.73ms med=5.3ms max=21.57ms p(90)=7.65ms p(95)=8.49ms
✓ http_req_failed................: 0.00% ✓ 0 ✗ 53309
http_req_receiving.............: avg=49.73µs min=20.12µs med=48.48µs max=2.09ms p(90)=59.46µs p(95)=73µs
http_req_sending...............: avg=14.09µs min=6.86µs med=11.88µs max=1.02ms p(90)=23.21µs p(95)=28.85µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=5.46ms min=1.65ms med=5.24ms max=21.51ms p(90)=7.59ms p(95)=8.42ms
http_reqs......................: 53309 1776.76925/s
iteration_duration.............: avg=5.61ms min=1.82ms med=5.39ms max=21.63ms p(90)=7.74ms p(95)=8.57ms
iterations.....................: 53309 1776.76925/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10

building all machine configurations...
warning: you did not specify '--add-root'; the result might be removed by the garbage collector
client............> copying closure...
pg................> copying closure...
pgrst.............> copying closure...
client............> copying 0 paths...
pg................> copying 0 paths...
pgrst.............> copying 0 paths...
postgrest-bench> closures copied successfully
pg................> updating GRUB 2 menu...
client............> updating GRUB 2 menu...
pgrst.............> updating GRUB 2 menu...
client............> activating the configuration...
pg................> activating the configuration...
pg................> setting up /etc...
client............> setting up /etc...
pgrst.............> stopping the following units: postgrest.service
pgrst.............> activating the configuration...
pgrst.............> setting up /etc...
pg................> reloading user units for root...
client............> reloading user units for root...
client............> restarting sysinit-reactivation.target
pg................> restarting sysinit-reactivation.target
pgrst.............> reloading user units for root...
client............> activation finished successfully
pg................> activation finished successfully
pgrst.............> restarting sysinit-reactivation.target
pgrst.............> reloading the following units: dbus.service
pgrst.............> starting the following units: postgrest.service
pgrst.............> activation finished successfully
postgrest-bench> deployment finished successfully

Running k6 with 10 vus
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.

 data_received..................: 20 MB  677 kB/s
 data_sent......................: 7.1 MB 236 kB/s
 http_req_blocked...............: avg=3.05µs  min=1.07µs  med=2.29µs  max=1.1ms    p(90)=2.81µs  p(95)=3.33µs 
 http_req_connecting............: avg=350ns   min=0s      med=0s      max=568.69µs p(90)=0s      p(95)=0s     

✓ http_req_duration..............: avg=4.27ms min=1.52ms med=4.1ms max=39.77ms p(90)=5.81ms p(95)=6.43ms
{ expected_response:true }...: avg=4.27ms min=1.52ms med=4.1ms max=39.77ms p(90)=5.81ms p(95)=6.43ms
✓ http_req_failed................: 0.00% ✓ 0 ✗ 68856
http_req_receiving.............: avg=46.61µs min=18.23µs med=45.37µs max=5.01ms p(90)=55.96µs p(95)=68.25µs
http_req_sending...............: avg=12.74µs min=6.09µs med=10.81µs max=1.79ms p(90)=15.02µs p(95)=27.21µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=4.21ms min=1.46ms med=4.04ms max=39.63ms p(90)=5.75ms p(95)=6.37ms
http_reqs......................: 68856 2294.908786/s
iteration_duration.............: avg=4.34ms min=1.59ms med=4.17ms max=40.03ms p(90)=5.88ms p(95)=6.5ms
iterations.....................: 68856 2294.908786/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10

Running k6 with 10 vus
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.

 data_received..................: 19 MB 639 kB/s
 data_sent......................: 30 MB 1.0 MB/s
 http_req_blocked...............: avg=3.18µs  min=1.07µs  med=2.38µs  max=1.19ms   p(90)=2.94µs  p(95)=3.47µs 
 http_req_connecting............: avg=382ns   min=0s      med=0s      max=645.25µs p(90)=0s      p(95)=0s     

✓ http_req_duration..............: avg=4.51ms min=1.58ms med=4.33ms max=17.59ms p(90)=6.21ms p(95)=6.88ms
{ expected_response:true }...: avg=4.51ms min=1.58ms med=4.33ms max=17.59ms p(90)=6.21ms p(95)=6.88ms
✓ http_req_failed................: 0.00% ✓ 0 ✗ 65033
http_req_receiving.............: avg=47.49µs min=19.75µs med=46.08µs max=2.78ms p(90)=56.64µs p(95)=68.65µs
http_req_sending...............: avg=14.21µs min=7.47µs med=11.97µs max=1.73ms p(90)=24.79µs p(95)=29.03µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=4.45ms min=1.48ms med=4.27ms max=17.53ms p(90)=6.15ms p(95)=6.82ms
http_reqs......................: 65033 2167.487119/s
iteration_duration.............: avg=4.6ms min=1.65ms med=4.41ms max=17.65ms p(90)=6.3ms p(95)=6.97ms
iterations.....................: 65033 2167.487119/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10

building all machine configurations...
warning: you did not specify '--add-root'; the result might be removed by the garbage collector
client............> copying closure...
pg................> copying closure...
pgrst.............> copying closure...
client............> copying 0 paths...
pg................> copying 0 paths...
pgrst.............> copying 0 paths...
postgrest-bench> closures copied successfully
client............> updating GRUB 2 menu...
pg................> updating GRUB 2 menu...
pgrst.............> updating GRUB 2 menu...
client............> activating the configuration...
pg................> activating the configuration...
pg................> setting up /etc...
client............> setting up /etc...
pgrst.............> stopping the following units: postgrest.service
pgrst.............> activating the configuration...
pg................> reloading user units for root...
client............> reloading user units for root...
pgrst.............> setting up /etc...
pg................> restarting sysinit-reactivation.target
client............> restarting sysinit-reactivation.target
client............> activation finished successfully
pg................> activation finished successfully
pgrst.............> reloading user units for root...
pgrst.............> restarting sysinit-reactivation.target
pgrst.............> starting the following units: postgrest.service
pgrst.............> activation finished successfully
postgrest-bench> deployment finished successfully

Running k6 with 10 vus
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.

 data_received..................: 20 MB  670 kB/s
 data_sent......................: 7.0 MB 233 kB/s
 http_req_blocked...............: avg=3.11µs  min=1.03µs  med=2.29µs  max=1.27ms   p(90)=2.82µs  p(95)=3.37µs 
 http_req_connecting............: avg=362ns   min=0s      med=0s      max=598.77µs p(90)=0s      p(95)=0s     

✓ http_req_duration..............: avg=4.32ms min=1.52ms med=4.14ms max=26.37ms p(90)=5.9ms p(95)=6.57ms
{ expected_response:true }...: avg=4.32ms min=1.52ms med=4.14ms max=26.37ms p(90)=5.9ms p(95)=6.57ms
✓ http_req_failed................: 0.00% ✓ 0 ✗ 68096
http_req_receiving.............: avg=46.5µs min=18.49µs med=45.02µs max=2.88ms p(90)=56.15µs p(95)=68.54µs
http_req_sending...............: avg=12.54µs min=6.04µs med=10.74µs max=811.77µs p(90)=14.54µs p(95)=27µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=4.26ms min=1.43ms med=4.08ms max=26.3ms p(90)=5.84ms p(95)=6.51ms
http_reqs......................: 68096 2269.586221/s
iteration_duration.............: avg=4.39ms min=1.58ms med=4.21ms max=26.5ms p(90)=5.97ms p(95)=6.65ms
iterations.....................: 68096 2269.586221/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10

Running k6 with 10 vus
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.

 data_received..................: 17 MB 562 kB/s
 data_sent......................: 27 MB 889 kB/s
 http_req_blocked...............: avg=3.22µs  min=1.05µs  med=2.35µs  max=1.96ms   p(90)=2.87µs  p(95)=3.44µs 
 http_req_connecting............: avg=381ns   min=0s      med=0s      max=685.74µs p(90)=0s      p(95)=0s     

✓ http_req_duration..............: avg=5.15ms min=1.69ms med=4.94ms max=18.17ms p(90)=7.12ms p(95)=7.9ms
{ expected_response:true }...: avg=5.15ms min=1.69ms med=4.94ms max=18.17ms p(90)=7.12ms p(95)=7.9ms
✓ http_req_failed................: 0.00% ✓ 0 ✗ 57190
http_req_receiving.............: avg=47.01µs min=19.34µs med=45.84µs max=1.14ms p(90)=56.07µs p(95)=68.62µs
http_req_sending...............: avg=14.06µs min=7.06µs med=11.88µs max=873.34µs p(90)=23.36µs p(95)=28.81µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=5.09ms min=1.64ms med=4.88ms max=18.1ms p(90)=7.06ms p(95)=7.84ms
http_reqs......................: 57190 1906.054146/s
iteration_duration.............: avg=5.23ms min=1.78ms med=5.03ms max=18.23ms p(90)=7.2ms p(95)=7.99ms
iterations.....................: 57190 1906.054146/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

ci: loadtest with different JWTs

3 participants