2007年4月18日

[Namazu-devel-ja 1573] Re: hash の負荷軽減

寺西です。

約2,000の文書のインデックス作成時間を測定しました。

1) 測定マシン

約1万の文書のインデックス作成に使用したものと同じ


2) 測定データ
http://www.namazu.org/ml.html#archive の以下のファイル

namazu-win32-users-ja 2,242通

 メディアタイプは message/rfc822


3) 測定条件

a) $ON_MEMORY_SIZE を標準(5000000), 10倍, 1/10, 1/100 のそれぞれ
b) Namazu 2.0.17(SA), 修正(SE) のそれぞれ


4) 修正内容

約1万の文書のインデックス作成に使用したものと同じ


5) 結果

・結果(A)

$ON_MEMORY_MAX|インデックス| SA-2 SE-2
|書き出し回数|
--------------+------------+--------------
50000000 | 1 | 0.911 0.738
5000000 | 2 | 1.000 0.776
500000 | 15 | 1.426 1.154
50000 | 137 | 4.939 4.266

- ただし、Namazu 2.0.17(SA) で $ON_MEMORY_MAX 5000000 の処理時間を
1.000 として比較


・結果(B)

$ON_MEMORY_MAX|インデックス  | SA-2 SE-2
|書き出し回数 の倍率| 対SA 対SE
--------------+-------------------+--------------
50000000 | 1 / 1 = 1.000 | 0.201 0.205
5000000 | 2 / 7 = 0.286 | 0.222 0.212
500000 | 15 / 65 = 0.231 | 0.145 0.167
50000 | 137 / 613 = 0.224 | 0.106 0.114

- $ON_MEMORY_MAX, プログラムが同じもので、前回の約1万件の文書の
処理時間と今回の処理時間を比較
- $ON_MEMORY_MAX が同じで、文書数が減っているので今回の方がインデッ
クス書き出し回数が少ない
- データサイズの比較: 2,242 / 10,259 = 0.219


6) 考察

文書数約2,000件でも SE の修正により、インデックス書き出し回数
1回の場合は約19.1%高速化しています。インデックス書き出し回数137回
の場合でも約13.6%高速化しています。標準では約22.4%高速化しています。
約2,000件程度でも効果があることがわかります。

結果(B)から、前回よりデータサイズが約21.9%の場合、インデックス書き
出し回数もほぼ同等の約22.4%となっています。しかし、処理時間は SA, SE
のどちらも約11%となっており、インデックス書き出しの負荷が非常に高い
ことが分かります。

 前回の結果と今回の結果から、インデックス書き出し回数は多くても
10〜数十回程度に抑えていないと、処理速度が数倍〜0倍ぐらいかかること
になるということがわかります。
$ON_MEMORY_MAX の大まかな値を算出する方法としては、インデックス書き
出し回数をN回とすると、

$ON_MEMORY_MAX = 全文書のファイルサイズ合計 / N

で求まります。(ただし、非常に大きなサイズのファイル等が含まれていると
誤差が大きくなります。)
N は10までぐらいの値が良いかと思います。$ON_MEMORY_MAX は主メモリ
より大きな値であっても何ら問題ありません。あくまでもファイルサイズ
を基準とするパラメータです。しかし、処理する文書数が増えれば内部消費
メモリも増えるため、そちらでメモリの上限に引っかかる場合があります。
その場合は処理が遅くなることを覚悟して N の値を増やしてください。

デフォルトは 5000000 なので、N = 10 とすると、約47MB の文書が限界
ということになります。内部消費メモリの大きさはここから推測することは
難しいのですが、おそらく主メモリ64MBで処理できる範囲でしょう。

HTML,PDF,Word 等のファイル形式では抽出したテキストデータのサイズが
ファイルサイズより随分と小さい場合があります。この場合は、同じ
$ON_MEMORY_MAX であっても内部消費メモリは小さくなるでしょう。
言い換えれば内部消費メモリが少ないのにも関わらずインデックス書き出し
を行うので、処理速度の低下をまねきます。
 もっとも同じような測定をHTMLやPDFでも行ってから評価をするが良いの
ですが、適当なデータがないので...。


7) 測定データ

[SA1-2] 修正前 インデックス書き出し2回

