SG_IO/SG_ATA_16の最大転送サイズ

SG_IO/SG_ATA_16の最大転送サイズ

READ DMA EXT最大セクタ数に違反し(要するに)、すべての可能なOSキャッシュ、バッファリング、並べ替えなどをバイパスするには、RAW ATA要求を直接ハードドライブ(0x25、)に転送する必要があります。

HDIO_DRIVE_TASKFILE.IOCTL は使用できなくなりましたlibata

SG_IOATAパススルー(()を使用してIOCTLを使用して目標を達成しましたSG_ATA_16。1つの問題を除いて完全に機能します。1つのコマンドで最大8192個のセクタを読み取ることができます。必要合計32767個のセクターを読みました。

  • 最大ハードウェアセクタ数(KB)32767なので、ドライブはサポートする乗り継ぎが多すぎて
  • 最大セクタ数(KB)低いけど32767セクターまで上げても役に立たない
  • スケジューラに設定されていますヌープ、お金を保ってください。
  • バッファを収集しようとしましたが(連続バッファスライスにiovec_count>0正しく設定されていますiovecs)、変更はありません。

環境:標準カーネルを含むUbuntu 16.04/16.10/17.04/17.10、Intelチップセットの標準AHCIインターフェイスに接続されたSATAドライブ。

私が何をしても、8193セクターからIOCTLは通過します」無効な引数「エラー(EINVAL正確にはerrnoを含む)です。他のコンピュータでは、実行ごとに少しずつ異なり(再起動は不要)、通常最大1344セクタに固定されます。

どこで見ることができますか?データ転送制限の原因は何ですか?

ベストアンサー1

おすすめ記事