Red Hat Training

A Red Hat training course is available for RHEL 8

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

システムに接続されている NVDIMM デバイスをファイルシステム DAX モードで設定して、ダイレクトアクセス機能を備えたファイルシステムをサポートします。

次のオプションを検討してください。

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

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

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

NVDIMM デバイスがファイルシステムダイレクトアクセス (ファイルシステム DAX、fsdax) モードで設定されている場合、その上にファイルシステムを作成できます。このファイルシステムのファイルで mmap() 操作を実行するアプリケーションは、ストレージに直接アクセスします。これにより、NVDIMM 上のプログラミングモデルに直接アクセスできます。

次の新しい -o dax オプションが利用できるようになりました。必要に応じて、ファイル属性を介して直接アクセスの動作を制御できます。

-o dax=inode

これは、ファイルシステムのマウント時に dax オプションを指定しない場合のデフォルトオプションです。このオプションを使用すると、ファイルに属性フラグを設定して、dax モードをアクティブにできるかどうかを制御できます。必要に応じて、個々のファイルにこのフラグを設定できます。

このフラグをディレクトリーに設定することもでき、そのディレクトリー内のすべてのファイルが同じフラグで作成されます。この属性フラグは、xfs_io -c 'chattr +x' directory-name コマンドを使用して設定できます。

-o dax=never
このオプションを使用すると、dax フラグが inode モードに設定されていても、dax モードは有効になりません。これは、inode ごとの dax 属性フラグが無視され、このフラグが設定されたファイルは直接アクセスが有効にならないことを意味します。
-o dax=always

このオプションは、古い -o dax の動作と同等です。このオプションを使用すると、dax 属性フラグに関係なく、ファイルシステム上の任意のファイルに対して直接アクセスモードを有効にできます。

警告

今後のリリースでは、-o dax がサポートされなくなる可能性があります。必要に応じて、代わりに -o dax=always を使用できます。このモードでは、すべてのファイルが直接アクセスモードになる可能性があります。

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

このモードでは、システム 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 を使用します。

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

既存の不揮発性デュアルインラインメモリーモジュール (NVDIMM) 名前空間をファイルシステム DAX モードに再設定できます。

警告

名前空間を再構成すると、名前空間に以前に保存されたデータが削除されます。

前提条件

  • ndctl ユーティリティーがインストールされている。詳細は、ndctl のインストール を参照してください。

手順

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

    # 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
      }
    ]
  2. 名前空間を再設定します。

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

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

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

    # ndctl create-namespace --force --mode=fsdax --reconfig=namespace0.0
    {
      "dev":"namespace0.0",
      "mode":"fsdax",
      "map":"dev",
      "size":"11.81 GiB (12.68 GB)",
      "uuid":"f8153ee3-c52d-4c6e-bc1d-197f5be38483",
      "sector_size":512,
      "align":2097152,
      "blockdev":"pmem0"
    }

    名前空間は /dev/pmem0 パスで利用できるようになりました。

検証

  • システム上の既存の名前空間が再設定されているかどうかを確認します。

    # ndctl list --namespace namespace0.0
    [
      {
        "dev":"namespace0.0",
        "mode":"fsdax",
        "map":"dev",
        "size":12681478144,
        "uuid":"f8153ee3-c52d-4c6e-bc1d-197f5be38483",
        "sector_size":512,
        "align":2097152,
        "blockdev":"pmem0"
      }
    ]

関連情報

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

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

リージョンに空き容量がある場合は、不揮発性デュアルインラインメモリーモジュール (NVDIMM) デバイスに新しいファイルシステム DAX 名前空間を作成できます。

前提条件

  • ndctl ユーティリティーがインストールされている。詳細は、ndctl のインストール を参照してください。
  • NVDIMM デバイスは、リージョン内に複数の名前空間を作成するためのラベルをサポートしています。これは、次のコマンドを使用して確認できます。

    # ndctl read-labels nmem0 >/dev/null
    read 1 nmem

    これは、1 つの NVDIMM デバイスのラベルを読み取ったことを示しています。値が 0 の場合、デバイスがラベルをサポートしていないことを意味します。

手順

  1. 利用可能な領域があるシステムの 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"
      }
    ]
  2. 利用可能な領域のいずれかに、1 つ以上の名前空間を割り当てます。

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

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

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

    # ndctl create-namespace --mode=fsdax --region=region0 --size=36G
    {
      "dev":"namespace0.3",
      "mode":"fsdax",
      "map":"dev",
      "size":"35.44 GiB (38.05 GB)",
      "uuid":"99e77865-42eb-4b82-9db6-c6bc9b3959c2",
      "sector_size":512,
      "align":2097152,
      "blockdev":"pmem0.3"
    }

    名前空間は /dev/pmem0.3 として利用できるようになりました。

検証

  • 新しい名前空間がセクターモードで作成されているかどうかを確認します。

    # ndctl list -RN -n namespace0.3
    {
      "regions":[
        {
          "dev":"region0",
          "size":2156073582592,
          "align":16777216,
          "available_size":2027224563712,
          "max_available_extent":2027224563712,
          "type":"pmem",
          "iset_id":736272362787276936,
          "badblock_count":3,
          "persistence_domain":"memory_controller",
          "namespaces":[
            {
              "dev":"namespace0.3",
              "mode":"fsdax",
              "map":"dev",
              "size":38048628736,
              "uuid":"99e77865-42eb-4b82-9db6-c6bc9b3959c2",
              "sector_size":512,
              "align":2097152,
              "blockdev":"pmem0.3"
            }
          ]
        }
      ]
    }

関連情報

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

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

ファイルシステム DAX デバイス上にファイルシステムを作成し、ファイルシステムをマウントできます。ファイルシステムを作成した後、アプリケーションは永続メモリーを使用して mount-point ディレクトリーにファイルを作成し、ファイルを開き、mmap 操作を使用して直接アクセスできるようにファイルをマップできます。

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

手順

  1. オプション: ファイルシステム DAX デバイス上にパーティションを作成します。詳細は、parted を使用したパーティションの作成 を参照してください。

    注記

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

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

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

    # mkfs.xfs  -d su=2m,sw=1 fsdax-partition-or-device
    注記

    dax 対応ファイルと reflinked ファイルは、ファイルシステム上で共存できるようになりました。ただし、個々のファイルの場合、dax と reflink は相互に排他的です。

    XFS の場合、dax マウントオプションと互換性がないため、共有コピーオンライトのデータエクステントを無効にします。また、大規模ページマッピングの可能性を増やすには、ストライプユニットとストライプの幅を設定します。

  3. ファイルシステムをマウントします。

    # mount f_sdax-partition-or-device mount-point_

    直接アクセスモードを有効にするために dax オプションを使用してファイルシステムをマウントする必要はありません。マウント時に dax オプションを指定しない場合、ファイルシステムは dax=inode モードになります。直接アクセスモードをアクティブにする前に、ファイルに dax オプションを設定します。

関連情報