Total Elapsed Time = 279.7437 Seconds
User+System Time = 166.8537 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
17.8 29.81 29.016 401808 0.0001 0.0001 mknmz::hash
13.5 22.55 22.533 13454 0.0017 0.0017 mknmz::wordcount_sub
9.38 15.65 44.378 2242 0.0070 0.0198 mknmz::make_phrase_hash
6.35 10.59 46.941 2242 0.0047 0.0209 mknmz::count_words
5.04 8.408 8.263 73708 0.0001 0.0001 Text::Kakasi::xs_do_kakasi
3.69 6.149 6.146 2242 0.0027 0.0027
File::MMagic::checktype_data
3.65 6.091 21.780 2242 0.0027 0.0097 mknmz::put_field_index
2.80 4.668 4.686 2242 0.0021 0.0021
mailnews::mailnews_citation_filter
2.76 4.602 6.873 2 2.3008 3.4364 mknmz::write_index_sub
2.75 4.582 7.633 2 2.2909 3.8167
mknmz::write_phrase_hash_sub
2.68 4.469 4.461 4540 0.0010 0.0010 NKF::nkf
2.39 3.989 3.869 60700 0.0001 0.0001 IO::File::open
2.26 3.769 3.833 2242 0.0017 0.0017 mailnews::mailnews_filter
2.22 3.699 3.696 2242 0.0016 0.0016 mailnews::uuencode_filter
2.04 3.409 3.401 4484 0.0008 0.0008 gfilter::line_adjust_filter


[SA2-2] 修正前 インデックス書き出し1回

Total Elapsed Time = 250.5934 Seconds
User+System Time = 152.0534 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
19.3 29.34 28.345 401808 0.0001 0.0001 mknmz::hash
14.3 21.82 21.796 13454 0.0016 0.0016 mknmz::wordcount_sub
9.83 14.94 42.915 2242 0.0067 0.0191 mknmz::make_phrase_hash
6.99 10.62 46.111 2242 0.0047 0.0206 mknmz::count_words
5.45 8.288 8.106 73708 0.0001 0.0001 Text::Kakasi::xs_do_kakasi
3.99 6.068 6.064 2242 0.0027 0.0027
File::MMagic::checktype_data
3.84 5.846 21.440 2242 0.0026 0.0096 mknmz::put_field_index
3.28 4.987 4.973 2242 0.0022 0.0022
mailnews::mailnews_citation_filter
2.87 4.369 4.359 4540 0.0010 0.0010 NKF::nkf
2.73 4.149 3.998 60690 0.0001 0.0001 IO::File::open
2.59 3.939 4.041 2242 0.0018 0.0018 mailnews::mailnews_filter
2.32 3.529 3.524 2242 0.0016 0.0016 mailnews::uuencode_filter
2.31 3.509 3.499 4484 0.0008 0.0008 gfilter::line_adjust_filter
1.87 2.849 5.135 60671 0.0000 0.0001 util::fclose
1.80 2.739 2.588 60677 0.0000 0.0000 IO::Handle::close


[SA3-2] 修正前 インデックス書き出し15回

Total Elapsed Time = 241.5477 Seconds
User+System Time = 237.9477 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
14.0 33.48 53.407 15 2.2326 3.5604
mknmz::write_phrase_hash_sub
12.3 29.30 28.305 401808 0.0001 0.0001 mknmz::hash
9.38 22.32 43.091 15 1.4884 2.8727 mknmz::write_index_sub
9.26 22.03 22.006 13454 0.0016 0.0016 mknmz::wordcount_sub
9.24 21.98 19.380 104400 0.0000 0.0000 mknmz::readw
7.08 16.85 16.434 170415 0.0001 0.0001 mknmz::get_last_docid
6.50 15.47 43.415 2242 0.0069 0.0194 mknmz::make_phrase_hash
4.21 10.00 45.861 2242 0.0045 0.0205 mknmz::count_words
3.66 8.718 8.536 73708 0.0001 0.0001 Text::Kakasi::xs_do_kakasi
2.57 6.125 21.150 2242 0.0027 0.0094 mknmz::put_field_index
2.52 6.008 6.004 2242 0.0027 0.0027
File::MMagic::checktype_data
2.20 5.229 4.804 170415 0.0000 0.0000 mknmz::adjust_first_docid
2.11 5.017 5.033 2242 0.0022 0.0022
mailnews::mailnews_citation_filter
1.75 4.169 4.018 60830 0.0001 0.0001 IO::File::open
1.71 4.069 4.151 2242 0.0018 0.0019 mailnews::mailnews_filter


[SA4-2] 修正前 インデックス書き出し137回

Total Elapsed Time = 837.1187 Seconds
User+System Time = 824.1587 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
34.4 283.7 406.06 137 2.0712 2.9639
mknmz::write_phrase_hash_sub
25.2 208.4 183.67 991804 0.0000 0.0000 mknmz::readw
22.0 181.8 322.06 137 1.3276 2.3509 mknmz::write_index_sub
8.54 70.42 69.626 325367 0.0002 0.0002 mknmz::get_last_docid
3.57 29.38 28.385 401808 0.0001 0.0001 mknmz::hash
2.71 22.35 22.326 13454 0.0017 0.0017 mknmz::wordcount_sub
1.86 15.33 43.345 2242 0.0068 0.0193 mknmz::make_phrase_hash
1.25 10.26 45.981 2242 0.0046 0.0205 mknmz::count_words
1.17 9.608 8.797 325367 0.0000 0.0000 mknmz::adjust_first_docid
1.00 8.228 8.046 73708 0.0001 0.0001 Text::Kakasi::xs_do_kakasi
0.73 6.031 21.580 2242 0.0027 0.0096 mknmz::put_field_index
0.70 5.789 5.784 2242 0.0026 0.0026
File::MMagic::checktype_data
0.58 4.747 4.763 2242 0.0021 0.0021
mailnews::mailnews_citation_filter
0.52 4.299 4.145 62050 0.0001 0.0001 IO::File::open
0.52 4.289 4.401 2242 0.0019 0.0020 mailnews::mailnews_filter


[SE1-2] 修正後 インデックス書き出し2回

Total Elapsed Time = 136.9884 Seconds
User+System Time = 129.4084 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
11.6 15.11 24.555 2242 0.0067 0.0110 mknmz::make_phrase_hash
10.3 13.37 13.346 13454 0.0010 0.0010 mknmz::wordcount_sub
8.37 10.83 9.785 421769 0.0000 0.0000 mknmz::hash
7.97 10.31 37.331 2242 0.0046 0.0167 mknmz::count_words
6.64 8.588 8.406 73708 0.0001 0.0001 Text::Kakasi::xs_do_kakasi
4.99 6.458 6.454 2242 0.0029 0.0029
File::MMagic::checktype_data
4.70 6.077 20.960 2242 0.0027 0.0093 mknmz::put_field_index
3.64 4.708 4.703 2242 0.0021 0.0021
mailnews::mailnews_citation_filter
3.16 4.086 4.901 2 2.0429 2.4506 mknmz::write_index_sub
3.06 3.959 3.949 4540 0.0009 0.0009 NKF::nkf
3.01 3.889 4.011 2242 0.0017 0.0018 mailnews::mailnews_filter
2.96 3.833 4.876 2 1.9165 2.4378
mknmz::write_phrase_hash_sub
2.81 3.639 3.629 4484 0.0008 0.0008 gfilter::line_adjust_filter
2.70 3.499 3.494 2242 0.0016 0.0016 mailnews::uuencode_filter
2.62 3.389 3.238 60700 0.0001 0.0001 IO::File::open


[SE2-2] 修正後 インデックス書き出し1回

