Windows用のコマンドラインCアプリケーションでは、fwrite()を使用して受信データをSSDドライブ上の1GBファイルに連続的にダンプします。データは、約16 KBのチャンクのPCIeカードから得られます。これは、fwrite()を呼び出すときに使用したデータ数です。これらの状況では、各fwrite()コールは通常、(Windowsパフォーマンスカウンタを使用して測定した)を100μs未満としますが、を完了するのに2秒以上かかる外れ値があり、PCIeカードにバッファオーバーフローが発生します。これらの散発的な性能低下の原因は何ですか?私は彼らが起こることを防ぐために何ができるのですか?fwrite()パフォーマンス低下
アップデート#1:この問題の一部は、SSDドライブが原因であるようです。通常の機械的なHDDにダンプする場合、異常値は(1000msecではなく)100msecのオーダである。
更新#2:fwrite()の減速は、最初の1.5 GBのデータを書き込んだ後に発生するようです。 1 GBファイルにダンプすると、2番目のファイルの途中で減速が発生します。 512 MBのファイルを使用する場合は、3番目のファイルの後です。 256 MBのファイルを使用する場合は、6番目のファイルの後になります。
これらの異常値はどれくらいの頻度で確認できますか?それは常にどちらか一方ですが、中間値はありません。 –
私にはバッファリング効果のような音がします。それぞれの 'fwrite()'の後に 'fflush()'を追加してみてください。異常値がなくなった場合、速い 'fwrite()'呼び出しは単にメモリ内のバッファに書き込み、長い 'fwrite()'呼び出しはバッファ全体をあなたのドライブに書き込みます。 –
ファイルをバイナリモード( '' wb "')で正しくオープンしたことを確認してください。テキストモードのIOは奇妙な動作を示すことがあります。 – ElderBug