すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:Configure the usage mode of persistent memory

最終更新日:May 09, 2025

Elastic Compute Service (ECS) インスタンスの永続メモリは、インスタンスタイプに基づいてメモリまたはローカルディスクとして使用できます。このトピックでは、永続メモリをローカルディスクとして設定する方法について説明します。また、永続メモリをローカルディスクとして使用できる ecs.re6p または ecs.i4p 永続メモリ最適化インスタンスで、Low-Level Persistence Library (LLPL) を使用してメモリプールを割り当てられなかった場合の解決方法についても説明します。

前提条件

永続メモリは、以下のインスタンスタイプとイメージバージョンに適しています。

  • インスタンスタイプ

    • 永続メモリをメモリとして使用できるインスタンスファミリー: ecs.re6p-redis

      重要

      インスタンスで永続メモリをメモリとして使用する場合、以下の状況が発生します。

      • 永続メモリを初期化する必要はなく、インスタンスを購入後すぐに使用できます。

      • メモリとして使用される永続メモリはデータの永続性を提供しないため、インスタンスが停止または再起動されると、永続メモリに保存されているデータは失われます。

    • 永続メモリをローカルディスクとして使用できるインスタンスファミリー: ecs.re6p および ecs.i4p

      重要

      インスタンスで永続メモリをローカルディスクとして使用する場合、以下の状況が発生します。

      • インスタンスを購入した後に、永続メモリを初期化できます。詳細については、このトピックの永続メモリをローカルディスクとして設定するセクションをご参照ください。

      • ローカルディスクとして使用される永続メモリはデータの永続性を提供しますが、データ損失が発生する可能性があります。事前にデータをバックアップすることをお勧めします。ローカルディスクの詳細については、「ローカルディスク」をご参照ください。

  • イメージバージョン

    • Alibaba Cloud Linux 2

    • CentOS 7.6 以降

    • Ubuntu 18.04 および 20.04

背景情報

永続メモリは通常のメモリに比べてアクセスレイテンシが高くなりますが、費用対効果が高く、ローカルストレージとしての使用に適しています。永続メモリに保存されたデータは、インスタンスを停止または再起動しても保持されます。永続メモリは、メモリまたはローカルディスクとして使用できます。

  • 永続メモリをメモリとして使用する場合、高速ストレージアクセスを必要としない非ホットデータなど、一部のデータを通常のメモリから永続メモリに移動できます。永続メモリは、GiB あたりの価格が低い大容量を提供し、メモリ GiB あたりの総所有コスト (TCO) を削減するのに役立ちます。

  • 永続メモリをローカルディスクとして使用する場合、ブロックレベルの読み取り/書き込み操作をサポートし、超高 I/O パフォーマンスと 170 ナノ秒という低レイテンシを実現します。一貫した応答時間を必要とするコアアプリケーションデータベースに永続メモリを使用できます。NVMe (Non-Volatile Memory Express) SSD を永続メモリベースのローカルディスクに置き換えることで、より高い IOPS、より高い帯域幅、より低いレイテンシを提供し、パフォーマンスボトルネックを解消できます。

重要

永続メモリに保存されたデータの信頼性は、永続メモリデバイスの信頼性と、これらのデバイスが接続されている物理サーバーの信頼性によって異なります。単一障害点のリスクが存在します。アプリケーションデータの信頼性を確保するために、アプリケーション層でデータ冗長性を実装し、クラウドディスクを長期データストレージに使用することをお勧めします。

永続メモリをローカルディスクとして設定する

