Memori persisten pada instance Elastic Compute Service (ECS) dapat digunakan sebagai memori atau disk lokal tergantung pada tipe instance. Topik ini menjelaskan cara mengonfigurasi memori persisten sebagai disk lokal dan menyelesaikan masalah berikut: Instance yang dioptimalkan untuk memori persisten seperti ecs.re6p atau ecs.i4p gagal mengalokasikan kolam memori menggunakan Low-Level Persistence Library (LLPL).
Prasyarat
Memori persisten kompatibel dengan tipe instance dan versi gambar berikut:
Tipe instance
Keluarga instance di mana memori persisten dapat digunakan sebagai memori: ecs.re6p-redis
PentingJika Anda menggunakan memori persisten sebagai memori pada instance, perhatikan situasi berikut:
Anda dapat langsung menggunakan memori persisten setelah membeli instance tanpa perlu inisialisasi.
Memori persisten yang digunakan sebagai memori tidak menyediakan persistensi data, sehingga data akan hilang saat instance dihentikan atau di-restart.
Keluarga instance di mana memori persisten dapat digunakan sebagai disk lokal: ecs.re6p dan ecs.i4p
PentingJika Anda menggunakan memori persisten sebagai disk lokal pada instance, perhatikan situasi berikut:
Anda perlu menginisialisasi memori persisten setelah membeli instance. Untuk informasi lebih lanjut, lihat bagian Konfigurasikan memori persisten sebagai disk lokal dalam topik ini.
Memori persisten yang digunakan sebagai disk lokal menyediakan persistensi data tetapi dapat menyebabkan kehilangan data. Kami merekomendasikan agar Anda mencadangkan data terlebih dahulu. Untuk informasi lebih lanjut tentang disk lokal, lihat Disk Lokal.
Versi gambar
Alibaba Cloud Linux 2
CentOS 7.6 dan yang lebih baru
Ubuntu 18.04 dan 20.04
Informasi latar belakang
Memori persisten memiliki latensi akses lebih tinggi dibandingkan memori reguler, namun harganya lebih ekonomis dan cocok untuk penyimpanan lokal. Data yang disimpan dalam memori persisten tetap ada meskipun instance dihentikan atau di-restart. Memori persisten dapat digunakan baik sebagai memori maupun disk lokal.
Ketika digunakan sebagai memori, Anda dapat memindahkan data non-hot dari memori reguler ke memori persisten. Memori persisten menawarkan kapasitas besar dengan harga per GiB lebih rendah, membantu mengurangi total biaya kepemilikan (TCO).
Ketika digunakan sebagai disk lokal, memori persisten mendukung operasi baca/tulis tingkat blok dengan kinerja I/O ultra-tinggi dan latensi serendah 170 nanodetik. Anda dapat mengganti SSD NVMe dengan disk lokal berbasis memori persisten untuk meningkatkan IOPS, bandwidth, serta menurunkan latensi.
Keandalan data dalam memori persisten bergantung pada keandalan perangkat dan server fisik tempat perangkat tersebut terpasang. Risiko titik kegagalan tunggal tetap ada. Untuk memastikan keandalan data aplikasi, kami merekomendasikan penerapan redundansi data di lapisan aplikasi dan penggunaan cloud disk untuk penyimpanan jangka panjang.
Konfigurasikan memori persisten sebagai disk lokal
Contoh berikut menggunakan instance dengan konfigurasi berikut:
Tipe instance: ecs.re6p.2xlarge
Gambar: Alibaba Cloud Linux 2.1903 LTS 64-bit
Masuk ke instance yang telah dibuat.
Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk terhubung ke instance Linux melalui SSH.
Jalankan perintah berikut untuk menginstal utilitas manajemen memori persisten dan menghapus semua namespace serta label:
sudo yum install -y ndctl daxctl sudo ndctl disable-namespace all && sudo ndctl destroy-namespace all #Hapus semua namespace. sudo ndctl disable-region all && sudo ndctl zero-labels all && sudo ndctl enable-region all #Hapus semua label.Periksa ukuran memori persisten.
ndctl list -RGambar berikut menunjukkan contoh keluaran perintah, di mana parameter size menunjukkan ukuran memori persisten.

Atur mode penggunaan ke fsdax.
sudo ndctl create-namespace --reconfig=namespace0.0 -m fsdax --size={region-size} --forceCatatanGantikan variabel {region-size} dengan nilai ukuran yang diperoleh pada langkah sebelumnya.

