28.3. ファイルシステムダイレクトアクセス用の永続メモリーの設定

ファイルシステムダイレクトアクセスでは、名前空間を fsdax モードに設定する必要があります。このモードでは、ダイレクトアクセスプログラミングモデルが可能になります。デバイスが fsdax モードに設定されると、ファイルシステムをその上に作成し、-o fsdax マウントオプションでマウントできます。そして、このファイルシステム上のファイルで mmap() 操作を実行するアプリケーションは、ストレージに直接アクセスできるようになります。以下の例を参照してください。
# ndctl create-namespace --force --reconfig=namespace0.0 --mode=fsdax --map=mem
{
   "dev":"namespace0.0",
   "mode":"fsdax",
   "size":17177772032,
   "uuid":"e6944638-46aa-4e06-a722-0b3f16a5acbf",
   "blockdev":"pmem0"
}
この例では、namespace0.0 は名前空間 fsdax モードに変換されます。--map=mem 引数を指定することで、ndctl は、ダイレクトメモリーアクセス (DMA) に使用したオペレーティングシステムデータ構造をシステム DRAM に配置します。
DMA を実行するには、メモリーリージョンの各ページのデータ構造がカーネルによって必要とされます。このデータ構造のオーバーヘッドは 4 KiB ページごとに 64 バイトです。小型デバイスについては、オーバーヘッドの量が DRAM に一致するのに十分な小ささであるため問題ありません。たとえば、16 GiB 名前空間は、ページ構造に 256 MiB のみを必要とします。これは、--map=mem パラメーターで示されているように、NVDIMM デバイスが通常小さく高額であるためカーネルのページトラッキングデータ構造を DRAM に格納することが好ましいと考えられています。
今後、NVDIMM デバイスのサイズはテラバイトになる可能性があります。このようなデバイスについては、ページトラッキングデータ構造の格納に必要なメモリーの量がシステム内の DRAM の容量を超えることが考えられます。1 TiB の永続メモリーには、ページ構造だけに 16 GiB 必要となります。結果として、このような状況では、永続メモリー自体にデータ構造を格納するために --map=dev パラメーターを指定ことが望ましいと言えます。
fsdax モードで名前空間を設定した後、名前空間はファイルシステムに対して使用できるようになります。Red Hat Enterprise Linux 7.3 より、Ext4 と XFS ファイルシステムの両方では、テクノロジープレビューとして永続メモリーを使用できます。ファイルシステム作成には、特殊引数は必要ありません。DAX 機能を取得するには、dax マウントオプションを指定してファイルシステムをマウントしてください。例:
# mkfs -t xfs /dev/pmem0
# mount -o dax /dev/pmem0 /mnt/pmem/
これで、アプリケーションは永続メモリーを使用して /mnt/pmem/ ディレクトリーでファイルを作成できます。また、ファイルを開くことや、mmap 操作を使用してダイレクトアクセス用にファイルをマッピグできます。
ダイレクトアクセスに使用するために pmem デビアス上でパーティションを作成する場合は、パーティションがページの境界に揃えられている必要があります。Intel 64 と AMD64 アーキテクチャでは、パーティションの開始と終了部分に最低 4KiB (2MiB 推奨) のアライメントが必要なります。デフォルトでは、parted ツールが 1MiB 境界上でパーティションをアラインします。最初のパーティションについては、パーティションの開始として 2MiB を指定します。パーティションのサイズが 2MiB の倍数である場合、その他すべてのパーティションも同じように調整されます。