この例では、以下の構成を持つインスタンスを使用します。

  • インスタンスタイプ: ecs.re6p.2xlarge

  • イメージ: Alibaba Cloud Linux 2.1903 LTS 64 ビット

  1. 作成したインスタンスにログオンします。

    詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。

  2. 次のコマンドを実行して、永続メモリを管理するために使用されるユーティリティをインストールし、すべての名前空間とラベルを削除します。

    sudo yum install -y ndctl daxctl
    sudo ndctl disable-namespace all && sudo ndctl destroy-namespace all #すべての名前空間を削除します。
    sudo ndctl disable-region all && sudo ndctl zero-labels all && sudo ndctl enable-region all #すべてのラベルを削除します。
  3. 永続メモリのサイズを確認します。

    ndctl list -R

    次の図は、コマンド出力の例を示しています。ここで、size パラメーターは永続メモリのサイズを示します。

    查询持久内存大小

  4. 使用モードを fsdax に設定します。

    sudo ndctl create-namespace --reconfig=namespace0.0 -m fsdax --size={region-size} --force
    説明

    {region-size} 変数を前の手順で取得した size 値に置き換えます。

    11.png

  5. 次のコマンドを実行して、永続メモリ (/dev/pmem) デバイスをフォーマットしてマウントします。

    sudo mkfs -t ext4 /dev/pmem0
    sudo mkdir /mnt/sdb
    sudo mount -o dax,noatime /dev/pmem0 /mnt/sdb
  6. マウントされた /dev/pmem デバイスを表示します。

    df -h

    pmem-as-ssd

    /dev/pmem デバイスがマウントされた後、ディスクパフォーマンステストツールを使用してデバイスのパフォーマンスをテストできます。

    i4p または re6p インスタンスのローカルディスクのパフォーマンスをテストする方法については、このトピックのi4p インスタンスのローカルディスクのパフォーマンスをテストするセクションをご参照ください。

i4p インスタンスのローカルディスクのパフォーマンスをテストする

