Apacheログのパーサを書いてて気付いたので。
どれくらい解析プログラムにやさしくなるかというと、これくらい。
Benchmark: running rx_naive, rx_optim, tsv for at least 3 CPU seconds... rx_naive: 3 wallclock secs ( 3.15 usr + 0.00 sys = 3.15 CPU) @ 2417.71/s (n=7612) rx_optim: 3 wallclock secs ( 3.78 usr + 0.00 sys = 3.78 CPU) @ 78526.94/s (n=296930) tsv: 4 wallclock secs ( 3.02 usr + 0.00 sys = 3.02 CPU) @ 646447.96/s (n=1954495) Rate rx_naive rx_optim tsv rx_naive 2418/s -- -97% -100% rx_optim 78527/s 3148% -- -88% tsv 646448/s 26638% 723% --404 Blog Not Found:tips - ApacheのLogフォーマットの方を変えて高速化
へーと思って自分のパーサとの比較をやってたら気付いた。引用元のベンチマークスクリプトは tsv の処理対象が $logline になってるせいで、実際には全く分割が行われてなくって意味のない処理になってる。
ということで直して試してみた。直したもの(たった1行 $logline を $tsv に変えただけ)はこちら dankogaiスクリプト tsv の処理対象を $tsv に変えただけ
tagomoris$ perl benchmark2.pl Benchmark: running rx_naive, rx_optim, tsv for at least 3 CPU seconds... rx_naive: 3 wallclock secs ( 3.18 usr + 0.00 sys = 3.18 CPU) @ 5694.03/s (n=18107) rx_optim: 3 wallclock secs ( 3.21 usr + 0.00 sys = 3.21 CPU) @ 127888.16/s (n=410521) tsv: 2 wallclock secs ( 3.15 usr + 0.00 sys = 3.15 CPU) @ 221973.97/s (n=699218) Rate rx_naive rx_optim tsv rx_naive 5694/s -- -96% -97% rx_optim 127888/s 2146% -- -42% tsv 221974/s 3798% 74% -- tagomoris$
2倍も速くない。ちょっと微妙。これだけのためにタブ区切りに変えるほどでもないような気がする。