Menu Close
Settings Close

Language and Page Formatting Options

Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第28章 永続メモリー : NVDIMMs

永続メモリー (pmem) はストレージクラスメモリーとも呼ばれ、メモリーとストレージを組み合わせたものになります。pmem は、ストレージの耐久性に加え、低アクセスレイテンシーと動的な DRAM の広帯域幅を採用しています。
  • 永続メモリーはバイト単位でアドレスを指定できるため、CPU 読み込みおよびストア命令でアクセスできます。従来のブロックベースのストレージへのアクセスに必要なシステムコール read() または write() の他に、pmem はダイレクトロードとストアプログラミングモデルにも対応しています。
  • 永続メモリーのパフォーマンス特性は、アクセスレイテンシーが非常に低い (通常、数十から数百ナノ秒) DRAM と似ています。
  • 永続メモリーの内容は、ストレージと同様に、電源が切れても保持されます。

永続メモリーの使用は、以下のようなユースケースで利点があります。

高速な起動: データセットはすでにメモリーにあります。
高速な起動は、ウォームキャッシュ効果とも呼ばれます。起動後、ファイルサーバーのメモリーにファイルの内容はありません。クライアントがデータを接続して読み書きすると、そのデータはページキャッシュにキャッシュされます。最終的に、キャッシュには、ほとんどのホットデータが含まれます。システムを再起動したら、プロセスを再起動する必要があります。
永続メモリーを使用すると、アプリケーションが適切に設計されていれば、システムの再起動後もアプリケーションのウォームキャッシュを維持できます。この例には、ページキャッシュは含まれません。アプリケーションは、永続メモリーに直接データをキャッシュします。
高速書き込みキャッシュ
ファイルサーバーは多くの場合、耐久性のあるメディアにデータが存在するまで、クライアントの書き込み要求を承認しません。高速書き込みキャッシュとして永続メモリーを使用すると、pmem の待ち時間が短いため、ファイルサーバーは書き込み要求をすばやく確認できます。

NVDIMMs のインターリーブ

Non-Volatile Dual In-line Memory Modules (NVDIMMs) は、通常の DRAM と同じ方法でインターリーブセットにグループ化できます。インターリーブセットは、複数の DIMM にわたる RAID 0 (ストライプ) のようなものです。
NVDIMMS のインターリーブには、以下の利点があります。
  • DRAM と同様に、NVDIMMs もインターリーブセットに設定するとパフォーマンスが向上します。
  • これを使用すると、複数の小規模な NVDIMMs を、1 つのより大きな論理デバイスに統合できます。
システム BIOS または UEFI ファームウェアを使用して、インターリーブセットを設定します。
Linux では、1 つのインターリーブセットに 1 つのリージョンデバイスが作成されます。
リージョンデバイスとラベルの関係は次のとおりです。
  • NVDIMMs がラベルに対応している場合は、リージョンデバイスを名前空間にさらに細かく分けることができます。
  • NVDIMMs がラベルに対応していない場合、リージョンデバイスは、単一の名前空間しか含むことができません。この場合、カーネルは、リージョン全体に対応するデフォルトの namespace を作成します。

永続メモリーアクセスモード

永続メモリーデバイスは、sectorfsdaxdevdax (デバイスダイレクトアクセス) または raw モードで使用できます。
sector モード
ストレージは高速ブロックデバイスとして提示されます。セクターモードの使用は、永続メモリーを使用するように変更されていない従来のアプリケーションや、デバイスマッパーを含む完全な I/O スタックを利用するアプリケーションに役立ちます。
fsdaxモード
これにより、Storage Networking Industry Association (SNIA) 非揮発性メモリー (NVM) プログラミングモデル仕様 で説明されているように、永続メモリーデバイスは、ダイレクトアクセスプログラミングをサポートできます。このモードでは、I/O はカーネルのストレージスタックを回避するため、多くのデバイスマッパードライバーが使用できなくなります。
devdaxモード
devdax (デバイス DAX) モードでは、DAX キャラクターデバイスノードを使用して、永続メモリーへの raw アクセスを提供します。CPU キャッシュのフラッシュ命令とフェンシング命令を使用して、devdax デバイスのデータを作成できます。特定のデータベースおよび仮想マシンのハイパーバイザーは、devdax モードの利点を得られます。ファイルシステムは、デバイスdevdaxインスタンスでは作成できません。
rawモード
raw モードの名前空間にいくつかの制限があるため、使用すべきではありません。

