3.7. NVDIMM でのファイルシステム DAX 名前空間の作成

NVDIMM デバイスをファイルシステム DAX モードに設定し、ダイレクトアクセス機能を備えたファイルシステムに対応します。

次のいずれかになります。

  • ファイルシステムの DAX モードに既存の名前空間を再設定
  • 新しいファイルシステム DAX 名前空間を作成 (利用可能な領域がある場合)
重要

ファイルシステムの DAX テクノロジーはテクノロジープレビューとしてのみ提供されるため、Red Hat では対応していません。

前提条件

  • NVDIMM デバイスがシステムに接続されている。

3.7.1. ファイルシステムの直接アクセスモードの NVDIMM

NVDIMM デバイスがファイルシステムダイレクトアクセス (ファイルシステム DAX (fsdax)) モードで設定されている場合は、その上にファイルシステムを作成できます。

このファイルシステムのファイルで mmap() 操作を実行するアプリケーションは、ストレージに直接アクセスします。これにより、NVDIMM 上のプログラミングモデルに直接アクセスできます。直接マッピングを行うには、ファイルシステムは -o dax オプションでマウントする必要があります。

ページごとのメタデータ割り当て

このモードでは、システム DRAM または NVDIMM デバイス自体でページごとのメタデータを割り当てる必要があります。このデータ構造のオーバーヘッドは、4KiB ページにつき 64 バイトです。

  • 小さいデバイスでは、問題なく DRAM に収まるのに十分なオーバーヘッド量があります。たとえば、16 GiB の名前区間のページ構造に必要なのは 256 MiB だけです。NVDIMM デバイスは通常小さくて高価であるため、ページトラッキングデータ構造を DRAM に格納することが推奨されます。
  • テラバイト以上のサイズの NVDIMM デバイスの場合は、ページトラッキングデータ構造の格納に必要なメモリーの量がシステム内の DRAM の量を超える可能性があります。NVDIMM の 1 TiB に対して、ページ構造だけで 16 GiB が必要です。したがって、このような場合には、NVDIMM 自体にデータ構造を保存することが推奨されます。

名前空間の設定時に --map オプションを使用して、ページごとのメタデータを保存する場所を設定できます。

  • システム RAM に割り当てるには、--map=mem を使用します。
  • NVDIMM に割り当てるには、--map=dev を使用します。
fsdax 上のパーティションおよびファイルシステム

fsdax デバイスにパーティションを作成する場合、パーティションはページの境界に調整する必要があります。Intel 64 アーキテクチャーおよび AMD64 アーキテクチャーでは、パーティションの開始と終了に最低 4 KiB のアライメントが必要です。2 MiB が優先されるアライメントです。

Red Hat Enterprise Linux 8 では、テクノロジープレビューとして、XFS および ext4 ファイルシステムの両方を NVDIMM にできます。

3.7.2. ndctl のインストール

この手順では、NVDIMM デバイスの設定および監視に使用する ndctl ユーティリティーをインストールします。

手順

  • ndctl ユーティリティーをインストールするには、次のコマンドを使用します。

    # yum install ndctl

3.7.3. ファイルシステム DAX モードへの既存の NVDIMM 名前空間の再設定

以下の手順では、NVDIMM デバイスの名前空間をファイルシステム DAX モードに再構成し、ファイルを名前空間に格納できるようにします。

警告

名前空間を再設定すると、名前空間に保存しておいたすべてのデータが削除されます。

前提条件