Jalankan perintah berikut untuk memformat dan memasang perangkat memori persisten (/dev/pmem):
sudo mkfs -t ext4 /dev/pmem0 sudo mkdir /mnt/sdb sudo mount -o dax,noatime /dev/pmem0 /mnt/sdbLihat perangkat /dev/pmem yang telah dipasang.
df -h
Setelah perangkat /dev/pmem dipasang, Anda dapat menggunakan alat uji kinerja disk untuk menguji kinerja perangkat tersebut.
Untuk informasi tentang cara menguji kinerja disk lokal pada instance i4p atau re6p, lihat bagian Uji kinerja disk lokal pada instance i4p dari topik ini.
Uji kinerja disk lokal pada instance i4p
Contoh berikut menggunakan konfigurasi dan alat uji berikut:
Tipe instance: ecs.i4p.2xlarge
Gambar: Alibaba Cloud Linux 2.1903 LTS 64-bit
Alat uji: flexible I/O tester (fio). fio adalah alat benchmarking kinerja I/O open source yang kuat untuk menguji metrik kinerja perangkat penyimpanan blok, seperti operasi baca dan tulis acak serta berurutan.
Alat fio dapat menyebabkan kehilangan data. Pastikan bahwa disk lokal yang ingin Anda uji tidak berisi data sebelum melakukan pengujian.
Jika Anda harus menguji disk lokal yang berisi data, cadangkan data disk sebelum melakukan pengujian. Untuk informasi lebih lanjut, lihat Cadangkan data pada disk lokal.
Hubungkan ke instance ECS.
Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk terhubung ke instance Linux melalui SSH.
Jalankan perintah berikut untuk menginstal alat fio:
sudo yum install -y ndctl daxctl ipmctl libpmem librpmem libpmemblk libpmemlog libpmemobj libpmempool pmempool fioJalankan perintah untuk menguji kinerja disk lokal.
Untuk informasi tentang perintah contoh, lihat bagian Uji IOPS, Uji throughput, dan Uji latensi dari topik ini.
PentingJika Anda melakukan pengujian secara berturut-turut, jalankan perintah
sudo rm /mnt/sdb/* -rfsetelah setiap pengujian untuk menghapus hasil sisa dari pengujian sebelumnya dan menyiapkan lingkungan bersih untuk pengujian berikutnya.Tabel berikut menjelaskan perbandingan kinerja antara disk lokal Non-Volatile Memory Express (NVMe) SSD, Enterprise SSD (ESSD), dan disk lokal berbasis memori persisten.
CatatanData kinerja dalam tabel berikut hanya untuk referensi. Data dalam hasil pengujian Anda yang berlaku.
Metric
128-GiB memori persisten
1.788-GiB NVMe SSD
800-GiB ESSD pada level performa 1 (PL1)
Bandwidth baca
8 GB/s hingga 10 GB/s
2 GB/s hingga 3 GB/s
0,2 GB/s hingga 0,3 GB/s
Bandwidth baca/tulis
8 GB/s hingga 10 GB/s
1 GB/s hingga 2 GB/s
0,2 GB/s hingga 0,3 GB/s
Bandwidth tulis
2 GB/s hingga 3 GB/s
1 GB/s hingga 2 GB/s
0,2 GB/s hingga 0,3 GB/s
IOPS baca
1.000.000
500.000
20.000 hingga 30.000
IOPS baca/tulis
1.000.000
300.000
20.000 hingga 30.000
IOPS tulis
1.000.000
300.000
20.000 hingga 30.000
Latensi baca
300 nanodetik hingga 400 nanodetik
100.000 nanodetik
250.000 nanodetik
Latensi tulis
300 nanodetik hingga 400 nanodetik
20.000 nanodetik
150.000 nanodetik
Uji IOPS
Uji IOPS baca berurutan dari disk lokal
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=splitUji IOPS tulis berurutan dari disk lokal
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=splitUji IOPS baca acak dari disk lokal
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=splitUji IOPS tulis acak dari disk lokal
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
Uji throughput
Uji throughput baca berurutan dari disk lokal
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=splitUji throughput tulis berurutan dari disk lokal
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=splitUji throughput baca acak dari disk lokal
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=splitUji throughput tulis acak dari disk lokal
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
Uji latensi
Uji latensi baca berurutan dari disk lokal
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=splitUji latensi tulis berurutan dari disk lokal
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
Selesaikan masalah bahwa instance gagal mengalokasikan kolam memori menggunakan LLPL
Deskripsi masalah
Instance ecs.re7p atau ecs.i4p, di mana memori persisten dapat digunakan sebagai disk lokal, gagal mengalokasikan kolam memori menggunakan LLPL. Pesan kesalahan Failed to create heap. Cannot read unsafe shutdown count** dikembalikan.
Penyebab
Secara default, unsafe shutdown detection diaktifkan dalam kode sumber LLPL. Namun, memori non-volatile (NVM) virtual tidak mendukung unsafe shutdown detection. Untuk informasi lebih lanjut, lihat llpl.
Solusi
Lakukan langkah-langkah berikut untuk menonaktifkan unsafe shutdown detection dalam kode sumber LLPL:
Tambahkan kode berikut ke file src/main/cpp/com_intel_pmem_llpl_AnyHeap.cpp dari kode sumber LLPL:
int sds_write_value=0; pmemobj_ctl_set(NULL,"sds.at_create",&sds_write_value)Gambar berikut menunjukkan bahwa kode di atas telah ditambahkan ke file.

Masuk ke instance.
Untuk informasi lebih lanjut, lihat Gunakan Workbench untuk terhubung ke instance Linux melalui SSH.
Jalankan perintah berikut untuk menjalankan kasus uji menggunakan LLPL:
mvn clean && mvn test -Dtest.heap.path=/mnt/sdbJika pesan kesalahan "Failed to create heap. Cannot read unsafe shutdown count**" tidak dikembalikan, Anda dapat melanjutkan untuk mengalokasikan kolam memori.