- 核心观点:本文探讨了英特尔持久内存(PM)对应用程序开发的影响,重点介绍了无需修改应用即可使用PM的方法,以及通过应用程序修改使用PM的途径。
- SNIA NVM 编程模型:
- 持久内存(PM)并非传统意义上的持久性存储,而是介于内存和存储之间的高速存储介质。
- 编程模型包括存储API,如标准文件API、原始设备访问权限、用户空间管理库、文件系统、MMU映射、PM-Aware文件系统等。
- DAX(Direct Access)访问编程模型允许将PM像SSD一样使用,无需页面缓存。
- PM的使用模式:
- 作为DAX:直接访问PM,无需应用程序修改,存储API按预期工作。
- 作为挥发性容量:将PM作为主内存的扩展,无需应用程序修改。
- 作为快速SSD:将PM作为SSD使用,无需应用程序修改。
- 应用程序修改方法:
- 标准文件API:使用libpmem、libpmemlog、libpmemobj、libpmemblk等库进行内存分配、交易和持久化。
- 事务库:如libpmemobj,提供事务支持。
- 键值存储:如pmemkv,提供高层次的键值存储接口。
- 全栈示例:未修改应用程序,使用Cassandra API,通过Java容器创建pmem感知的Cassandra,调用者使用相同的API。
- 建议:
- 首先尝试使用现有的API,如为SSD层配置应用程序。
- 然后使用事务库,如libpmemobj。
- 最后使用尽可能高的抽象,如键值存储、简单的块或日志接口。
- 未来方向:
- 内核或库功能对应用程序透明。
- 更高级别的抽象。
- 更透明的用例。
- 事务库中的更多功能。
- 更多语言集成。
- 更快的远程访问。