出力速度をハードディスクの書き込み速度より高くするにはどうすればよいですか?
更新 1 : 以下を変更しました。
ウイルス対策をオフにしました。変化なし。
新しい物理ディスクを挿入し、最初のパーティションをテストに使用しました。(最初のテスト用のディスクは、システム パーティションとは別の最後のパーティションにありましたが、同じ物理ディスク上にありました。) 結果: 同じ周期パターンがありますが、テスト中にシステムが応答しなくなることはありません。書き込み速度はいくらか速くなります (最初のパーティションを使用するか、システム パーティションとの干渉がなくなったためと考えられます)。暫定的な結論: システム パーティションから何らかの干渉がありました。
64 ビット Perl をインストールしました。サイクルはなくなり、すべてが 2 秒のタイムスケールで安定しています。シングル コアで 55% の CPU、書き込み速度は約 65 MB/秒です。
元のドライブで 64 ビット Perl を試しました。結果:その中間。8 秒のサイクル、CPU 20 ~ 50%、35 ~ 65 MB/秒 (0 ~ 100%、0 ~ 120 MB/秒のディープ サイクルの代わりに)。システムはわずかに反応しません。書き込み速度は50MB/秒。これは干渉理論を支持します。
Perl スクリプトのフラッシュ。まだ試していません。
よし、最初のハードルを越えた。非常に大きなテキスト ファイル (20 GB など) を生成できる Perl スクリプトを作成しました。
print NUMBERS_OUTFILE $line;
$line は、末尾に「\n」が付いた長い文字列です。
Perl スクリプトが開始されると、書き込み速度は約 120 MB/秒 (スクリプト、 プロセス エクスプローラー、およびパフォーマンス モニターのプロセス Perl の「IO 書き込みバイト/秒」によって計算される値と一致します) であり、シングル コアで 100% の CPU です。それは実行されています。この速度は、ハードディスクの書き込み速度よりも速いと思います。
その後、しばらくすると (たとえば、20 秒で 2.7 GB が書き込まれると)、システム全体が非常に応答しなくなり、CPU が 0% に低下します。これは、たとえば 30 秒間続きます。これら 2 つのフェーズの平均書き込み速度は、ハードディスクの書き込み速度と一致しています。この段落に記載されている時間とサイズは、実行ごとに大きく異なります。これまでのところ、第 1 フェーズの 1 GB から 4.3 GB の範囲が観測されています。これは4.3 GB での実行のトランスクリプトです。
テストで生成された 9.2 GB のテキスト ファイルには、これらのサイクルがいくつかあります。
何が起こっている?
完全なPerl スクリプトとBAT ドライバー スクリプト(pre タグでフォーマットされた HTML)。2 つの環境変数 MBSIZE と OUTFILE が設定されている場合、Perl スクリプトは Windows 以外のプラットフォームでそのまま実行できるはずです。
プラットフォーム: ActiveState の Perl 5.10.0。(当初は 32 ビット、後に 64 ビット); ビルド 1004。Windows XP x64 SP2、ページ ファイルなし、8 GB RAM、AMD クアッド コア CPU、500 GB Green Caviar ハードディスク (書き込み速度 85 MB/s?)。