Elastic Compute Service (ECS) インスタンスの永続メモリは、インスタンスタイプに基づいてメモリまたはローカルディスクとして使用できます。 このトピックでは、永続メモリをローカルディスクとして構成する方法について説明します。 このトピックでは、次の問題を解決する方法についても説明します。ローカルディスクとして永続メモリを使用できるecs.re7pまたは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) SSDを永続的なメモリベースのローカルディスクに置き換えると、より高いIOPS、より高い帯域幅、およびより低いレイテンシを提供し、パフォーマンスのボトルネックを解決できます。
永続メモリに格納されるデータの信頼性は、永続メモリデバイスとこれらのデバイスが接続されている物理サーバーの信頼性に依存します。 これは、単一障害点 (SPOF) のリスクを増大させる。 アプリケーションデータの信頼性を確保するために、アプリケーション層でデータの冗長性を実装し、長期的なデータストレージにクラウドディスクを使用することを推奨します。
永続メモリをローカルディスクとして構成する
この例では、次の設定を持つインスタンスが使用されます。
インスタンスタイプ:ecs.re6p.2xlarge
イメージ:Alibaba Cloud Linux 2.1903 LTS 64 ビット
作成したインスタンスにログインします。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
永続メモリの管理に使用するユーティリティをインストールし、すべての名前空間とラベルを削除します。
sudo yum install -y ndctl daxctl sudo ndctl disable-namespace all && sudo ndctl destroy-namespace all #Delete all namespaces. sudo ndctl disable-region all && sudo ndctl zero-labels all && sudo ndctl enable-region all #Delete all labels.
永続メモリのサイズを確認します。
ndctl list -R
次の図は、コマンド出力のサンプルを示しています。sizeパラメーターは、永続メモリのサイズを示します。
使用モードをfsdaxに設定します。
sudo ndctl create-namespace --reconfig=namespace0.0 -m fsdax --size={region-size} --force
説明{region-size} 変数を前の手順で取得したサイズ値に置き換えます。
永続メモリ (/dev/pmem) デバイスをフォーマットしてマウントします。
sudo mkfs -t ext4 /dev/pmem0 && \ sudo mkdir /mnt/sdb && \ sudo mount -o dax,noatime /dev/pmem0 /mnt/sdb
マウントされている /dev/pmemデバイスを表示します。
df -h
/dev/pmemデバイスをマウントした後、ディスクパフォーマンステストツールを使用してデバイスのパフォーマンスをテストできます。
i4pインスタンスまたはre6pインスタンスのローカルディスクのパフォーマンスをテストする方法については、「i4pインスタンスのローカルディスクのパフォーマンスのテスト」をご参照ください。
次の表に、ローカルNVMe SSD、拡張SSD (ESSD) 、および永続メモリベースのローカルディスクのパフォーマンス比較を示します。
説明次の表のパフォーマンスデータは参考用です。 テスト結果のデータが優先されます。
メトリック
128-GiB永続メモリ
1,788-GiB NVMe SSD
800-GiB ESSDのパフォーマンスレベル1 (PL1)
読み取り帯域幅
8ギガバイト/秒10ギガバイト/秒
2ギガバイト/秒3ギガバイト/秒
0.2 GB/sから0.3ギガバイト/秒
読み取り/書き込み帯域幅
8ギガバイト/秒10ギガバイト/秒
1ギガバイト/秒から2ギガバイト/秒
0.2 GB/sから0.3ギガバイト/秒
書き込み帯域幅
2ギガバイト/秒3ギガバイト/秒
1ギガバイト/秒から2ギガバイト/秒
0.2 GB/sから0.3ギガバイト/秒
読み取り IOPS
1,000,000
500,000
30,000に20,000
読み取り/書き込み IOPS
1,000,000
300,000
30,000に20,000
書き込み IOPS
1,000,000
300,000
30,000に20,000
読み取り遅延
300ナノ秒から400ナノ秒
100,000 ナノ秒
250,000 ナノ秒
書き込み遅延
300ナノ秒から400ナノ秒
20,000 ナノ秒
150,000 ナノ秒
インスタンスがLLPLを使用してメモリプールの割り当てに失敗した問題を解決する
問題の説明
ローカルディスクとして永続メモリを使用できるecs.re7pまたはecs.i4pインスタンスは、LLPLを使用してメモリプールを割り当てることができませんでした。 ヒープの作成に失敗しました。 次の図に示すように、unsafe shutdown count **
を読み取ることができませんエラーメッセージが返されます。
原因
デフォルトでは、LLPLソースコードでunsafe shutdown detection
が有効になっています。 しかしながら、仮想化不揮発性メモリ (NVM) は、安全でないシャットダウン検出
をサポートしない。 詳細は、「llpl」をご参照ください。
解決策
LLPLソースコードで安全でないシャットダウン検出
を無効にするには、次の手順を実行します。
LLPLソースコードのsrc/main/cpp/com_intel_pmem_llpl_AnyHeap.cppファイルに次のコードを追加します。
intsds_write_value=0; pmemobj_ctl_set(NULL,"sds.at_create",&sds_write_value)
次の図は、上記のコードがファイルに追加されていることを示しています。
インスタンスにログインします。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを実行して、LLPLを使用してテストケースを実行します。
mvn clean && mvn test -Dtest.heap.path=/mnt/sdb
"ヒープの作成に失敗した場合。 unsafe shutdown count **" エラーメッセージが返されません。メモリプールの割り当てに進むことができます。