背景:性能特性
私は非常に大きく メモリ上の集中的なIOを行うJavaアプリケーションがファイル(> 500メガバイト)をマッピングしました。プログラムはデータの読み取り、データの書き込み、 を実行します。
すべての読み取り/書き込み関数は、同様の計算量を持っています。
は、私はプログラムのIO層をベンチマークし、メモリマップされたファイルの奇妙な 性能特性に気づい:
- それは90Kが(ランダムな位置に1キロバイトすべての反復を読む)
- それは38Kを行う第2あたりの読み込みを実行します
- 1秒あたり43kの書き込みを実行します(ランダムな位置で繰り返しごとに4バイトを書き込みます)。
- 1回の読み取り/書き込み結合操作は1回につき9KBです(ランダムな位置に12バイトを読み込み、繰り返しごとに1KBを書き込む)
64ビットJDK 1.7、Linux 3.4のプログラム。
このマシンは、CPUが8スレッドで、物理メモリが4 GBの通常のIntel PCです。ベンチマークを実行するときにはJVMヒープに1 GBしか割り当てられませんでした。読み取り、書き込み、/書き込み機能https://github.com/HouzuoGuo/Aurinko2/blob/master/src/test/scala/storage/Benchmark.scala
そして、ここでは上記の読み込みの実装です:より多くの詳細が必要な場合
、ここではベンチマークのコードであるhttps://github.com/HouzuoGuo/Aurinko2/blob/master/src/main/scala/aurinko2/storage/Collection.scala
だから私の質問は以下のとおりです。
- 固定ファイルサイズとメモリサイズが与えられた場合、メモリマップファイルランダム読み出しパフォーマンスにどのような要素が影響しますか?
- 固定ファイルサイズとメモリサイズを指定すると、メモリマップファイルランダム書き込みパフォーマンスにどのような要素が影響しますか?
- 読み取り/書き込み結合操作のベンチマーク結果はどのように説明しますか? (私はそれが毎秒20K回の繰り返しを実行することを期待していた)。
ありがとうございます。
1.ファイルのマッピング方法のコードを表示します。 2.システムの負荷を確認しましたか?iostat、いつものように? – bmargulies
ありがとうbmargulies。最新の編集を参照してください。 –