1

直接デバイスでの使用に関するlibaioのドキュメントには、読み取りオフセットと書き込みオフセットはセクターに整列する必要があると記載されています。たとえば、典型的なSSD / HDDでは512バイトの倍数です。Web で入手できる情報の一部には、ソースと宛先として使用されるユーザー空間バッファーも調整する必要があると書かれています。

直接デバイスを使用する場合、ベクトルの読み取り関数と書き込み関数のアラインメントの制限は何ですか? 私は、操作のディスク側は依然としてセクターを揃える必要があると思います (結局のところ、カバーの下でブロックデバイスと通信しています)。スキャッター ギャザー リストは、小さなチャンクをユーザー空間内の整列していないターゲットに分散させることができますか?

私は debian Jessie に取り組んでおり、libaio でのベクトル I/O のサポートを確認しました。

4

1 に答える 1

0

いくつかのテストコードを書くことによって確立された短い答えはノーです。転送のディスク側とメモリ側の両方で、セクターが整列されている必要があります。非セクタ アライン操作のイベントで返されるエラー コードは -22 (不明なエラー) です。

これが機能していたら面白かったでしょう。基盤となるハードウェア (SSD および AHCI 互換コントローラー) は、任意の偶数アドレスとの間で DMA を実行できます。

于 2015-08-02T19:47:49.803 に答える