プロフィール

kosaki

Author:kosaki
連絡先はコチラ

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

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

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


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

read で読み出すのと mmap で叩いていくのとどちらが速いか このエントリーをはてなブックマークに追加

g新部さんのブログより

ユーザ空間のアドレスにアクセスするところ、例えば read(2) から copy_to_user で書かれますが、これって copy が起こるから遅いような気がします?

mmap したアドレスを deref して page fault から page cache にあるのを張り付けて TLB に load してもらうほうが速そうな感じもしますか。

でも、素直に copy の方が速いかもしれないです。同一のバッファでアドレスを使いまわして TLB miss を起こさないようにして回すとすると。

mmap でやっていくとページごとに起こる TLB miss の処理のオーバヘッドが馬鹿にならなくなるでしょう。



むーん、これはちょっと違うのでは。
readでユーザ空間では同一バッファを使いまわしても、カーネルの読み先のページキャッシュはどんどんTLB missするわけで、そこに優劣は生じない。

だからコピーの分だけ mmapが勝つはず。

とゆーか、オイラの知ってるシステムでは組み込みでもサーバーでもmmapが勝つ。
mmapが負けるケースを教えてほしいっす(と、結論を人まかせにする為にトラックバックしてみる)


関連記事


linux | 【2006-04-07(Fri) 13:26:23】 | Trackback:(0) | Comments:(6)
コメント

先日の件でも同様の話がありましたが、アーキテクチャによっては、というかx86以外では、カーネル空間のアドレスはTLBを経由せずに固定的に決まり、TLB miss がカーネル空間のメモりアクセスで起きることはない、のです。
2006-04-07 金 00:57:06 | URL | gniibe #- [ 編集]
すいません。トリ頭で。

わざわざ教えていただいたのにすっかり忘れておりましたぁぁぁ(><

精進します。
2006-04-07 金 01:19:56 | URL | 管理人 #- [ 編集]

でもまあデータサイズがページサイズより小さいとページの張りかえってわけにはいきませんよね。
NetBSD の VM は、その設計目標の一つに、ページの張りかえ処理を容易にするってことがあったんですが、その論文によると、4KB (ページサイズ) から、場合によっては 8KB くらい (ページサイズの倍) くらいまでは、copy の方が速いこともあったみたいです。どこら辺に境界があるかは、たとえ同じアーキテクチャでも CPU やメモリシステムの世代によって、いろいろ結果が変わるとは思いますが。
http://citeseer.ifi.unizh.ch/cranor98design.html の 206ページぐらいから載ってます。
2006-04-08 土 09:30:12 | URL | soda #- [ 編集]

む、UVMですか。。
今は無理ですが、今度ちゃんと読みます。

ご指導ありがとうございます。
2006-04-09 日 08:51:41 | URL | 管理人 #- [ 編集]
このコメントは管理人のみ閲覧できます
2007-09-01 土 17:07:19 | | # [ 編集]
このコメントは管理人のみ閲覧できます
2007-09-03 月 16:03:31 | | # [ 編集]
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。