この例では、次の構成とテストツールを使用します。

  • インスタンスタイプ: ecs.i4p.2xlarge

  • イメージ: Alibaba Cloud Linux 2.1903 LTS 64 ビット

  • テストツール: flexible I/O tester (fio)。fio は、ランダム読み取り/書き込み操作やシーケンシャル読み取り/書き込み操作など、ブロックストレージデバイスのパフォーマンスメトリックをテストできる、オープンソースの強力な I/O パフォーマンステストツールです。

  1. fio ツールはデータ損失を引き起こす可能性があります。ローカルディスクのパフォーマンスをテストする前に、テストするローカルディスクにデータが含まれていないことを確認してください。

  2. データを含むローカルディスクをテストする必要がある場合は、ディスクのパフォーマンスをテストする前にディスクデータをバックアップしてください。詳細については、「ローカルディスクのデータをバックアップする」をご参照ください。

  3. ECS インスタンスに接続します。

    詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。

  4. 次のコマンドを実行して、fio ツールをインストールします。

    sudo yum install -y ndctl daxctl ipmctl libpmem librpmem libpmemblk libpmemlog libpmemobj libpmempool pmempool fio
  5. コマンドを実行して、ローカルディスクのパフォーマンスをテストします。

    • サンプルコマンドについては、このトピックのIOPS をテストするスループットをテストする、およびレイテンシをテストするセクションをご参照ください。

      重要

      テストを連続して実行する場合は、各テストの後に sudo rm /mnt/sdb/* -rf コマンドを実行して、ローカルディスク上の前のテストの残留結果を削除し、次のテストのためにクリーンな環境を準備します。

    • 次の表は、ローカル NVMe (Non-Volatile Memory Express) SSD、企業向け SSD (ESSD)、および永続メモリベースのローカルディスクのパフォーマンス比較を示しています。

      説明

      次の表のパフォーマンスデータは参考値です。テスト結果のデータが優先されます。

      メトリック

      128 GiB 永続メモリ

      1,788 GiB NVMe SSD

      800 GiB ESSD (パフォーマンスレベル 1 (PL1))

      読み取り帯域幅

      8 GB/s ~ 10 GB/s

      2 GB/s ~ 3 GB/s

      0.2 GB/s ~ 0.3 GB/s

      読み取り/書き込み帯域幅

      8 GB/s ~ 10 GB/s

      1 GB/s ~ 2 GB/s

      0.2 GB/s ~ 0.3 GB/s

      書き込み帯域幅

      2 GB/s ~ 3 GB/s

      1 GB/s ~ 2 GB/s

      0.2 GB/s ~ 0.3 GB/s

      読み取り IOPS

      1,000,000

      500,000

      20,000 ~ 30,000

      読み取り/書き込み IOPS

      1,000,000

      300,000

      20,000 ~ 30,000

      書き込み IOPS

      1,000,000

      300,000

      20,000 ~ 30,000

      読み取りレイテンシ

      300 ナノ秒~ 400 ナノ秒

      100,000 ナノ秒

      250,000 ナノ秒

      書き込みレイテンシ

      300 ナノ秒~ 400 ナノ秒

      20,000 ナノ秒

      150,000 ナノ秒

IOPS をテストする

  • ローカルディスクのシーケンシャル読み取り IOPS をテストする

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=8 --iodepth=1 --rw=read --bs=4k --size=8GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • ローカルディスクのシーケンシャル書き込み IOPS をテストする

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=8 --iodepth=1 --rw=write --bs=4k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • ローカルディスクのランダム読み取り IOPS をテストする

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=8 --iodepth=1 --rw=randread --bs=4k --size=8GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • ローカルディスクのランダム書き込み IOPS をテストする

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=8 --iodepth=1 --rw=randwrite --bs=4k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split

スループットをテストする

  • ローカルディスクのシーケンシャル読み取りスループットをテストする

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=96 --iodepth=1 --rw=read --bs=64k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • ローカルディスクのシーケンシャル書き込みスループットをテストする

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=1 --numjobs=8 --iodepth=1 --rw=write --bs=64k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • ローカルディスクのランダム読み取りスループットをテストする

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=96 --iodepth=1 --rw=randread --bs=64k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • ローカルディスクのランダム書き込みスループットをテストする

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=8 --numjobs=96 --iodepth=1 --rw=randwrite --bs=64k --size=1GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split

レイテンシをテストする

  • ローカルディスクのシーケンシャル読み取りレイテンシをテストする

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=1 --numjobs=1 --iodepth=1 --rw=read --bs=4k --size=8GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split
  • ローカルディスクのシーケンシャル書き込みレイテンシをテストする

    sudo fio --name=test --directory=/mnt/sdb --ioengine=libpmem --direct=1 --thread=1 --numjobs=1 --iodepth=1 --rw=write --bs=4k --size=8GB --norandommap=1 --randrepeat=0 --invalidate=1 --iodepth_batch=1 --sync=1 --scramble_buffers=0 --numa_cpu_nodes=0 --numa_mem_policy=bind:0 --cpus_allowed_policy=split

インスタンスが LLPL を使用してメモリプールを割り当てられなかった問題を解決する

問題の説明

永続メモリをローカルディスクとして使用できる ecs.re7p または ecs.i4p インスタンスで、LLPL を使用してメモリプールを割り当てられませんでした。Failed to create heap. Cannot read unsafe shutdown count** というエラーメッセージが返されます。问题现象

原因

デフォルトでは、LLPL ソースコードでunsafe shutdown detection が有効になっています。ただし、仮想化された不揮発性メモリ (NVM) はunsafe shutdown detection をサポートしていません。詳細については、「llpl」をご参照ください。

解決策

LLPL ソースコードで unsafe shutdown detection を無効にするには、次の手順を実行します。

  1. LLPL ソースコードの src/main/cpp/com_intel_pmem_llpl_AnyHeap.cpp ファイルに次のコードを追加します。

    int sds_write_value=0;
    pmemobj_ctl_set(NULL,"sds.at_create",&sds_write_value)

    次の図は、上記のコードがファイルに追加されていることを示しています。

    AnyHeap

  2. インスタンスにログオンします。

    詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。

  3. 次のコマンドを実行して、LLPL を使用してテストケースを実行します。

    mvn clean && mvn test -Dtest.heap.path=/mnt/sdb

    "Failed to create heap. Cannot read unsafe shutdown count**" というエラーメッセージが返されない場合は、メモリプールの割り当てに進むことができます。