2

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)システムコールも試しました。

この同様の質問を読みましたが、解決策が見つかりませんでした。役立つ場合は、コードを提供できます。

4

2 に答える 2

2

...RAID 構成で複数のディスク装置を実行する... どのように? IBM i では、プログラムがハードウェアにアクセスすることは許可されていません。I/O を特定の物理ディスクにどのように転送していますか?

回答:書き込み/読み取り操作は IFS に対して並行して行われるため、ストリーム ファイル マネージャーは対象となるディスクを選択します。十分な数のスレッドの読み取り/書き込みを行うことで、SYSBASE または IASP のビジー状態を促進できます。

...どのディスクユニットも読み取りアクセスを示していません。 そのなかで何も?制限された状態のシステムで唯一のジョブを実行していない限り、他のタスクからのディスクに対する読み取りアクティビティが発生します。システムは複数の LPAR に分割されていますか? 複数の ASP ? IBM i はプログラムではなく物理 I/O を処理するため、このプログラムが書き込みを行っていないディスクを監視している可能性があります。

ANSWERどれも少し誇張ではないと思います。どのディスクが SYSBASE に属しており、それらのディスクが多くの読み取り要求の対象になっていないことを知っています。私は、IBM i に慣れていない聴衆のために一般化しようとしていました。下の図では、書き込み要求によってビジー率が上昇していることがわかりますが、同じファイルをターゲットにしているにもかかわらず、読み取り要求はそうではありません。

ここに画像の説明を入力

...ディスクへの書き込み時に OS (IBM i) がデータをバッファリングしないようにするにはどうすればよいですか... メモリ不足の主記憶域プールを使用して、ページングを最大化し、システムとディスク コントローラーのキャッシュがオーバーフローし、使用中のマシンが使用されるため、他のタスクもディスク I/O を要求します。

于 2013-05-03T19:50:41.767 に答える