Skip to content

Instantly share code, notes, and snippets.

@GavinRay97
Last active October 7, 2022 22:30
Show Gist options
  • Save GavinRay97/cc662f63e6117d47b1339fd958563034 to your computer and use it in GitHub Desktop.
Save GavinRay97/cc662f63e6117d47b1339fd958563034 to your computer and use it in GitHub Desktop.
Quarkus v2.13.0-Final benchmarks, Loom vs Standard, Reactive SQL vs JDBC
@ApplicationScoped
public class PersonRepositoryAsyncAwait {
@Inject
PgPool pgPool;
public Person findById(Long id) {
RowSet<Row> rowSet = pgPool
.preparedQuery("SELECT id, name, age, gender FROM person WHERE id = $1")
.executeAndAwait(Tuple.of(id));
List<Person> persons = iterateAndCreate(rowSet);
return persons.size() == 0 ? null : persons.get(0);
}
}
@ApplicationScoped
public class PersonRepositorySync {
@Inject
AgroalDataSource defaultDataSource;
public Person findById(Long id) throws Exception {
try (Connection connection = defaultDataSource.getConnection();
PreparedStatement statement = connection.prepareStatement("SELECT id, name, age, gender FROM person WHERE id = ?")) {
statement.setLong(1, id);
ResultSet resultSet = statement.executeQuery();
if (resultSet.next()) {
Person person = new Person();
person.setId(resultSet.getLong("id"));
person.setName(resultSet.getString("name"));
person.setAge(resultSet.getInt("age"));
person.setGender(Gender.valueOf(resultSet.getString("gender")));
return person;
}
}
return null;
}
}
@Path("/persons")
public class PersonResource {
@Inject
PersonRepositoryAsyncAwait personRepository;
@Inject
PersonRepositorySync personRepositorySync;
@RunOnVirtualThread
@GET
@Path("/on-virtual-thread/reactive-sql")
public Person getRandomPersonByIdVirtualReactive() {
Long id = getRandomId();
return personRepository.findById(id);
}
@RunOnVirtualThread
@GET
@Path("/on-virtual-thread/jdbc-sql")
public Person getRandomPersonByIdVirtualJDBC() throws Exception {
Long id = getRandomId();
return personRepositorySync.findById(id);
}
@GET
@Path("/off-virtual-thread/reactive-sql")
public Person getRandomPersonByIdReactive() {
Long id = getRandomId();
return personRepository.findById(id);
}
@GET
@Path("/off-virtual-thread/jdbc-sql")
public Person getRandomPersonByIdJDBC() throws Exception {
Long id = getRandomId();
return personRepositorySync.findById(id);
}
private Long getRandomId() {
return (long) (Math.random() * 1000);
}
}
user@MSI:~/projects/sample-quarkus-applications/person-virtual-service$ make run_k6
for thread_type in "on-virtual-thread" "off-virtual-thread" ; do \
for driver_type in "reactive-sql" "jdbc-sql" ; do \
for connections in 10 100 1000 ; do \
echo "Running k6 test for $thread_type/$driver_type with $connections connections" ; \
./k6/k6-v0.40.0-linux-amd64/k6 run \
--quiet \
--vus $connections \
--duration 10s \
--discard-response-bodies \
--env ENDPOINT=http://0.0.0.0:8079/persons/$thread_type/$driver_type \
- < ./k6/script2.js ; \
done \
done \
done
Running k6 test for on-virtual-thread/reactive-sql with 10 connections
data_received..................: 8.0 MB 796 kB/s
data_sent......................: 5.6 MB 564 kB/s
http_req_blocked...............: avg=1.23µs min=436ns med=1.09µs max=224.67µs p(90)=1.49µs p(95)=1.63µs
http_req_connecting............: avg=19ns min=0s med=0s max=192.09µs p(90)=0s p(95)=0s
http_req_duration..............: avg=2.01ms min=1.07ms med=1.92ms max=83.36ms p(90)=2.39ms p(95)=2.49ms
{ expected_response:true }...: avg=2.01ms min=1.07ms med=1.92ms max=83.36ms p(90)=2.39ms p(95)=2.49ms
http_req_failed................: 0.00% ✓ 0 ✗ 48640
http_req_receiving.............: avg=21.16µs min=4.58µs med=19.77µs max=926.51µs p(90)=31.07µs p(95)=38.49µs
http_req_sending...............: avg=5.74µs min=2.25µs med=5.14µs max=1.39ms p(90)=6.82µs p(95)=7.39µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=1.99ms min=1.04ms med=1.89ms max=83.31ms p(90)=2.37ms p(95)=2.46ms
http_reqs......................: 48640 4862.84288/s
iteration_duration.............: avg=2.05ms min=1.1ms med=1.95ms max=83.55ms p(90)=2.43ms p(95)=2.52ms
iterations.....................: 48640 4862.84288/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10
Running k6 test for on-virtual-thread/reactive-sql with 100 connections
data_received..................: 8.1 MB 810 kB/s
data_sent......................: 5.7 MB 574 kB/s
http_req_blocked...............: avg=47.73µs min=448ns med=1.12µs max=55.1ms p(90)=1.56µs p(95)=1.74µs
http_req_connecting............: avg=16.92µs min=0s med=0s max=55.02ms p(90)=0s p(95)=0s
http_req_duration..............: avg=20.1ms min=2.53ms med=19.75ms max=66.7ms p(90)=21.74ms p(95)=23.96ms
{ expected_response:true }...: avg=20.1ms min=2.53ms med=19.75ms max=66.7ms p(90)=21.74ms p(95)=23.96ms
http_req_failed................: 0.00% ✓ 0 ✗ 49527
http_req_receiving.............: avg=23.25µs min=5.87µs med=21.61µs max=7.85ms p(90)=34.44µs p(95)=42.43µs
http_req_sending...............: avg=7.07µs min=2.76µs med=5.64µs max=7.69ms p(90)=7.5µs p(95)=8.22µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=20.07ms min=2.51ms med=19.72ms max=66.68ms p(90)=21.71ms p(95)=23.93ms
http_reqs......................: 49527 4947.470864/s
iteration_duration.............: avg=20.18ms min=2.57ms med=19.79ms max=91.48ms p(90)=21.78ms p(95)=24.01ms
iterations.....................: 49527 4947.470864/s
vus............................: 100 min=100 max=100
vus_max........................: 100 min=100 max=100
Running k6 test for on-virtual-thread/reactive-sql with 1000 connections
data_received..................: 8.1 MB 793 kB/s
data_sent......................: 5.7 MB 562 kB/s
http_req_blocked...............: avg=1.12ms min=466ns med=1.18µs max=269.94ms p(90)=1.69µs p(95)=2.19µs
http_req_connecting............: avg=1.09ms min=0s med=0s max=268.38ms p(90)=0s p(95)=0s
http_req_duration..............: avg=198.97ms min=11.92ms med=198.54ms max=266.26ms p(90)=210.32ms p(95)=213.18ms
{ expected_response:true }...: avg=198.97ms min=11.92ms med=198.54ms max=266.26ms p(90)=210.32ms p(95)=213.18ms
http_req_failed................: 0.00% ✓ 0 ✗ 49381
http_req_receiving.............: avg=25.51µs min=6.46µs med=23.93µs max=35.67ms p(90)=39.58µs p(95)=45.39µs
http_req_sending...............: avg=64.09µs min=2.94µs med=6.09µs max=35.88ms p(90)=8.42µs p(95)=15.97µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=198.88ms min=6.71ms med=198.51ms max=266.2ms p(90)=210.28ms p(95)=213.14ms
http_reqs......................: 49381 4845.677852/s
iteration_duration.............: avg=200.16ms min=11.98ms med=198.66ms max=497.61ms p(90)=210.61ms p(95)=213.55ms
iterations.....................: 49381 4845.677852/s
vus............................: 1000 min=1000 max=1000
vus_max........................: 1000 min=1000 max=1000
Running k6 test for on-virtual-thread/jdbc-sql with 10 connections
data_received..................: 18 MB 1.8 MB/s
data_sent......................: 12 MB 1.2 MB/s
http_req_blocked...............: avg=1.25µs min=421ns med=1.19µs max=546.2µs p(90)=1.49µs p(95)=1.65µs
http_req_connecting............: avg=9ns min=0s med=0s max=214.88µs p(90)=0s p(95)=0s
http_req_duration..............: avg=891.42µs min=404.5µs med=729.96µs max=210.25ms p(90)=936.8µs p(95)=1.04ms
{ expected_response:true }...: avg=891.42µs min=404.5µs med=729.96µs max=210.25ms p(90)=936.8µs p(95)=1.04ms
http_req_failed................: 0.00% ✓ 0 ✗ 107684
http_req_receiving.............: avg=17.79µs min=-66857ns med=14.31µs max=1.69ms p(90)=29.66µs p(95)=32.65µs
http_req_sending...............: avg=5.83µs min=2.05µs med=5.27µs max=5.9ms p(90)=6.64µs p(95)=7.21µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=867.79µs min=388.7µs med=707.19µs max=210.17ms p(90)=912.26µs p(95)=1.02ms
http_reqs......................: 107684 10766.549372/s
iteration_duration.............: avg=923.26µs min=431.34µs med=760.96µs max=210.41ms p(90)=969.72µs p(95)=1.08ms
iterations.....................: 107684 10766.549372/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10
Running k6 test for on-virtual-thread/jdbc-sql with 100 connections
data_received..................: 14 MB 1.4 MB/s
data_sent......................: 9.3 MB 931 kB/s
http_req_blocked...............: avg=12.11µs min=434ns med=1.25µs max=54.63ms p(90)=1.61µs p(95)=1.85µs
http_req_connecting............: avg=10.66µs min=0s med=0s max=54.61ms p(90)=0s p(95)=0s
http_req_duration..............: avg=11.95ms min=956.21µs med=5.88ms max=941.16ms p(90)=24.72ms p(95)=31.34ms
{ expected_response:true }...: avg=11.95ms min=956.21µs med=5.88ms max=941.16ms p(90)=24.72ms p(95)=31.34ms
http_req_failed................: 0.00% ✓ 0 ✗ 83237
http_req_receiving.............: avg=19.5µs min=4.42µs med=15.8µs max=8.18ms p(90)=31.02µs p(95)=35.18µs
http_req_sending...............: avg=7.68µs min=2.2µs med=5.88µs max=54.14ms p(90)=7.51µs p(95)=8.44µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=11.92ms min=843µs med=5.85ms max=941.13ms p(90)=24.69ms p(95)=31.31ms
http_reqs......................: 83237 8310.294203/s
iteration_duration.............: avg=12ms min=1ms med=5.92ms max=941.2ms p(90)=24.78ms p(95)=31.42ms
iterations.....................: 83237 8310.294203/s
vus............................: 100 min=100 max=100
vus_max........................: 100 min=100 max=100
Running k6 test for on-virtual-thread/jdbc-sql with 1000 connections
data_received..................: 13 MB 1.3 MB/s
data_sent......................: 9.0 MB 886 kB/s
http_req_blocked...............: avg=570.8µs min=432ns med=1.29µs max=228.8ms p(90)=1.74µs p(95)=2.22µs
http_req_connecting............: avg=564.86µs min=0s med=0s max=228.74ms p(90)=0s p(95)=0s
http_req_duration..............: avg=122.76ms min=9.15ms med=89.33ms max=517.5ms p(90)=265.18ms p(95)=294.51ms
{ expected_response:true }...: avg=122.76ms min=9.15ms med=89.33ms max=517.5ms p(90)=265.18ms p(95)=294.51ms
http_req_failed................: 0.00% ✓ 0 ✗ 80233
http_req_receiving.............: avg=21.13µs min=6.57µs med=17.72µs max=16.21ms p(90)=33.18µs p(95)=38.41µs
http_req_sending...............: avg=28.46µs min=2.67µs med=6.4µs max=8.65ms p(90)=8.36µs p(95)=10.73µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=122.71ms min=9.09ms med=89.3ms max=517.48ms p(90)=265.16ms p(95)=294.48ms
http_reqs......................: 80233 7913.295468/s
iteration_duration.............: avg=123.37ms min=9.19ms med=89.68ms max=517.53ms p(90)=265.36ms p(95)=294.71ms
iterations.....................: 80233 7913.295468/s
vus............................: 1000 min=1000 max=1000
vus_max........................: 1000 min=1000 max=1000
Running k6 test for off-virtual-thread/reactive-sql with 10 connections
data_received..................: 8.5 MB 854 kB/s
data_sent......................: 6.1 MB 611 kB/s
http_req_blocked...............: avg=1.24µs min=427ns med=1.07µs max=294.36µs p(90)=1.49µs p(95)=1.65µs
http_req_connecting............: avg=20ns min=0s med=0s max=198.3µs p(90)=0s p(95)=0s
http_req_duration..............: avg=1.87ms min=1.06ms med=1.85ms max=8ms p(90)=2.2ms p(95)=2.31ms
{ expected_response:true }...: avg=1.87ms min=1.06ms med=1.85ms max=8ms p(90)=2.2ms p(95)=2.31ms
http_req_failed................: 0.00% ✓ 0 ✗ 52230
http_req_receiving.............: avg=21.94µs min=4.4µs med=22.99µs max=2.05ms p(90)=31.53µs p(95)=39.48µs
http_req_sending...............: avg=5.67µs min=2.23µs med=5.03µs max=1.01ms p(90)=6.7µs p(95)=7.28µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=1.84ms min=1.02ms med=1.82ms max=7.98ms p(90)=2.17ms p(95)=2.28ms
http_reqs......................: 52230 5221.860125/s
iteration_duration.............: avg=1.9ms min=1.11ms med=1.88ms max=8.03ms p(90)=2.23ms p(95)=2.35ms
iterations.....................: 52230 5221.860125/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10
Running k6 test for off-virtual-thread/reactive-sql with 100 connections
data_received..................: 8.5 MB 845 kB/s
data_sent......................: 6.1 MB 604 kB/s
http_req_blocked...............: avg=15.33µs min=439ns med=1.08µs max=45.27ms p(90)=1.52µs p(95)=1.71µs
http_req_connecting............: avg=14.05µs min=0s med=0s max=45.02ms p(90)=0s p(95)=0s
http_req_duration..............: avg=19.26ms min=8.15ms med=18.99ms max=58.64ms p(90)=20.31ms p(95)=21.23ms
{ expected_response:true }...: avg=19.26ms min=8.15ms med=18.99ms max=58.64ms p(90)=20.31ms p(95)=21.23ms
http_req_failed................: 0.00% ✓ 0 ✗ 51733
http_req_receiving.............: avg=24.07µs min=5.77µs med=24.37µs max=3.26ms p(90)=36.91µs p(95)=43.75µs
http_req_sending...............: avg=7.18µs min=2.55µs med=5.48µs max=45.19ms p(90)=7.38µs p(95)=8.05µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=19.23ms min=8.09ms med=18.96ms max=45.21ms p(90)=20.28ms p(95)=21.2ms
http_reqs......................: 51733 5161.973145/s
iteration_duration.............: avg=19.32ms min=8.2ms med=19.03ms max=69.9ms p(90)=20.35ms p(95)=21.28ms
iterations.....................: 51733 5161.973145/s
vus............................: 100 min=100 max=100
vus_max........................: 100 min=100 max=100
Running k6 test for off-virtual-thread/reactive-sql with 1000 connections
data_received..................: 8.4 MB 827 kB/s
data_sent......................: 6.0 MB 591 kB/s
http_req_blocked...............: avg=1.79ms min=435ns med=1.11µs max=366.26ms p(90)=1.63µs p(95)=2.03µs
http_req_connecting............: avg=1.77ms min=0s med=0s max=365.23ms p(90)=0s p(95)=0s
http_req_duration..............: avg=189.03ms min=14.16ms med=187.86ms max=359.07ms p(90)=200ms p(95)=203.51ms
{ expected_response:true }...: avg=189.03ms min=14.16ms med=187.86ms max=359.07ms p(90)=200ms p(95)=203.51ms
http_req_failed................: 0.00% ✓ 0 ✗ 51442
http_req_receiving.............: avg=25.21µs min=6.3µs med=24.93µs max=511.32µs p(90)=40.61µs p(95)=45.68µs
http_req_sending...............: avg=35.87µs min=2.82µs med=5.69µs max=88.42ms p(90)=7.97µs p(95)=14.86µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=188.97ms min=8.72ms med=187.82ms max=358.59ms p(90)=199.96ms p(95)=203.48ms
http_reqs......................: 51442 5052.833598/s
iteration_duration.............: avg=190.86ms min=30.32ms med=187.94ms max=506.83ms p(90)=200.23ms p(95)=203.78ms
iterations.....................: 51442 5052.833598/s
vus............................: 1000 min=1000 max=1000
vus_max........................: 1000 min=1000 max=1000
Running k6 test for off-virtual-thread/jdbc-sql with 10 connections
data_received..................: 23 MB 2.3 MB/s
data_sent......................: 16 MB 1.6 MB/s
http_req_blocked...............: avg=1.21µs min=391ns med=1.1µs max=1.67ms p(90)=1.43µs p(95)=1.58µs
http_req_connecting............: avg=7ns min=0s med=0s max=199.17µs p(90)=0s p(95)=0s
http_req_duration..............: avg=666.97µs min=16.01µs med=648.44µs max=10.59ms p(90)=771.32µs p(95)=825.36µs
{ expected_response:true }...: avg=666.97µs min=16.01µs med=648.44µs max=10.59ms p(90)=771.32µs p(95)=825.36µs
http_req_failed................: 0.00% ✓ 0 ✗ 142392
http_req_receiving.............: avg=16.15µs min=3.92µs med=13.27µs max=1.94ms p(90)=27.82µs p(95)=30.64µs
http_req_sending...............: avg=5.48µs min=2.09µs med=4.94µs max=3.43ms p(90)=6.32µs p(95)=6.84µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=645.32µs min=0s med=627.98µs max=10.55ms p(90)=749.47µs p(95)=801.38µs
http_reqs......................: 142392 14239.551295/s
iteration_duration.............: avg=697.11µs min=393.92µs med=677.62µs max=10.62ms p(90)=802.3µs p(95)=857.96µs
iterations.....................: 142392 14239.551295/s
vus............................: 10 min=10 max=10
vus_max........................: 10 min=10 max=10
Running k6 test for off-virtual-thread/jdbc-sql with 100 connections
data_received..................: 43 MB 4.2 MB/s
data_sent......................: 29 MB 2.9 MB/s
http_req_blocked...............: avg=5.52µs min=369ns med=1.13µs max=67.81ms p(90)=1.5µs p(95)=1.75µs
http_req_connecting............: avg=4.2µs min=0s med=0s max=67.79ms p(90)=0s p(95)=0s
http_req_duration..............: avg=3.8ms min=327.88µs med=1.3ms max=69.7ms p(90)=9.32ms p(95)=12.12ms
{ expected_response:true }...: avg=3.8ms min=327.88µs med=1.3ms max=69.7ms p(90)=9.32ms p(95)=12.12ms
http_req_failed................: 0.00% ✓ 0 ✗ 259791
http_req_receiving.............: avg=16.58µs min=3.88µs med=12.74µs max=10.26ms p(90)=19.41µs p(95)=29.55µs
http_req_sending...............: avg=7.06µs min=2.03µs med=5.25µs max=67.46ms p(90)=6.82µs p(95)=7.59µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=3.77ms min=313.46µs med=1.28ms max=68.23ms p(90)=9.3ms p(95)=12.08ms
http_reqs......................: 259791 25925.242122/s
iteration_duration.............: avg=3.83ms min=357.39µs med=1.34ms max=83.85ms p(90)=9.36ms p(95)=12.17ms
iterations.....................: 259791 25925.242122/s
vus............................: 100 min=100 max=100
vus_max........................: 100 min=100 max=100
Running k6 test for off-virtual-thread/jdbc-sql with 1000 connections
data_received..................: 45 MB 4.5 MB/s
data_sent......................: 31 MB 3.1 MB/s
http_req_blocked...............: avg=200.24µs min=392ns med=1.14µs max=316.69ms p(90)=1.59µs p(95)=1.94µs
http_req_connecting............: avg=193.6µs min=0s med=0s max=312.7ms p(90)=0s p(95)=0s
http_req_duration..............: avg=35.16ms min=5.66ms med=28.39ms max=270.89ms p(90)=51.73ms p(95)=68.8ms
{ expected_response:true }...: avg=35.16ms min=5.66ms med=28.39ms max=270.89ms p(90)=51.73ms p(95)=68.8ms
http_req_failed................: 0.00% ✓ 0 ✗ 275600
http_req_receiving.............: avg=21.68µs min=5.79µs med=14.49µs max=40.65ms p(90)=21.52µs p(95)=31.5µs
http_req_sending...............: avg=17.53µs min=2.15µs med=5.79µs max=165.54ms p(90)=7.54µs p(95)=8.84µs
http_req_tls_handshaking.......: avg=0s min=0s med=0s max=0s p(90)=0s p(95)=0s
http_req_waiting...............: avg=35.12ms min=5.02ms med=28.36ms max=270.87ms p(90)=51.69ms p(95)=68.76ms
http_reqs......................: 275600 27278.954709/s
iteration_duration.............: avg=35.4ms min=7.41ms med=28.43ms max=363.11ms p(90)=51.92ms p(95)=69.08ms
iterations.....................: 275600 27278.954709/s
vus............................: 1000 min=1000 max=1000
vus_max........................: 1000 min=1000 max=1000
import http from "k6/http"
export default function () {
http.get(__ENV.ENDPOINT)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment