プロフィール

kosaki

Author:kosaki
連絡先はコチラ

ブログ検索
最近の記事
最近のコメント
最近のトラックバック
リンク
カテゴリー
月別アーカイブ
RSSフィード
FC2ブログランキング

スポンサーサイト このエントリーをはてなブックマークに追加

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)

perlで大きなファイルをmmap使って読むと遅い このエントリーをはてなブックマークに追加

404 blog not foundさんのperl - PerlIO ":mmap" and other layersというエントリで

なんと、多くの場合、layerなしが一番速いのです。そして、:rawはおもいっきり遅い。

実は、layerなしの場合、*nixでは:perlioを指定したのと同じ事になります。そしてperlioでは、mmap的なことに加え、copy on writeの実装など、さらに高速化するための工夫が盛り込まれています。

しかしこれほどの差があるとはなあ....デフォルトが一番というのはあまり驚かなかったけど、rawがこれほど遅いとは。



なんて結論になっていて、僕が無責任に調べもせずに

普通に考えたらあるスレショウルド(ページサイズのN倍)を越えたあたりからmmap独走状態になりそうなのに、なぜか64MBだけ負けてるじゃん。
って読み方でいいのかしら?
perlioがどうやってOSを叩いてるのかは知りませんが、何かより下位のレイヤで最適化がされてそうに見えますね。



なんてコメントつけてたんですが、あんまり人任せもよくないので自分でstrace確認してみた。

どうやらこのベンチマークはread性能を測るベンチのようで
(そんな事も知らずにコメントしてたのか! とか言わないで~)

素直に

nolayer: read(4K)連呼
mmap: mmap一回

になっておりますなぁ・・


で、今回の測定方法の場合、64Mだとキャッシュに乗り切るのでディスクI/Oはまったく発生していないと思ってよい。
(ありもののファイルを使うのではなく、read対象ファイルをプログラム先頭で動的に作っているのでその過程で絶対キャッシュに乗る)


で、このベンチマーク、アウトプットにかかった時間の内訳が出るのだが

[mkosaki@centos perlio_bench]$ perl perlio_bench.pl
#### Testing for 65536 KB Read
Benchmark: running mmap, nolayer for at least 3 CPU seconds...
mmap: 4 wallclock secs ( 2.82 usr + 0.37 sys = 3.19 CPU) @ 0.63/s (n=2)
(warning: too few iterations for a reliable count)
nolayer: 4 wallclock secs ( 2.73 usr + 0.39 sys = 3.12 CPU) @ 0.64/s (n=2)
(warning: too few iterations for a reliable count)
s/iter mmap nolayer
mmap 1.60 -- -2%
nolayer 1.56 2% --
[mkosaki@centos perlio_bench]$


むう、mmapのほうがユーザー空間で若干遅いというのは当然でreadはreadから帰ってきたら終わりだが、mmapはそのあとperl側でループまわしてreadしなならんかならな。

あとはlinuxのreadシステムコールがCOWしてる場所を探せば調査完了。
なのだが、今日はもう眠いのでここらで寝る。ごめん



関連記事


linux | 【2006-05-06(Sat) 03:33:20】 | Trackback:(0) | Comments:(1)
コメント
このコメントは管理人のみ閲覧できます
2007-12-20 木 15:54:50 | | # [ 編集]
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。