Hiro Yoshioka
hyosh****@mirac*****
2006年 5月 30日 (火) 09:34:37 JST
よしおかです。 > 木村です。 おはよーございます。 > 初投稿がこれというのもなんなのだろうかと思いますが(^^; いえいえ、ようこそいらっしゃいました。 > Hiro Yoshioka さんは書きました (2006/05/29 23:48): > > > それよか、びっくりしたのはgrepが異様に遅いのですが > > LANG=ja_JP.UTF-8 だといけないみたいで、 > > > > $ time egrep '^From:' /tmp/le.txt|wc > > 258 1521 12538 > > > > real 0m32.285s > > user 0m32.376s > > sys 0m0.024s > > $ time LANG=C egrep '^From:' /tmp/le.txt|wc > > 258 1521 12538 > > > > real 0m0.156s > > user 0m0.151s > > sys 0m0.005s > > > > 200倍違うんですけど、そーゆーもんなんすか?>grep > > GNU grep でしょうか? だとしたらそういうものです。 やっぱり、そういうものなんですか。 > たびたび「バグだろう」とレポートされている代物です。 > > 日本語環境でなくても、en_US.UTF-8 とか de_DE とかでも > なります。以前profileとって少し調べたのですが、wchar_tへの > 変換もそうですが、動的にDFAを生成しているのが(マルチバイト文字 > 対応ルーチンのときに)かなり重いみたいです。 oprofileしてみますた。 LANG=ja_JP.UTF-8 の場合 # head /tmp/grep_op_l1.txt CPU: P4 / Xeon with 2 hyper-threads, speed 3200.6 MHz (estimated) Counted GLOBAL_POWER_EVENTS events (time during which processor is not stopped) with a unit mask of 0x01 (mandatory) count 10000 samples % app name symbol name 8793343 28.8152 libc-2.3.4.so __gconv_transform_utf8_internal 5348911 17.5281 oprofiled (no symbols) 4036581 13.2276 libc-2.3.4.so mbrtowc 1697574 5.5628 libc-2.3.4.so _IO_vfscanf 1015466 3.3276 oprofile (no symbols) 609007 1.9957 libc-2.3.4.so __i686.get_pc_thunk.bx 529516 1.7352 libc-2.3.4.so memmove LANG=Cの場合は以下のとおり # head /tmp/grep_op_lC.txt CPU: P4 / Xeon with 2 hyper-threads, speed 3200.6 MHz (estimated) Counted GLOBAL_POWER_EVENTS events (time during which processor is not stopped) with a unit mask of 0x01 (mandatory) count 10000 samples % app name symbol name 327913 14.1844 oprofiled (no symbols) 184812 7.9943 libc-2.3.4.so __gconv_transform_utf8_internal 141363 6.1149 libc-2.3.4.so memmove 138621 5.9963 bash (no symbols) 137707 5.9567 oprofile (no symbols) 120875 5.2286 libc-2.3.4.so mbrtowc 119299 5.1605 libc-2.3.4.so _IO_vfscanf うーむ、いかんですね。 よ -- Hiro Yoshioka CTO/Miracle Linux Corporation http://blog.miraclelinux.com/yume/