[ https://issues.apache.org/jira/browse/LOG4J2-3115?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17373441#comment-17373441 ]
Markus Spann edited comment on LOG4J2-3115 at 7/2/21, 11:21 AM: ---------------------------------------------------------------- A JMH benchmark shows a ~3x improvement with the patch applied compared to the current implementation. h4. Results with current state of release-2.x branch: {noformat} # JMH version: 1.21 # VM version: JDK 9.0.4, OpenJDK 64-Bit Server VM, 9.0.4+11 # VM invoker: /opt/openJdk/jdk-9.0.4+11/bin/java # VM options: -server -XX:+AggressiveOpts # Warmup: <none> # Measurement: 3 iterations, 3 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Throughput, ops/time # Benchmark: org.apache.logging.log4j.perf.jmh.NamePatternConverterBenchmark.benchNamePatternConverter # Run progress: 0,00% complete, ETA 00:00:09 # Fork: 1 of 1 Picked up JAVA_TOOL_OPTIONS: -Doracle.net.tns_admin=/opt/oracle/adm/net/ Iteration 1: 8416659,364 ops/s Iteration 2: 9176477,095 ops/s Iteration 3: 8922643,679 ops/s Result "org.apache.logging.log4j.perf.jmh.NamePatternConverterBenchmark.benchNamePatternConverter": 8838593,379 ±(99.9%) 7057022,029 ops/s [Average] (min, avg, max) = (8416659,364, 8838593,379, 9176477,095), stdev = 386819,190 CI (99.9%): [1781571,350, 15895615,409] (assumes normal distribution) # Run complete. Total time: 00:00:09 Benchmark Mode Cnt Score Error Units NamePatternConverterBenchmark.benchNamePatternConverter thrpt 3 8838593,379 ± 7057022,029 ops/s {noformat} h4. Results with patch applied: {noformat} # JMH version: 1.21 # VM version: JDK 9.0.4, OpenJDK 64-Bit Server VM, 9.0.4+11 # VM invoker: /opt/openJdk/jdk-9.0.4+11/bin/java # VM options: -server -XX:+AggressiveOpts # Warmup: <none> # Measurement: 3 iterations, 3 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Throughput, ops/time # Benchmark: org.apache.logging.log4j.perf.jmh.NamePatternConverterBenchmark.benchNamePatternConverter # Run progress: 0,00% complete, ETA 00:00:09 # Fork: 1 of 1 Picked up JAVA_TOOL_OPTIONS: -Doracle.net.tns_admin=/opt/oracle/adm/net/ Iteration 1: 22609007,617 ops/s Iteration 2: 24467053,653 ops/s Iteration 3: 25138829,367 ops/s Result "org.apache.logging.log4j.perf.jmh.NamePatternConverterBenchmark.benchNamePatternConverter": 24071630,212 ±(99.9%) 23907417,405 ops/s [Average] (min, avg, max) = (22609007,617, 24071630,212, 25138829,367), stdev = 1310446,220 CI (99.9%): [164212,808, 47979047,617] (assumes normal distribution) # Run complete. Total time: 00:00:09 Benchmark Mode Cnt Score Error Units NamePatternConverterBenchmark.benchNamePatternConverter thrpt 3 24071630,212 ± 23907417,405 ops/s {noformat} h4. Command line {noformat} mvn clean install -Dmaven.test.skip=true -D skipTests=true -f log4j-core/pom.xml mvn clean install -Dmaven.test.skip=true -D skipTests=true -f log4j-perf/pom.xml java -jar log4j-perf/target/benchmarks.jar -f 1 -wi 0 -i 3 -r 3s -jvmArgs '-server -XX:+AggressiveOpts' .*NamePatternConverterBenchmark.* {noformat} was (Author: spannjp): A JMH benchmark shows a ~3x improvement with the patch applied compared to the current implementation. h4. Results with current state of release-2.x branch: {noformat} # JMH version: 1.21 # VM version: JDK 9.0.4, OpenJDK 64-Bit Server VM, 9.0.4+11 # VM invoker: /opt/openJdk/jdk-9.0.4+11/bin/java # VM options: -server -XX:+AggressiveOpts # Warmup: <none> # Measurement: 3 iterations, 3 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Throughput, ops/time # Benchmark: org.apache.logging.log4j.perf.jmh.NamePatternConverterBenchmark.benchNamePatternConverter # Run progress: 0,00% complete, ETA 00:00:09 # Fork: 1 of 1 Picked up JAVA_TOOL_OPTIONS: -Doracle.net.tns_admin=/opt/oracle/adm/net/ Iteration 1: 8416659,364 ops/s Iteration 2: 9176477,095 ops/s Iteration 3: 8922643,679 ops/s Result "org.apache.logging.log4j.perf.jmh.NamePatternConverterBenchmark.benchNamePatternConverter": 8838593,379 ±(99.9%) 7057022,029 ops/s [Average] (min, avg, max) = (8416659,364, 8838593,379, 9176477,095), stdev = 386819,190 CI (99.9%): [1781571,350, 15895615,409] (assumes normal distribution) # Run complete. Total time: 00:00:09 Benchmark Mode Cnt Score Error Units NamePatternConverterBenchmark.benchNamePatternConverter thrpt 3 8838593,379 ± 7057022,029 ops/s {noformat} h4. Results with patch applied: {noformat} # JMH version: 1.21 # VM version: JDK 9.0.4, OpenJDK 64-Bit Server VM, 9.0.4+11 # VM invoker: /opt/openJdk/jdk-9.0.4+11/bin/java # VM options: -server -XX:+AggressiveOpts # Warmup: <none> # Measurement: 3 iterations, 3 s each # Timeout: 10 min per iteration # Threads: 1 thread, will synchronize iterations # Benchmark mode: Throughput, ops/time # Benchmark: org.apache.logging.log4j.perf.jmh.NamePatternConverterBenchmark.benchNamePatternConverter # Run progress: 0,00% complete, ETA 00:00:09 # Fork: 1 of 1 Picked up JAVA_TOOL_OPTIONS: -Doracle.net.tns_admin=/opt/oracle/adm/net/ Iteration 1: 22609007,617 ops/s Iteration 2: 24467053,653 ops/s Iteration 3: 25138829,367 ops/s Result "org.apache.logging.log4j.perf.jmh.NamePatternConverterBenchmark.benchNamePatternConverter": 24071630,212 ±(99.9%) 23907417,405 ops/s [Average] (min, avg, max) = (22609007,617, 24071630,212, 25138829,367), stdev = 1310446,220 CI (99.9%): [164212,808, 47979047,617] (assumes normal distribution) # Run complete. Total time: 00:00:09 Benchmark Mode Cnt Score Error Units NamePatternConverterBenchmark.benchNamePatternConverter thrpt 3 24071630,212 ± 23907417,405 ops/s {noformat} > Remember previously computed strings in NamePatternConverter > ------------------------------------------------------------ > > Key: LOG4J2-3115 > URL: https://issues.apache.org/jira/browse/LOG4J2-3115 > Project: Log4j 2 > Issue Type: Improvement > Components: Core > Reporter: Markus Spann > Priority: Minor > > Implementations of {{NamePatternConverter}} are responsible for abbreviating > logger and class names according to a configured pattern. > Abbreviation can be quite complex and computationally expensive (consider > abbreviating x parts of a fully qualified class name to y number of leftmost > characters). > Example: > The pattern {{%logger\{1.}}} abbreviates logger name > {{org.apache.logging.log4j.core.pattern.NameAbbreviator}} to > {{o.a.l.l.c.p.NameAbbreviator}} > The strings to abbreviate (logger and class names) extremely likely stem from > a limited set of candidates. I would like to suggest that results are cached > to prevent computation over and over again e.g. in every log statement of a > logger. > I have a small patch ready that addresses the issue. -- This message was sent by Atlassian Jira (v8.3.4#803005)