NAS からファイルを読み取り、ソケット経由で送信するサーバーを作成したいと考えています。これを行う最速の方法は何ですか?
ありがとう!
標準の CIFS マウントがファイルをサポートしていると思いますmmap(2)
(正しく読めば、direct
モードはオフになっているはずです)。
もしそうなら、あなたの最速のオプションは、おそらくopen(2)
通常どおりsendfile(2)
ファイルに送信し、UDP ソケット経由でファイル データを送信するために使用することです。(sendfile(2)
常に保証されているわけではありませんが、ファイルをマップ可能にする必要がありますが、カーネル内の CIFS クライアント コード ( fs/cifs/file.c:cifs_file_strict_mmap()
) は をサポートしているようmmap(2)
です。)
Pat Patterson は、sendfile(2)
vswrite(2)
で 8% のスピードアップを報告しています。しかし、それが機能する場合は、AIO 操作を自分で処理する手間を省くことができます。カーネルは、ファイルからメモリ ページを要求し、ソケット バッファが許可するときにソケットを介してそれらを送信し、できればアプリケーション コードを許可します。短くて甘いこと。
両側のネットワーク インターフェイスが 1Gbit イーサネットまたはそれより遅いと仮定して、好きなことをしてください。あなたのマシンはそれらを満たすことができます。