RAID 構成で複数のディスク装置を実行するために使用されるプログラムがあります。1 プロセスが同期的に ( O_SYNC
) を使用してランダム データをファイルに書き込みますwrite()
。次に、ディレクトリの名前を共有メモリ キューに入れます。そこでは、2 番目のプロセスが、.xml を使用してデータをメモリに読み込むためのエントリがキューに含まれるのを待っていますread()
。
私が克服できないように見える問題は、2 番目のプロセスがデータをメモリに読み戻そうとするときに、どのディスク装置も読み取りアクセスを示さないことです。プログラムには、読み戻されたデータがディスクに書き込まれたコードと等しいかどうかをチェックするコードがあり、データは常に一致します。
私の質問は、read()
システム コールがキャッシュではなくディスク上のデータにアクセスできるように、データがディスクに書き込まれるときに OS (IBM i) がデータをバッファリングしないようにするにはどうすればよいかということです。私は単純なスループット計算を行っていますが、read()
操作は常に操作よりも 10 倍以上高速ですwrite
。
フラグを使用してみO_DIRECT
ましたが、データをファイルに書き込むことができないようです。これは、正しい整列バッファの設定に関係している可能性があります。posix_fadvise(fd, offset,len, POSIX_FADV_DONTNEED)
システムコールも試しました。
この同様の質問を読みましたが、解決策が見つかりませんでした。役立つ場合は、コードを提供できます。