28.1. ndctl を使用した永続メモリーの設定

ndctl ユーティリティを使用して、永続メモリーデバイスを設定します。ndctl ユーティリティーをインストールするには、次のコマンドを使用します。
# yum install ndctl

手順28.1 ラベルをサポートしないデバイスの永続メモリーの設定

  1. 使用可能なpmem リージョンの一覧を表示します。以下の例では、コマンドは、ラベルをサポートしない NVDIMM-N デバイスを一覧表示します。
    # ndctl list --regions
    [
      {
        "dev":"region1",
        "size":34359738368,
        "available_size":0,
        "type":"pmem"
      },
      {
        "dev":"region0",
        "size":34359738368,
        "available_size":0,
        "type":"pmem"
      }
    ]
    
    Red Hat Enterprise Linux では、各リージョンにデフォルトの名前空間が作成されます。これは、ここにある NVDIMM-N デバイスがラベルに対応していないためです。そのため、使用可能なサイズは 0 バイトです。
  2. システムでアクティブでない名前空間の一覧を表示します。
    # 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
      }
    ]
    
  3. この領域を使用できるように、非アクティブの名前空間を再構成します。たとえば、DAX に対応するファイルシステムに namespace0.0 を使用する場合は、次のコマンドを使用します。
    # ndctl create-namespace --force --reconfig=namespace0.0 --mode=fsdax --map=mem 
    {
      "dev":"namespace0.0",
      "mode":"fsdax",
      "size":"32.00 GiB (34.36 GB)",
      "uuid":"ab91cc8f-4c3e-482e-a86f-78d177ac655d",
      "blockdev":"pmem0",
      "numa_node":0
    }
    

手順28.2 ラベルをサポートするデバイスの永続メモリーの設定

  1. 使用可能なpmem リージョンの一覧を表示します。以下の例では、コマンドは、ラベルをサポートする NVDIMM-N デバイスを一覧表示します。
    # 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. NVDIMM デバイスがラベルをサポートしている場合、デフォルトの名前空間は作成されず、--force フラグまたは --reconfigure フラグを使用せずに、リージョンから 1 つ以上の名前空間を割り当てることができます。
    # ndctl create-namespace --region=region4 --mode=fsdax --map=dev --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
    }
    
    これで、同じリージョンから別の名前空間を作成できるようになります。
    # ndctl create-namespace --region=region4 --mode=fsdax --map=dev --size=36G
    {
      "dev":"namespace4.1",
      "mode":"fsdax",
      "size":"35.44 GiB (38.05 GB)",
      "uuid":"91868e21-830c-4b8f-a472-353bf482a26d",
      "blockdev":"pmem4.1",
      "numa_node":0
    }
    
    以下のコマンドを使用して、同じリージョンから異なるタイプの名前空間を作成することもできます。
    # ndctl create-namespace --region=region4 --mode=devdax --align=2M --size=36G
    {
      "dev":"namespace4.2",
      "mode":"devdax",
      "size":"35.44 GiB (38.05 GB)",
      "uuid":"a188c847-4153-4477-81bb-7143e32ffc5c",
      "daxregion":
      {
        "id":4,
        "size":"35.44 GiB (38.05 GB)",
        "align":2097152,
        "devices":[
          {
            "chardev":"dax4.2",
            "size":"35.44 GiB (38.05 GB)"
          }]
      },
        "numa_node":0
    }
    
ndctl ユーティリティーの詳細は、man ndctl を参照してください。