NVMe ストレージ (hdisk) デバイス・ドライバー

目的

Peripheral Component Interconnect Express (PCIe) およびファイバー・チャネル (FC) 接続の Non-Volatile Memory Express (NVMe) ストレージ・デバイスをサポートします。

構文

<#include /usr/include/sys/nvme.h>
<#include /usr/include/sys/devinfo.h>

説明

/dev/hdiskn スペシャル・ファイルは、NVMe ストレージ・デバイス・ドライバーへのインターフェースを提供します。

装置依存のサブルーチン

NVMe ストレージ・デバイス・ドライバーは、 openclosereadwrite、および ioctl の各サブルーチンをサポートします。

ioctl サブルーチン

IOCINFO 操作とともに、NVMe ストレージ・デバイス・ドライバーは NVMe ストレージ・デバイスの操作を定義します。

IOCINFO 操作は、以下のように、 ioctl サブルーチンを使用するすべてのデバイス・ドライバーに対して定義されます。

IOCINFO 操作は、 devinfo 構造体を戻します。 devinfo 構造体は、 /usr/include/sys/devinfo.h ヘッダー・ファイルで定義されます。 この構造体の装置タイプは DD_SCDISKで、サブタイプは DS_PVです。 フラグ・フィールドは、値 DF_SSD および DF_NVMEを示すために使用されます。 DF_4B_ALINGED フラグが事前設定されている場合、このフラグは、すべてのホスト・データ・バッファー・アドレスを 4 バイト・アドレスに位置合わせする必要があることを示します。

NVMe ストレージ ioctl 操作

NVMe ストレージ・デバイスでは、以下の ioctl 操作がサポートされます。
NVME パスSTHRU
passthru コマンドを NVMe ストレージ・デバイスに送信するためのオプションを提供します。 NVME_PASSTHRU 操作の arg パラメーターは、 /usr/include/sys/nvme.h ヘッダー・ファイルに定義されている NVME_PASSTHRU 構造体のアドレスです。
注: admin コマンドはアダプター・デバイスにのみ送信でき、 NVM コマンドはストレージ (hdisk) デバイスにのみ送信できます。 そうしないと、コマンドの結果として、データ破損などの未定義の動作が発生する可能性があります。 すべての NVMe コマンドの命令コードは、コマンド・セット内でのみ固有であり、命令コード値は、異なるコマンド・セット内の異なる操作に使用できます。

NVMe ストレージ・デバイスに対して NVMe passthru コマンドを発行する場合、特定の path_id を指定できます。 passthru コマンドに特定の path_id を使用する場合は、 flags フィールドの NVME_PASS_PASSTHRU フラグと path_id フィールドで使用する path_id の両方を構成する必要があります。

ホストによって使用されるエンディアン形式で dword_10dword_15 データに書き込むことができます。この形式では、(左端の) ビット 31 が最上位ビットになり、(右端の) ビット 0 が NVMe 仕様に従って最下位ビットになります。 例えば、 0xAC ブロックを読み取って FUA を設定するには、 passthru 構造内の dword_10 を 0x400000ABに設定します。

passthru コマンドを使用して転送されるデータ内の 2 つのフィールドは、 バイト反転 する必要があります。 例えば、Identify Namespace によって返されるデータから名前空間サイズ (NSZE) を読み取るには、データ・バッファーのバイト 0 から 7 が バイト反転でなければなりません。

passthruコマンドが失敗した場合、ioctlサブルーチンの戻り-1 。 戻り値-1ドライバーがコントローラーにコマンドを送信できなかったか、タイムアウトが発生する前にコントローラーが応答しなかったことを示します。 errno フラグが EINVAL 値に設定されている場合、 resp.status パラメーターには、無効なフィールドを示すコードが含まれます。

passthru コマンドが正常に実行されるのは、 ioctl サブルーチンが 0 を戻し、 resp.status パラメーターが 0 を含んでいる場合です。 passthru コマンドは、読み取り操作または書き込み操作を実行することによって別のユーザーによって開始されたコマンドと並行して実行されます。