手順

  1. システムにある名前空間の一覧を表示します。

    # ndctl list --namespaces --idle
    
    [
      {
        "dev":"namespace1.0",
        "mode":"raw",
        "size":34359738368,
        "state":"disabled",
        "numa_node":1
      },
      {
        "dev":"namespace0.0",
        "mode":"raw",
        "size":34359738368,
        "state":"disabled",
        "numa_node":0
      }
    ]
  2. 名前空間を再設定します。

    # ndctl create-namespace \
            --force \
            --mode=fsdax \
            --reconfig=namespace-ID

    例3.5 ファイルシステム DAX としての名前空間の再設定

    DAX に対応するファイルシステムに namespace0.0 を使用するには、次のコマンドを使用します。

    # ndctl create-namespace \
            --force \
            --mode=fsdax \
            --reconfig=namespace0.0
    
    {
      "dev":"namespace0.0",
      "mode":"fsdax",
      "size":"32.00 GiB (34.36 GB)",
      "uuid":"ab91cc8f-4c3e-482e-a86f-78d177ac655d",
      "blockdev":"pmem0",
      "numa_node":0
    }
  3. これで、名前空間が、/dev/pmemN パスで利用可能になります。

関連情報

  • man ページの ndctl-create-namespace(1)

3.7.4. ファイルシステム DAX モードで新しい NVDIMM 名前空間の作成

以下の手順では、NVDIMM デバイスに新たなファイルシステム DAX 名前空間を作成し、ファイルを名前空間に格納できるようにします。

前提条件

  • ndctl ユーティリティーがインストールされている。「ndctl のインストール」を参照してください。
  • NVDIMM デバイスがラベルに対応している。

手順

  1. 利用可能な領域があるシステムの pmem リージョンの一覧を表示します。以下の例では、region5 リージョンと region4 リージョンの領域が利用できます。

    # ndctl list --regions
    
    [
      {
        "dev":"region5",
        "size":270582939648,
        "available_size":270582939648,
        "type":"pmem",
        "iset_id":-7337419320239190016
      },
      {
        "dev":"region4",
        "size":270582939648,
        "available_size":270582939648,
        "type":"pmem",
        "iset_id":-137289417188962304
      }
    ]
  2. いずれのリージョンでも、複数の名前空間を割り当てます。

    # ndctl create-namespace \
            --mode=fsdax \
            --region=regionN \
            --size=namespace-size

    例3.6 リージョンへの名前空間の作成

    次のコマンドは、region4 で 36 GiB のファイルシステム DAX 名前空間を作成します。

    # ndctl create-namespace \
            --mode=fsdax \
            --region=region4 \
            --size=36G
    
    {
      "dev":"namespace4.0",
      "mode":"fsdax",
      "size":"35.44 GiB (38.05 GB)",
      "uuid":"9c5330b5-dc90-4f7a-bccd-5b558fa881fe",
      "blockdev":"pmem4",
      "numa_node":0
    }
  3. これで、名前空間が、/dev/pmemN パスで利用可能になります。

関連情報

  • man ページの ndctl-create-namespace(1)

3.7.5. ファイルシステム DAX デバイスでのファイルシステムの作成

この手順では、ファイルシステム DAX デバイスにファイルシステムを作成し、そのファイルシステムをマウントします。

手順

  1. 必要に応じて、ファイルシステム DAX デバイス上にパーティションを作成します。「パーティションの作成」を参照してください。

    parted ツールは、デフォルトでは 1 MiB の境界にパーティションをそろえます。最初のパーティションには、パーティションの開始部分として 2 MiB を指定します。パーティションのサイズが 2 MiB の倍数である場合は、他のすべてのパーティションもそろえられます。

  2. パーティションまたは NVDIMM デバイスに XFS または ext4 ファイルシステムを作成します。

    XFS の場合は、ファイルシステムの作成時に、共有コピーオンライトのデータエクステントを無効にします。

    # mkfs.xfs -m reflink=0 fsdax-partition-or-device
  3. -o fsdax マウントオプションでファイルシステムをマウントします。

    # mount -o fsdax fsdax-partition-or-device mount-point
  4. アプリケーションは永続メモリーを使用し、ファイルを mount-point ディレクトリーに作成し、ファイルを開いて、mmap 操作を使用して直接アクセス用にファイルをマッピングできるようになりました。

関連情報

  • man ページの mkfs.xfs(8)