Red Hat Training
A Red Hat training course is available for RHEL 8
7.7. NVDIMM でのデバイス DAX 名前空間の作成
システムに接続されている NVDIMM デバイスをデバイス DAX モードで設定して、ダイレクトアクセス機能を備えたキャラクターストレージをサポートします。
次のオプションを検討してください。
- 既存の名前空間をデバイス DAX モードに再設定する。
- 利用可能な領域がある場合は、新しいデバイスの DAX 名前空間を作成する。
7.7.1. デバイスのダイレクトアクセスモードの NVDIMM
デバイスダイレクトアクセス (デバイス DAX である devdax
) は、ファイルシステムの関与なしで、アプリケーションがストレージに直接アクセスできる手段を提供します。デバイス DAX の利点は、ndctl
ユーティリティーの --align
オプションを使用して設定できる、保証されたフォールトの粒度を提供することです。
Intel 64 アーキテクチャーおよび AMD64 アーキテクチャーでは、以下のフォールト粒度に対応しています。
- 4 KiB
- 2 MiB
- 1 GiB
デバイス DAX ノードは、以下のシステム呼び出しにのみ対応しています。
-
open()
-
close()
-
mmap()
ndctl list --human --capabilities
コマンドを使用して、NVDIMM デバイスのサポートされているアライメントを表示できます。たとえば、region0 デバイスについて表示するには、ndctl list --human --capabilities -r region0
コマンドを使用します。
デバイスの DAX ユースケースは SNIA 不揮発性メモリープログラミングモデルに関連付けられているため、read ()
および write ()
システムコールはサポートされていません。
7.7.2. 既存の NVDIMM 名前空間をデバイス DAX モードに再設定
既存の不揮発性デュアルインラインメモリーモジュール (NVDIMM) 名前空間をデバイス DAX モードに再設定できます。
名前空間を再構成すると、名前空間に以前に保存されたデータが削除されます。
前提条件
-
ndctl
ユーティリティーがインストールされている。詳細は、ndctl のインストール を参照してください。
手順
システムにある名前空間の一覧を表示します。
# ndctl list --namespaces --idle [ { "dev":"namespace1.0", "mode":"raw", "size":34359738368, "uuid":"ac951312-b312-4e76-9f15-6e00c8f2e6f4" "state":"disabled", "numa_node":1 }, { "dev":"namespace0.0", "mode":"raw", "size":38615912448, "uuid":"ff5a0a16-3495-4ce8-b86b-f0e3bd9d1817", "state":"disabled", "numa_node":0 } ]
名前空間を再設定します。
# ndctl create-namespace --force --mode=devdax --reconfig=namespace-ID
例7.3 名前空間をデバイス DAX として再設定
次のコマンドは、DAX に対応するデータストレージ用に
namespace0.1
を再設定します。オペレーティングシステムが一度に 2 MiB ページでフォールトされるように、2 MiB フォールトの粒度に合わせて調整されます。# ndctl create-namespace --force --mode=devdax --align=2M --reconfig=namespace0.1 { "dev":"namespace0.1", "mode":"devdax", "map":"dev", "size":"35.44 GiB (38.05 GB)", "uuid":"426d6a52-df92-43d2-8cc7-046241d6d761", "daxregion":{ "id":0, "size":"35.44 GiB (38.05 GB)", "align":2097152, "devices":[ { "chardev":"dax0.1", "size":"35.44 GiB (38.05 GB)", "target_node":4, "mode":"devdax" } ] }, "align":2097152 }
名前空間は、
/dev/dax0.1
パスで利用できます。
検証
システム上の既存の名前空間が再設定されているかどうかを確認します。
# ndctl list --namespace namespace0.1 [ { "dev":"namespace0.1", "mode":"devdax", "map":"dev", "size":38048628736, "uuid":"426d6a52-df92-43d2-8cc7-046241d6d761", "chardev":"dax0.1", "align":2097152 } ]
関連情報
-
man ページの
ndctl-create-namespace(1)
7.7.3. デバイス DAX モードでの新しい NVDIMM 名前空間の作成
リージョンに空き容量がある場合は、Non-Volatile Dual In-line Memory Modules (NVDIMM) デバイスに新しいデバイス DAX 名前空間を作成できます。
前提条件
-
ndctl
ユーティリティーがインストールされている。詳細は、ndctl のインストール を参照してください。 NVDIMM デバイスは、リージョン内に複数の名前空間を作成するためのラベルをサポートしています。これは、次のコマンドを使用して確認できます。
# ndctl read-labels nmem0 >/dev/null read 1 nmem
これは、1 つの NVDIMM デバイスのラベルを読み取ったことを示しています。値が
0
の場合、デバイスがラベルをサポートしていないことを意味します。
手順
利用可能な領域があるシステムの
pmem
リージョンの一覧を表示します。以下の例では、region1 リージョンと region0 リージョンの領域が利用できます。# ndctl list --regions [ { "dev":"region1", "size":2156073582592, "align":16777216, "available_size":2117418876928, "max_available_extent":2117418876928, "type":"pmem", "iset_id":-9102197055295954944, "badblock_count":1, "persistence_domain":"memory_controller" }, { "dev":"region0", "size":2156073582592, "align":16777216, "available_size":2143188680704, "max_available_extent":2143188680704, "type":"pmem", "iset_id":736272362787276936, "badblock_count":3, "persistence_domain":"memory_controller" } ]
利用可能な領域のいずれかに、1 つ以上の名前空間を割り当てます。
# ndctl create-namespace --mode=devdax --region=region_N_ --size=namespace-size
例7.4 リージョンへの名前空間の作成
次のコマンドは、region0 に 36-GiB のデバイス DAX 名前空間を作成します。オペレーティングシステムが一度に 2 MiB ページでフォールトされるように、2 MiB フォールトの粒度に合わせて調整されます。
# ndctl create-namespace --mode=devdax --region=region0 --align=2M --size=36G { "dev":"namespace0.2", "mode":"devdax", "map":"dev", "size":"35.44 GiB (38.05 GB)", "uuid":"89d13f41-be6c-425b-9ec7-1e2a239b5303", "daxregion":{ "id":0, "size":"35.44 GiB (38.05 GB)", "align":2097152, "devices":[ { "chardev":"dax0.2", "size":"35.44 GiB (38.05 GB)", "target_node":4, "mode":"devdax" } ] }, "align":2097152 }
名前空間は
/dev/dax0.2
として利用できるようになりました。
検証
新しい名前空間がセクターモードで作成されているかどうかを確認します。
# ndctl list -RN -n namespace0.2 { "regions":[ { "dev":"region0", "size":2156073582592, "align":16777216, "available_size":2065879269376, "max_available_extent":2065879269376, "type":"pmem", "iset_id":736272362787276936, "badblock_count":3, "persistence_domain":"memory_controller", "namespaces":[ { "dev":"namespace0.2", "mode":"devdax", "map":"dev", "size":38048628736, "uuid":"89d13f41-be6c-425b-9ec7-1e2a239b5303", "chardev":"dax0.2", "align":2097152 } ] } ] }
関連情報
-
man ページの
ndctl-create-namespace(1)