持久内存支持的使用方式和实例规格有关,本文介绍如何配置将持久内存配置为本地盘或者内存以及持久内存型实例(ecs.re7p规格和ecs.re6p规格)使用llpl库分配内存池失败的解决方案。
前提条件
- Alibaba Cloud Linux 2
- CentOS 7.6及更高版本
- Ubuntu 18.10及更高版本
- SUSE Linux 12 SP4及更高版本
背景信息
- 作为内存使用:您可以将部分原本存放在普通内存中的数据存放到持久内存中,例如对访问速度要求较低的非热点数据。持久内存容量大,单GiB价格更实惠,可以帮助您大幅降低单GiB内存的整体拥有成本(TCO)。
- 作为本地盘使用:持久内存作为本地盘使用时,支持块数据读写,IO性能极高,读写延时低至170 ns。因此,您可以为需要更高稳定RT(响应时间)的核心应用数据库选用持久内存。您也可以将原有的NVME SSD盘换成基于持久内存的本地盘,获得更高的IOPS和带宽、更低的延时,解决性能瓶颈问题。
注意 持久内存中数据的可靠性取决于物理服务器和持久内存设备的可靠性,因此存在单点故障风险。建议您在应用层做好数据冗余,将需要长期保存的业务数据存储到云盘上,以保证应用数据的可靠性。
- 作为内存或本地盘使用:ecs.re6p规格
- 作为内存使用:ecs.re6p-redis.<nx>large规格、ecs.re7p规格和ecs.r7p规格
- 作为本地盘使用:ecs.i4p.2xlarge、ecs.i4p.4xlarge、ecs.i4p.6xlarge、ecs.i4p.8xlarge、ecs.i4p.16xlarge、ecs.i4p.32xlarge
本文示例中使用的配置如下:
- 实例规格:ecs.re6p.2xlarge
- 镜像:Alibaba Cloud Linux 2.1903 LTS 64位
将持久内存配置为一块内存
您可以通过memkind工具分配内存空间,关于如何使用memkind,请参见memkind。
将持久内存配置为一块本地盘
使用llpl库分配内存池失败
问题现象
ECS持久内存型实例(ecs.re7p规格和ecs.re6p规格)使用llpl库分配内存池失败,提示信息
Failed to create heap. Cannot read unsafe shutdown count**
,如下图所示。
可能原因
llpl源码默认启用unsafe shutdown detection
,而非易失性存储器NVM虚拟化后不支持启用unsafe shutdown detection
。更多信息,请参见llpl。
解决方案
在llpl源码中关闭unsafe shutdown detection
,操作步骤如下。