logging-log4cxx icon indicating copy to clipboard operation
logging-log4cxx copied to clipboard

Logging overhead due to unnecessary pessimism

Open swebb2066 opened this issue 2 years ago • 3 comments

AppenderAttachableImpl::appendLoopOnAppenders locks a mutex for every Logger in the path to the root Logger.

Logging overhead would be reduced significantly if AppenderAttachableImpl was immutable.

swebb2066 avatar Feb 10 '24 04:02 swebb2066

On Windows, the benchmark comparisons using a lock (old) and without locking (new) in AppenderAttachableImpl::appendLoopOnAppenders are:

Benchmark Time CPU Time Old Time New CPU Old CPU New
Testing disabled logging request +0.0524 +0.0084 4 4 1 1
Testing disabled logging request/threads:4 +0.0369 -0.0044 1 1 4 4
Logging 5 char string using MessageBuffer, pattern: %m%n -0.2688 -0.3065 738 539 443 307
Logging 5 char string using MessageBuffer, pattern: %m%n/threads:4 -0.3380 -0.4413 437 290 1289 720
Logging 49 char string using MessageBuffer, pattern: %m%n -0.0783 -0.1196 752 693 481 424
Logging 49 char string using MessageBuffer, pattern: %m%n/threads:4 -0.2386 -0.2128 462 352 1242 977
Logging int value using MessageBuffer, pattern: %m%n +0.0696 -0.0857 1756 1879 1099 1004
Logging int value using MessageBuffer, pattern: %m%n/threads:4 -0.1047 -0.0368 740 662 1744 1680
Logging int+float using MessageBuffer, pattern: %m%n -0.0856 -0.2073 3535 3233 2288 1814
Logging int+float using MessageBuffer, pattern: %m%n/threads:4 -0.0242 -0.0556 1387 1354 3139 2965
Logging int value using MessageBuffer, pattern: [%d] %m%n -0.0155 -0.2530 1868 1839 1144 854
Logging int value using MessageBuffer, pattern: [%d] [%c] [%p] %m%n -0.1486 -0.1360 1876 1597 1308 1130
Logging 49 char string using FMT, pattern: %m%n -0.2258 -0.3268 796 617 572 385
Logging 49 char string using FMT, pattern: %m%n/threads:4 -0.2812 -0.2012 489 352 1135 907
Logging int value using FMT, pattern: %m%n -0.1590 -0.3030 712 599 460 321
Logging int value using FMT, pattern: %m%n/threads:4 -0.2876 -0.1461 458 326 1062 907
Logging int+float using FMT, pattern: %m%n -0.1087 +0.0263 1132 1009 663 680
Logging int+float using FMT, pattern: %m%n/threads:4 -0.1788 -0.2244 544 447 1662 1289
Async, int value using MessageBuffer, pattern: %m%n +0.0425 -0.0427 1824 1902 1224 1172
Async, int value using MessageBuffer, pattern: %m%n/threads:4 -0.0787 -0.2361 745 686 1883 1439

swebb2066 avatar Feb 10 '24 06:02 swebb2066

On Ubuntu gcc 11, the benchmark comparisons using a lock (old) and without locking (new) in AppenderAttachableImpl::appendLoopOnAppenders are:

Benchmark Time CPU Time Old Time New CPU Old CPU New
Testing disabled logging request -0.0370 -0.0365 0 0 0 0
Testing disabled logging request/threads:4 -0.2354 -0.2353 0 0 1 1
Logging 5 char string using MessageBuffer, pattern: %m%n -0.2278 -0.2279 311 240 311 240
Logging 5 char string using MessageBuffer, pattern: %m%n/threads:4 -0.3315 -0.3237 553 370 2172 1469
Logging 49 char string using MessageBuffer, pattern: %m%n -0.1668 -0.1668 318 265 318 265
Logging 49 char string using MessageBuffer, pattern: %m%n/threads:4 -0.3456 -0.3381 575 376 2262 1497
Logging int value using MessageBuffer, pattern: %m%n -0.1342 -0.1342 489 423 489 423
Logging int value using MessageBuffer, pattern: %m%n/threads:4 -0.4666 -0.4631 593 316 2345 1259
Logging int+float using MessageBuffer, pattern: %m%n -0.0736 -0.0736 941 872 941 872
Logging int+float using MessageBuffer, pattern: %m%n/threads:4 -0.3367 -0.3335 754 500 2997 1997
Logging int value using MessageBuffer, pattern: [%d] %m%n -0.2144 -0.2143 627 492 627 492
Logging int value using MessageBuffer, pattern: [%d] [%c] [%p] %m%n -0.2166 -0.2165 629 493 629 493
Logging 49 char string using FMT, pattern: %m%n -0.2071 -0.2071 293 232 293 232
Logging 49 char string using FMT, pattern: %m%n/threads:4 -0.4621 -0.4589 537 289 2114 1144
Logging int value using FMT, pattern: %m%n -0.1490 -0.1489 315 268 315 268
Logging int value using FMT, pattern: %m%n/threads:4 -0.3587 -0.3562 548 351 2162 1392
Logging int+float using FMT, pattern: %m%n -0.1278 -0.1278 468 408 468 408
Logging int+float using FMT, pattern: %m%n/threads:4 -0.1714 -0.1653 429 356 1700 1419
Async, int value using MessageBuffer, pattern: %m%n -0.1403 -0.1403 493 424 493 424
Async, int value using MessageBuffer, pattern: %m%n/threads:4 -0.4647 -0.4598 680 364 2683 1449

swebb2066 avatar Feb 11 '24 00:02 swebb2066