2012-05-07 12 views
1

70から700GBの範囲の大きなファイルを書いています。メモリマップされたファイルがチャンクでの通常の書き込みよりも効率的であれば誰でも経験はありますか? コードはC++で実行され、Linux上で実行されます。大きなファイルをC++で書く

+3

あなたはどのようなシステムを実行していますか、700GBの_RAM_を持っていますか? –

+1

Linux 6.x?私はLinux 4と5を見逃しましたか? –

+1

@ X-Zero 700GBのRAMの要件はどこで手に入りましたか? – vcsjones

答えて

2

最初からファイルを書き込んでいる場合は、ファイルのメモリマッピングから何も得られません。

あなたは、他のパターンでファイルを作成している場合、質問を更新してください:)消費者向けドライブの

+0

メモリをマップすると、ユーザー空間からカーネルへのバッファコピーを避けることができます。 – Jimm

+0

バッファコピーはボトルネックではありません。 RAMの速度は、ハードディスクのシーケンシャル書き込み速度よりも大きさまたは2倍です。しかし、[this beast](http://www.anandtech.com/show/4879/ocz-zdrive-r4-cm88-16tb-pcie-ssd-review/3)は、2.5 GB /秒の連続シーケンシャル書き込み速度。 – hirschhornsalz

+0

@ Jimm:Ok。だから、あなたは良い基礎を持った仮説を持っています。マップされたメモリが特定のケースで役立つかどうかを知る唯一の方法は、特定の構成でテストすることです。また、ハンス・パッサントの分析を考えてみましょう。あなたのケースでソフトウェアを改善して得られるものはありますか?私たちは知ることができません。 –

2

典型的な持続的なハードドライブの転送速度は、太陽が輝くと、硬いそよ風秒あたり約60メガバイトですディスク・ドライブ・ヘッドがあまり頻繁に探索する必要がないように、断片化されていないファイル・システムである。

したがって、700ギガバイトの書き込みに要する時間の下限は、700 * 1024/60 = 11947秒または3時間20分です。バッファリングの量はそれを修正するものではなく、ディスク書込み速度とプロセッサが消火ホースを満たす能力との間の劇的な不一致によってすぐに圧倒される。あなたのコードやディスクドライブの状態の問題が、それよりも2〜3時間かかる場合にのみ、問題を探し始める。

+0

あなたは単一のドライブまたは特定のRAID構成を参照していますか? – Jimm

+0

60MB/sは非常に控えめです。ストリーミングデータの場合、これは300 MB/sの範囲に簡単に持ち上げることができます。私の格安raid0は 'dd 'で260 MB/sを管理します。最近エンタープライズSSDは1 GB/sに近づいています。 – hirschhornsalz

+0

これは確かに正当なコメントですが、OPは彼が持っているものを文書化していませんでした。ここでのポイントは、これがハードウェアの問題であるということです。彼は、特定のマシン能力だけでなく、誰にでも計算を適用することができます。そして、下限を設定して、何を期待するかを知ってください。 –

関連する問題