配置使用持久内存-阿里云(云淘科技)
持久内存支持的使用方式和实例规格有关,本文介绍如何将持久内存配置为本地盘以及可以配置为本地盘的持久内存型实例(ecs.re7p规格和ecs.i4p规格)使用llpl库分配内存池失败的解决方案。
前提条件
持久内存适用于特定的实例规格和镜像版本,要求如下:
- 实例规格
- 作为内存使用的规格:ecs.re6p-redis、ecs.re7p、ecs.r7p重要 作为内存使用时:
- 购买后无需进行初始化即可使用。
- 无持久化特性,在停机或重启后,数据会丢失。
- 作为本地盘使用的规格:ecs.re6p、ecs.i4p重要 作为本地盘使用时:
- 购买后需要进行盘的初始化,具体操作,请参见将持久内存配置为一块本地盘。
- 具备持久化特性,但作为本地盘存储数据有丢失数据的风险,建议您做好必要的数据备份。关于本地盘的更多信息,请参见本地盘。
- 作为内存使用的规格:ecs.re6p-redis、ecs.re7p、ecs.r7p重要 作为内存使用时:
- 镜像:
- Alibaba Cloud Linux 2
- CentOS 7.6及更高版本
- Ubuntu 18.04、Ubuntu 20.04
背景信息
持久内存的访问速度比普通内存慢,但在停机或重启后,持久内存中的数据不会丢失。持久内存的使用方式包括:
- 作为内存使用:您可以将部分原本存放在普通内存中的数据存放到持久内存中,例如对访问速度要求较低的非热点数据。持久内存容量大,单GiB价格更实惠,可以帮助您大幅降低单GiB内存的整体拥有成本(TCO)。
- 作为本地盘使用:持久内存作为本地盘使用时,支持块数据读写,IO性能极高,读写延时低至170 ns。因此,您可以为需要更高稳定RT(响应时间)的核心应用数据库选用持久内存。您也可以将原有的NVMe SSD盘换成基于持久内存的本地盘,获得更高的IOPS和带宽、更低的延时,解决性能瓶颈问题。
重要 持久内存中数据的可靠性取决于物理服务器和持久内存设备的可靠性,因此存在单点故障风险。建议您在应用层做好数据冗余,将需要长期保存的业务数据存储到云盘上,以保证应用数据的可靠性。
将持久内存配置为一块本地盘
本文示例中使用的配置如下:
- 实例规格:ecs.re6p.2xlarge
- 镜像:Alibaba Cloud Linux 2.1903 LTS 64位
sudo ndctl disable-namespace all && sudo ndctl destroy-namespace all #清理namespace
sudo ndctl disable-region all && sudo ndctl zero-labels all && sudo ndctl enable-region all #清理label配置
sudo mkdir /mnt/sdb && \
sudo mount -o dax,noatime /dev/pmem0 /mnt/sdb
指标 | 持久内存(容量128 GiB) | NVMe SSD(容量1788 GiB) | ESSD云盘(容量800 GiB,性能级别PL1) |
读带宽 | 8~10 GByte/s级别 | 2~3 GByte/s级别 | 0.2~0.3 GByte/s级别 |
读写带宽 | 8~10 GByte/s级别 | 1~2 GByte/s级别 | 0.2~0.3 GByte/s级别 |
写带宽 | 2~3 GByte/s级别 | 1~2 GByte/s级别 | 0.2~0.3 GByte/s级别 |
读IOPS | 100万级别 | 50万级别 | 2~3万级别 |
读写IOPS | 100万级别 | 30万级别 | 2~3万级别 |
写IOPS | 100万级别 | 30万级别 | 2~3万级别 |
读延时 | 300~400纳秒级别 | 100000纳秒级别 | 250000纳秒级别 |
写延时 | 300~400纳秒级别 | 20000纳秒级别 | 150000纳秒级别 |
使用llpl库分配内存池失败
问题现象
可以配置为本地盘的ECS持久内存型实例(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,操作步骤如下。
pmemobj_ctl_set(NULL,”sds.at_create”,&sds_write_value)代码添加完毕后,结果如下图所示。
发表评论