ログモジュールのベンチマーク
主要なモジュールでベンチマーク取ってみました。
単純にファイル出力するだけの使い方にしてみました。出力フォーマットも統一しています。
- Log::Dispatch
- Log::Handler
- Log4perl
- Log::Minimal
バージョン
perl | 5.14.1 |
Log::Dispatch | 2.29 |
Log::Handler | 0.71 |
Log::Log4perl | 1.33 |
Log::Minimal | 0.08 |
実行結果(その1)
% perl bench_log.pl 30000 Benchmark: timing 30000 iterations of log4perl, log_dispatch, log_handler, log_minimal... log4perl: 2 wallclock secs ( 1.87 usr + 0.19 sys = 2.06 CPU) @ 14563.11/s (n=30000) log_dispatch: 4 wallclock secs ( 3.67 usr + 0.21 sys = 3.88 CPU) @ 7731.96/s (n=30000) log_handler: 1 wallclock secs ( 0.85 usr + 0.44 sys = 1.29 CPU) @ 23255.81/s (n=30000) log_minimal: 1 wallclock secs ( 0.69 usr + 0.17 sys = 0.86 CPU) @ 34883.72/s (n=30000) Rate log_dispatch log4perl log_handler log_minimal log_dispatch 7732/s -- -47% -67% -78% log4perl 14563/s 88% -- -37% -58% log_handler 23256/s 201% 60% -- -33% log_minimal 34884/s 351% 140% 50% --
Log::Dispatchが遅い…
中見てみたらParams::Validate使ってたので無効にしたベンチマークも取ってみる。↓
実行結果(その2:Validate無効)
% PERL_NO_VALIDATION=1 perl bench_log.pl 30000 Benchmark: timing 30000 iterations of log4perl, log_dispatch, log_handler, log_minimal... log4perl: 2 wallclock secs ( 1.88 usr + 0.19 sys = 2.07 CPU) @ 14492.75/s (n=30000) log_dispatch: 2 wallclock secs ( 2.55 usr + 0.19 sys = 2.74 CPU) @ 10948.91/s (n=30000) log_handler: 2 wallclock secs ( 0.85 usr + 0.42 sys = 1.27 CPU) @ 23622.05/s (n=30000) log_minimal: 1 wallclock secs ( 0.69 usr + 0.17 sys = 0.86 CPU) @ 34883.72/s (n=30000) Rate log_dispatch log4perl log_handler log_minimal log_dispatch 10949/s -- -24% -54% -69% log4perl 14493/s 32% -- -39% -58% log_handler 23622/s 116% 63% -- -32% log_minimal 34884/s 219% 141% 48% --
そんなに変わらなかった。
汎用性も考慮するとやはりcpan本でも薦められているLog::Handlerが良さげなのかな