Total Elapsed Time = 153.4538 Seconds
User+System Time = 123.0638 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
12.4 15.36 24.205 2242 0.0069 0.0108 mknmz::make_phrase_hash
10.5 13.03 13.006 13454 0.0010 0.0010 mknmz::wordcount_sub
8.32 10.23 37.091 2242 0.0046 0.0165 mknmz::count_words
8.31 10.22 9.175 421769 0.0000 0.0000 mknmz::hash
7.06 8.688 8.506 73708 0.0001 0.0001 Text::Kakasi::xs_do_kakasi
5.15 6.338 6.334 2242 0.0028 0.0028
File::MMagic::checktype_data
4.73 5.827 21.130 2242 0.0026 0.0094 mknmz::put_field_index
3.86 4.748 4.743 2242 0.0021 0.0021
mailnews::mailnews_citation_filter
3.18 3.909 4.021 2242 0.0017 0.0018 mailnews::mailnews_filter
3.13 3.849 3.839 4540 0.0008 0.0008 NKF::nkf
3.10 3.819 3.814 2242 0.0017 0.0017 mailnews::uuencode_filter
2.86 3.519 3.368 60690 0.0001 0.0001 IO::File::open
2.75 3.389 3.379 4484 0.0008 0.0008 gfilter::line_adjust_filter
2.31 2.839 5.661 60690 0.0000 0.0001 IO::File::new
2.30 2.829 2.824 2242 0.0013 0.0013
File::MMagic::checktype_byfilename


[SE3-2] 修正後 インデックス書き出し15回

Total Elapsed Time = 196.3853 Seconds
User+System Time = 192.6253 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
16.3 31.54 42.714 15 2.1028 2.8476
mknmz::write_phrase_hash_sub
11.5 22.22 20.142 104400 0.0000 0.0000 mknmz::readw
11.2 21.67 30.684 15 1.4452 2.0456 mknmz::write_index_sub
7.99 15.39 25.278 2242 0.0069 0.0113 mknmz::make_phrase_hash
6.85 13.18 13.163 13454 0.0010 0.0010 mknmz::wordcount_sub
5.71 11.00 10.166 421769 0.0000 0.0000 mknmz::hash
5.50 10.60 37.251 2242 0.0047 0.0166 mknmz::count_words
4.29 8.258 8.113 73708 0.0001 0.0001 Text::Kakasi::xs_do_kakasi
3.20 6.159 6.156 2242 0.0027 0.0027
File::MMagic::checktype_data
3.17 6.105 21.660 2242 0.0027 0.0097 mknmz::put_field_index
2.44 4.708 4.706 2242 0.0021 0.0021
mailnews::mailnews_citation_filter
2.10 4.039 4.031 4540 0.0009 0.0009 NKF::nkf
2.03 3.919 3.798 60830 0.0001 0.0001 IO::File::open
2.01 3.869 3.983 2242 0.0017 0.0018 mailnews::mailnews_filter
1.96 3.779 3.776 2242 0.0017 0.0017 mailnews::uuencode_filter


[SE4-2] 修正後 インデックス書き出し137回

Total Elapsed Time = 739.9768 Seconds
User+System Time = 711.7768 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
39.1 278.9 380.27 137 2.0359 2.7757
mknmz::write_phrase_hash_sub
29.2 208.0 183.35 991804 0.0000 0.0000 mknmz::readw
24.9 177.6 260.06 137 1.2966 1.8983 mknmz::write_index_sub
2.23 15.85 25.025 2242 0.0071 0.0112 mknmz::make_phrase_hash
1.89 13.45 13.426 13454 0.0010 0.0010 mknmz::wordcount_sub
1.48 10.54 9.495 421769 0.0000 0.0000 mknmz::hash
1.48 10.52 37.401 2242 0.0047 0.0167 mknmz::count_words
1.23 8.738 8.556 73708 0.0001 0.0001 Text::Kakasi::xs_do_kakasi
0.86 6.128 6.124 2242 0.0027 0.0027
File::MMagic::checktype_data
0.81 5.769 20.940 2242 0.0026 0.0093 mknmz::put_field_index
0.66 4.688 4.673 2242 0.0021 0.0021
mailnews::mailnews_citation_filter
0.61 4.309 4.299 4540 0.0009 0.0009 NKF::nkf
0.57 4.049 3.895 62050 0.0001 0.0001 IO::File::open
0.55 3.889 3.981 2242 0.0017 0.0018 mailnews::mailnews_filter
0.51 3.659 3.654 2242 0.0016 0.0016 mailnews::uuencode_filter
--
=====================================================================
寺西 忠勝(TADAMASA TERANISHI) yw3t-trns@xxxxx
http://www.asahi-net.or.jp/~yw3t-trns/index.htm
Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E

_______________________________________________
Namazu-devel-ja mailing list
Namazu-devel-ja@xxxxx
http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-devel-ja

投稿者 xml-rpc : 2007年4月18日 11:39
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/57446
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。