Skip to content

Latest commit

 

History

History
66 lines (49 loc) · 3.11 KB

README.md

File metadata and controls

66 lines (49 loc) · 3.11 KB

Use async logger

示例构成

  • :example: 典型的异步日志初始化样例,同时进行简单的性能演示

性能演示

单线程低频

  • qps: 10000
  • concurrency: 1
  • file: /dev/null
AMD EPYC 7W83 64-Core Processor latency cpu
spdlog [1419,1516,2070,5969] 0.105
brpc [1437,1555,2071,6130] 0.124
babylon [982,1002,1428,4017] 0.065

单线程吞吐

  • concurrency: 1
  • file: /dev/null
AMD EPYC 7W83 64-Core Processor max qps latency cpu
spdlog 2.07M [458,597,1074,1327] 1.99
brpc 0.53M [349,363,435,1614] 1.21
babylon 1.58M [560,575,892,1401] 1.07

spdlog和brpc都将全部或部分header格式化拆解到了异步线程执行,『单线程』极限吞吐场景可以通过分拆负载到消费线程提升综合吞吐,其中

  • brpc分拆更极限,可以取得最低的提交延迟,但是相对地消费线程负载过重,极限吞吐量相对较低
  • spdlog分拆相对均衡,可以更充分利用消费者提升单线程整体吞吐
  • babylon的格式化放在了生产端,但是整体使用了性能更好的实现,吞吐相比spdlog有小幅降低,但是单位日志的cpu开销显著节省

多线程低频

  • qps: 70000
  • concurrency: 7
  • file: /dev/null
AMD EPYC 7W83 64-Core Processor latency cpu
spdlog [1944,2290,4380,9876] 0.732
brpc [1706,1941,3582,7986] 0.818
babylon [1718,1791,2075,8011] 0.538

多线程吞吐

  • concurrency: 7
  • file: /dev/null
AMD EPYC 7W83 64-Core Processor max qps latency cpu
spdlog 1.41M [958,1206,4481,9771] 1.92
spdlog* 0.41M [23405,36043,111814,469699] 2.63
brpc 0.56M [311,329,436,820] 1.16
brpc* 0.67M [15066,21831,44584,71316] 5.56
babylon 5.58M [1225,1268,1508,8881] 7.28

* 生产端最大速率运行 spdlog和brpc都将全部或部分header格式化拆解到了异步线程执行,『多线程』极限吞吐相应受限

  • spdlog多线程吞吐低于单线程,主要由于前端竞争提升后反而限制了整体吞吐
  • brpc方案会更快达到消费者瓶颈,打满会降级到前端直接打印文件,但因为会显著增大竞争,对吞吐的提升有限
  • babylon消费端开销很低,即使生产端最大速率运行也可以支持不会产生退化,吞吐能力更高,单位日志cpu消耗也能够保持较低水平