Skip to content

Commit 2759257

Browse files
committed
readme updated
1 parent 60c964b commit 2759257

File tree

2 files changed

+139
-123
lines changed

2 files changed

+139
-123
lines changed

BENCHMARK_HISTORY.MD

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
# Benchmark History
2+
3+
This document contains a list of all benchmarks that have been run on the previous versions of the project.
4+
All versions are defined as tags in the repository.
5+
6+
## 0.1.0
7+
8+
The following bechmarks have been executed on release `v0.1.0` by using the [Temurin JDK](https://adoptium.net) version 17.
9+
10+
### Execution on M1 Max MacBook with 64 GB RAM and local SSD
11+
12+
The benchmark has been executed on 4 threads in parallel:
13+
14+
| Logger | Logging Appender | Operations per second |
15+
|-------------------|------------------------|----------------------:|
16+
| Log4J2 | FILE_ASYNC | 26443 |
17+
| Chronicle Logger | FILE_ASYNC | 23435 |
18+
| Log4J2 | FILE | 13262 |
19+
| Java Util Logging | FILE | 5793 |
20+
| SLF4J Simple | FILE | 5715 |
21+
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 3853 |
22+
| Log4J2 | FILE_AND_CONSOLE | 3686 |
23+
| Log4J2 | CONSOLE | 3720 |
24+
| Java Util Logging | CONSOLE | 3430 |
25+
| Java Util Logging | FILE_AND_CONSOLE | 2712 |
26+
27+
The benchmark has been executed on 60 threads in parallel:
28+
29+
| Logger | Logging Appender | Operations per second |
30+
|-------------------|------------------------|----------------------:|
31+
| Chronicle Logger | FILE_ASYNC | 52659 |
32+
| Log4J2 | FILE_ASYNC | 14515 |
33+
| Log4J2 | FILE | 14290 |
34+
| Java Util Logging | FILE | 6158 |
35+
| SLF4J Simple | FILE | 5357 |
36+
| Log4J2 | CONSOLE | 4044 |
37+
| Java Util Logging | CONSOLE | 3745 |
38+
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 3619 |
39+
| Log4J2 | FILE_AND_CONSOLE | 3323 |
40+
| Java Util Logging | FILE_AND_CONSOLE | 2754 |
41+
42+
### Execution on Linux box with 40 vCPUs, 250 GB RAM, and local SSD
43+
44+
The benchmark has been executed on 4 threads in parallel:
45+
46+
| Logger | Logging Appender | Operations per second |
47+
|-------------------|------------------------|----------------------:|
48+
| Log4J2 | FILE_ASYNC | 16379 |
49+
| Log4J2 | FILE | 12527 |
50+
| Chronicle Logger | FILE_ASYNC | 9711 |
51+
| SLF4J Simple | FILE | 4195 |
52+
| Log4J2 | CONSOLE | 3383 |
53+
| Log4J2 | FILE_AND_CONSOLE | 3273 |
54+
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 3199 |
55+
| Java Util Logging | FILE | 2834 |
56+
| Java Util Logging | FILE_AND_CONSOLE | 1987 |
57+
| Java Util Logging | CONSOLE | 1722 |
58+
59+
The benchmark has been executed on 40 threads in parallel:
60+
61+
| Logger | Logging Appender | Operations per second |
62+
|-------------------|------------------------|----------------------:|
63+
| Log4J2 | FILE | 8816 |
64+
| Log4J2 | FILE_ASYNC | 8141 |
65+
| SLF4J Simple | FILE | 4735 |
66+
| Chronicle Logger | FILE_ASYNC | 4226 |
67+
| Log4J2 | CONSOLE | 3656 |
68+
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 3627 |
69+
| Log4J2 | FILE_AND_CONSOLE | 3412 |
70+
| Java Util Logging | FILE | 2771 |
71+
| Java Util Logging | CONSOLE | 1468 |
72+
| Java Util Logging | FILE_AND_CONSOLE | 1137 |
73+
74+
The benchmark has been executed on 240 threads in parallel:
75+
76+
| Logger | Logging Appender | Operations per second |
77+
|-------------------|------------------------|----------------------:|
78+
| Log4J2 | FILE | 8583 |
79+
| Log4J2 | FILE_ASYNC | 7481 |
80+
| SLF4J Simple | FILE | 4542 |
81+
| Log4J2 | CONSOLE | 3543 |
82+
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 3448 |
83+
| Log4J2 | FILE_AND_CONSOLE | 3401 |
84+
| Java Util Logging | FILE | 2248 |
85+
| Java Util Logging | CONSOLE | 1496 |
86+
| Java Util Logging | FILE_AND_CONSOLE | 1131 |
87+
| Chronicle Logger | FILE_ASYNC | 432 |
88+
89+
### Execution on Linux vServer with 2 vCPUs and 4 GB RAM
90+
91+
The benchmark has been executed on 2 threads in parallel:
92+
93+
| Logger | Logging Appender | Operations per second |
94+
|-------------------|------------------------|----------------------:|
95+
| Chronicle Logger | FILE_ASYNC | 6091 |
96+
| Log4J2 | FILE | 5937 |
97+
| SLF4J Simple | FILE | 2377 |
98+
| Log4J2 | FILE_ASYNC | 2240 |
99+
| Java Util Logging | FILE | 1124 |
100+
| Log4J2 | FILE_AND_CONSOLE | 869 |
101+
| Log4J2 | CONSOLE | 633 |
102+
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 577 |
103+
| Java Util Logging | CONSOLE | 404 |
104+
| Java Util Logging | FILE_AND_CONSOLE | 279 |
105+
106+
The benchmark has been executed on 12 threads in parallel:
107+
108+
| Logger | Logging Appender | Operations per second |
109+
|-------------------|------------------------|----------------------:|
110+
| Log4J2 | FILE | 5251 |
111+
| Java Util Logging | FILE | 1188 |
112+
| Log4J2 | FILE_ASYNC | 1142 |
113+
| Log4J2 | CONSOLE | 866 |
114+
| Chronicle Logger | FILE_ASYNC | 788 |
115+
| SLF4J Simple | FILE | 788 |
116+
| Log4J2 | FILE_AND_CONSOLE | 608 |
117+
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 518 |
118+
| Java Util Logging | CONSOLE | 514 |
119+
| Java Util Logging | FILE_AND_CONSOLE | 317 |
120+
121+
### CPU usage
122+
123+
The Chronicle Logger consumes 100% CPU (all 40 vCPUs are busy, synchronization is done with [CAS](https://en.wikipedia.org/wiki/Compare-and-swap)) while Log4JLoggerBenchmark only consumes 15% CPU.
124+
125+
### Heap allocation
126+
127+
The Chronicle Logger allocates around 0.65 GB of [heap](https://www.baeldung.com/java-stack-heap) when the benchmark is executed. Log4J needs much more memory and allocated over 3 GB in the benchmark.
128+

README.md

Lines changed: 11 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -51,129 +51,17 @@ All logging libraries execute that code to generate comparable results.
5151

5252
## What are the results?
5353

54-
I still need to run the code in a long running benchmark.
55-
The metric "Operations per second" defines how often `LogLikeHell` has been executed per second.
56-
All bechmarks have been executed on release `v0.1.0` by using the [Temurin JDK](https://adoptium.net) version 17.
57-
58-
### Execution on M1 Max MacBook with 64 GB RAM and local SSD
59-
60-
The benchmark has been executed on 4 threads in parallel:
61-
62-
| Logger | Logging Appender | Operations per second |
63-
|-------------------|------------------------|----------------------:|
64-
| Log4J2 | FILE_ASYNC | 26443 |
65-
| Chronicle Logger | FILE_ASYNC | 23435 |
66-
| Log4J2 | FILE | 13262 |
67-
| Java Util Logging | FILE | 5793 |
68-
| SLF4J Simple | FILE | 5715 |
69-
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 3853 |
70-
| Log4J2 | FILE_AND_CONSOLE | 3686 |
71-
| Log4J2 | CONSOLE | 3720 |
72-
| Java Util Logging | CONSOLE | 3430 |
73-
| Java Util Logging | FILE_AND_CONSOLE | 2712 |
74-
75-
The benchmark has been executed on 60 threads in parallel:
76-
77-
| Logger | Logging Appender | Operations per second |
78-
|-------------------|------------------------|----------------------:|
79-
| Chronicle Logger | FILE_ASYNC | 52659 |
80-
| Log4J2 | FILE_ASYNC | 14515 |
81-
| Log4J2 | FILE | 14290 |
82-
| Java Util Logging | FILE | 6158 |
83-
| SLF4J Simple | FILE | 5357 |
84-
| Log4J2 | CONSOLE | 4044 |
85-
| Java Util Logging | CONSOLE | 3745 |
86-
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 3619 |
87-
| Log4J2 | FILE_AND_CONSOLE | 3323 |
88-
| Java Util Logging | FILE_AND_CONSOLE | 2754 |
89-
90-
### Execution on Linux box with 40 vCPUs, 250 GB RAM, and local SSD
91-
92-
The benchmark has been executed on 4 threads in parallel:
93-
94-
| Logger | Logging Appender | Operations per second |
95-
|-------------------|------------------------|----------------------:|
96-
| Log4J2 | FILE_ASYNC | 16379 |
97-
| Log4J2 | FILE | 12527 |
98-
| Chronicle Logger | FILE_ASYNC | 9711 |
99-
| SLF4J Simple | FILE | 4195 |
100-
| Log4J2 | CONSOLE | 3383 |
101-
| Log4J2 | FILE_AND_CONSOLE | 3273 |
102-
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 3199 |
103-
| Java Util Logging | FILE | 2834 |
104-
| Java Util Logging | FILE_AND_CONSOLE | 1987 |
105-
| Java Util Logging | CONSOLE | 1722 |
106-
107-
The benchmark has been executed on 40 threads in parallel:
108-
109-
| Logger | Logging Appender | Operations per second |
110-
|-------------------|------------------------|----------------------:|
111-
| Log4J2 | FILE | 8816 |
112-
| Log4J2 | FILE_ASYNC | 8141 |
113-
| SLF4J Simple | FILE | 4735 |
114-
| Chronicle Logger | FILE_ASYNC | 4226 |
115-
| Log4J2 | CONSOLE | 3656 |
116-
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 3627 |
117-
| Log4J2 | FILE_AND_CONSOLE | 3412 |
118-
| Java Util Logging | FILE | 2771 |
119-
| Java Util Logging | CONSOLE | 1468 |
120-
| Java Util Logging | FILE_AND_CONSOLE | 1137 |
121-
122-
The benchmark has been executed on 240 threads in parallel:
123-
124-
| Logger | Logging Appender | Operations per second |
125-
|-------------------|------------------------|----------------------:|
126-
| Log4J2 | FILE | 8583 |
127-
| Log4J2 | FILE_ASYNC | 7481 |
128-
| SLF4J Simple | FILE | 4542 |
129-
| Log4J2 | CONSOLE | 3543 |
130-
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 3448 |
131-
| Log4J2 | FILE_AND_CONSOLE | 3401 |
132-
| Java Util Logging | FILE | 2248 |
133-
| Java Util Logging | CONSOLE | 1496 |
134-
| Java Util Logging | FILE_AND_CONSOLE | 1131 |
135-
| Chronicle Logger | FILE_ASYNC | 432 |
136-
137-
### Execution on Linux vServer with 2 vCPUs and 4 GB RAM
138-
139-
The benchmark has been executed on 2 threads in parallel:
140-
141-
| Logger | Logging Appender | Operations per second |
142-
|-------------------|------------------------|----------------------:|
143-
| Chronicle Logger | FILE_ASYNC | 6091 |
144-
| Log4J2 | FILE | 5937 |
145-
| SLF4J Simple | FILE | 2377 |
146-
| Log4J2 | FILE_ASYNC | 2240 |
147-
| Java Util Logging | FILE | 1124 |
148-
| Log4J2 | FILE_AND_CONSOLE | 869 |
149-
| Log4J2 | CONSOLE | 633 |
150-
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 577 |
151-
| Java Util Logging | CONSOLE | 404 |
152-
| Java Util Logging | FILE_AND_CONSOLE | 279 |
153-
154-
The benchmark has been executed on 12 threads in parallel:
155-
156-
| Logger | Logging Appender | Operations per second |
157-
|-------------------|------------------------|----------------------:|
158-
| Log4J2 | FILE | 5251 |
159-
| Java Util Logging | FILE | 1188 |
160-
| Log4J2 | FILE_ASYNC | 1142 |
161-
| Log4J2 | CONSOLE | 866 |
162-
| Chronicle Logger | FILE_ASYNC | 788 |
163-
| SLF4J Simple | FILE | 788 |
164-
| Log4J2 | FILE_AND_CONSOLE | 608 |
165-
| Log4J2 | FILE_ASYNC_AND_CONSOLE | 518 |
166-
| Java Util Logging | CONSOLE | 514 |
167-
| Java Util Logging | FILE_AND_CONSOLE | 317 |
168-
169-
### CPU usage
170-
171-
The Chronicle Logger consumes 100% CPU (all 40 vCPUs are busy, synchronization is done with [CAS](https://en.wikipedia.org/wiki/Compare-and-swap)) while Log4JLoggerBenchmark only consumes 15% CPU.
172-
173-
### Heap allocation
174-
175-
The Chronicle Logger allocates around 0.65 GB of [heap](https://www.baeldung.com/java-stack-heap) when the benchmark is executed. Log4J needs much more memory and allocated over 3 GB in the benchmark.
54+
Since the project evolved over time, the results are not always comparable.
55+
The [benchmark archive](BENCHMARK_HISTORY.MD) contains the results of benchmarks of all previous version of the repository.
56+
57+
### Logger initialization
58+
59+
Since `v0.2.0` the repo contains benchmarks that check the initialization time of the logger.
60+
All loggers are initialized really fast (about 40,000,000 calls per second on my machine) and the performance is independent of the logger configuration.
17661

17762
## Kudos
17863

179-
[Oleg Mazurov](https://github.com/OlegMazurov) helped me by executing the tests on a powerfull linux server.
64+
The following people helped to improve the benchmark:
65+
66+
- [Oleg Mazurov](https://github.com/OlegMazurov) helped me by executing the tests on a powerfull linux server.
67+
- [Peter Lawrey](https://github.com/peter-lawrey) helped me to improve the chronicle benchmarks.

0 commit comments

Comments
 (0)