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 だけです。NVDIMM デバイスは通常小さくて高価であるため、--map=mem パラメーターが示すように、カーネルのページトラッキングデータ構造を 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 の倍数の場合は、その他のパーティションも合わせてアライメントされます。