NVME(4) | FreeBSD Kernel Interfaces Manual | NVME(4) |
名称
nvme — NVM Express コアドライバ書式
このドライバをカーネルにコンパイルするためには、次の行を利用者のカーネル設定ファイルに置きます:
device nvme
または、ブート時にモジュールとしてドライバをロードするためには、次の行を loader.conf(5) に置きます:
nvme_load="YES"
また、ほとんどのユーザは、ディスクデバイスとして NVM Express 名前空間を表面化するために nvd(4) を有効にすべきです。 NVM Express 規約では、名前空間は、SCSI LUN とほぼ等価であることに注意してください。
解説
nvme ドライバは、次のように、NVM Express (NVMe) コントローラのサポートを行います:- ハードウェアの初期化
- CPU ごとの IO キューのペア (pair)
- nvd(4) のような NVMe 名前空間の消費者を登録するための API
- 名前空間に NVM コマンドを提示するための API
- コントローラのための ioctl と名前空間の設定と管理 nvme は、形式 /dev/nvmeX でコントローラデバイスと形式 /dev/nvmeXnsY で名前空間デバイスを作成します。 NVM Express の仕様は、0 ではなく 1 で名前空間の番号付けを開始します、そしてこのドライバは、その仕様に従うことに注意してください。
設定
デフォルトで、 nvme は、十分な MSI-X ベクトルを割り付けることができるならば、各 CPU のための I/O キューのペアを作成します。すべての CPU によって共有される単一の I/O キューのペアを強制するためには、 loader.conf(5) で次の調整変数の値を設定します:
hw.nvme.per_cpu_io_queues=0
すべての nvme ドライバのインスタンスのために古い割り込みを強制するためには、 loader.conf(5) で次の調整変数の値を設定します:
hw.nvme.force_intx=1
INTx の使用は、CPU ごとの I/O キューのペアを無効にすることを意味することに注意してください。
SYSCTL 変数
次のコントローラレベルの sysctl が現在実装されています:- dev.nvme.0.int_coal_time
- (R/W) マイクロ秒単位で合体タイマ期間に割り込みます。無効にするためには、0 に設定します。
- dev.nvme.0.int_coal_threshold
- (R/W) コマンド完了の数で合体しきい値に割り込みます。無効にするためには、0 に設定します。
次のキューのペアのレベル sysctl が現在実装されています。 admin キュー sysctl は、dev.nvme.0.adminq の形式をとり、 I/O キュー sysctl は、dev.nvme.0.ioq0 の形式をとります。
- dev.nvme.0.ioq0.num_entries
- (R) このキューのペアのコマンドと完了キューのエントリの数。
- dev.nvme.0.ioq0.num_tr
- (R) このキューのペアに現在割り付けられた nvme_tracker 構造体の数。
- dev.nvme.0.ioq0.num_prp_list
- (R) このキューのペアに現在割り付けられた nvme_prp_list 構造体の数。
- dev.nvme.0.ioq0.sq_head
- (R) ドライバによって観測されるようなサブミッションキューのヘッドポインタの現在の位置。ヘッドポインタは、それがサブミッションキューのコマンドから取り除かれるようにコントローラによって増加されます。
- dev.nvme.0.ioq0.sq_tail
- (R) ドライバによって観測されるようなサブミッションキューのテール (tail) ポインタの現在の位置。ドライバは、新しいコマンドが処理される準備ができていることをシグナルするためにサブミッションキューにコマンドを書き込んだ後にテールポインタを増加します。
- dev.nvme.0.ioq0.cq_head
- (R) ドライバによって観測されるような完了キューのヘッドポインタの現在の位置。ドライバは、コントローラによって知らされた完了エントリで終了した後にヘッドポインタを増加します。
- dev.nvme.0.ioq0.num_cmds
- (R) このキューのペアで提示されたコマンドの数。
- dev.nvme.0.ioq0.dump_debug
- (W) この sysctl に 1 を書き込むことは、サブミッションの満杯の内容とコンソールへの完了キューをダンプします。
歴史
nvme デバイスドライバは、 FreeBSD 9.2 ではじめて登場しました。作者
nvme ドライバは、Intel によって開発され、EMC の Joe Golio からの貢献と共に、 <jimharris@FreeBSD.org>によって最初に書かれました。このマニュアルページは、
<jimharris@FreeBSD.org>によって書かれました。July 9, 2013 | FreeBSD |