The AsyncFileAppender performance test is now in a separate file. Each benchmark, in addition to logging performs an additional operation taking a few microseconds, aka the baseline. The baseline duration is a benchmark parameter. When the baseline duration approaches 1 over the AsyncAppender logging throughput, the cost of AsyncAppender becomes invisible. Here is the command to run the benchmark test:
java -jar target/benchmarks.jar ".*AsyncFileAppenderBenchmark.*" -f 1 -bm avgt -tu us -wi 5 -i 10 -t 16
Here are the results with 16 threads
Benchmark (powerOf2) Mode Cnt Score Error Units
AsyncFileAppenderBenchmark.baseline 8 avgt 10 4.116 ± 0.107 us/op
AsyncFileAppenderBenchmark.baseline 10 avgt 10 16.356 ± 0.602 us/op
AsyncFileAppenderBenchmark.baseline 12 avgt 10 66.020 ± 2.877 us/op
AsyncFileAppenderBenchmark.baseline 14 avgt 10 274.693 ± 23.184 us/op
AsyncFileAppenderBenchmark.log4j1File 8 avgt 10 18.592 ± 0.305 us/op
AsyncFileAppenderBenchmark.log4j1File 10 avgt 10 29.431 ± 0.529 us/op
AsyncFileAppenderBenchmark.log4j1File 12 avgt 10 70.657 ± 2.448 us/op
AsyncFileAppenderBenchmark.log4j1File 14 avgt 10 272.282 ± 3.867 us/op
AsyncFileAppenderBenchmark.log4j2RAF 8 avgt 10 14.797 ± 0.162 us/op
AsyncFileAppenderBenchmark.log4j2RAF 10 avgt 10 23.318 ± 0.415 us/op
AsyncFileAppenderBenchmark.log4j2RAF 12 avgt 10 64.871 ± 0.827 us/op
AsyncFileAppenderBenchmark.log4j2RAF 14 avgt 10 257.394 ± 3.796 us/op
AsyncFileAppenderBenchmark.logbackFile 8 avgt 10 54.249 ± 0.575 us/op
AsyncFileAppenderBenchmark.logbackFile 10 avgt 10 50.049 ± 0.356 us/op
AsyncFileAppenderBenchmark.logbackFile 12 avgt 10 73.832 ± 2.264 us/op
AsyncFileAppenderBenchmark.logbackFile 14 avgt 10 268.423 ± 6.736 us/op
Here are the results with 32 threads
Benchmark (powerOf2) Mode Cnt Score Error Units
AsyncFileAppenderBenchmark.baseline 8 avgt 10 8.204 ± 0.136 us/op
AsyncFileAppenderBenchmark.baseline 10 avgt 10 32.935 ± 0.913 us/op
AsyncFileAppenderBenchmark.baseline 12 avgt 10 129.007 ± 2.421 us/op
AsyncFileAppenderBenchmark.baseline 14 avgt 10 547.678 ± 26.003 us/op
AsyncFileAppenderBenchmark.log4j1File 8 avgt 10 39.147 ± 6.186 us/op
AsyncFileAppenderBenchmark.log4j1File 10 avgt 10 58.539 ± 1.001 us/op
AsyncFileAppenderBenchmark.log4j1File 12 avgt 10 150.811 ± 8.552 us/op
AsyncFileAppenderBenchmark.log4j1File 14 avgt 10 579.674 ± 25.329 us/op
AsyncFileAppenderBenchmark.log4j2RAF 8 avgt 10 32.096 ± 2.859 us/op
AsyncFileAppenderBenchmark.log4j2RAF 10 avgt 10 47.249 ± 0.910 us/op
AsyncFileAppenderBenchmark.log4j2RAF 12 avgt 10 133.443 ± 2.474 us/op
AsyncFileAppenderBenchmark.log4j2RAF 14 avgt 10 513.933 ± 15.221 us/op
AsyncFileAppenderBenchmark.logbackFile 8 avgt 10 113.088 ± 1.204 us/op
AsyncFileAppenderBenchmark.logbackFile 10 avgt 10 119.610 ± 3.122 us/op
AsyncFileAppenderBenchmark.logbackFile 12 avgt 10 165.772 ± 2.294 us/op
AsyncFileAppenderBenchmark.logbackFile 14 avgt 10 552.415 ± 15.728 us/op
I don't understand why the base line cost increases with the number of threads but the gist should come across. |