Persistent memory 区分易失变量和持久变量,会影响正确性吗?

Persistent memory 区分易失变量和持久变量,会影响正确性吗?,persistent-memory,Persistent Memory,从我对持久性编程模型的理解来看,程序员应该正确区分易变变量和持久性变量。持久变量需要某种原子更新,以便在发生电源故障时,恢复程序可以将程序的数据清理到一致状态 例如,如果使用持久内存支持的程序将节点插入链表的开头,则必须执行以下操作: 创建包含新数据的新节点 将“下一个”指针链接到链接列表的当前标题 然后更新头指针以指向新节点 必须使用撤消日志或重做日志执行每个步骤,以帮助恢复程序保持数据的一致状态。此外,每个步骤都必须通过刷新和围栏来保持 程序员想要确定哪些变量必须在失败中幸存,哪些不重要,这

从我对持久性编程模型的理解来看,程序员应该正确区分易变变量和持久性变量。持久变量需要某种原子更新,以便在发生电源故障时,恢复程序可以将程序的数据清理到一致状态

例如,如果使用持久内存支持的程序将节点插入链表的开头,则必须执行以下操作:

  • 创建包含新数据的新节点
  • 将“下一个”指针链接到链接列表的当前标题
  • 然后更新头指针以指向新节点
  • 必须使用撤消日志或重做日志执行每个步骤,以帮助恢复程序保持数据的一致状态。此外,每个步骤都必须通过刷新和围栏来保持

    程序员想要确定哪些变量必须在失败中幸存,哪些不重要,这样他们就不需要开销(“日志”和“刷新和隔离”)。这比听起来要困难得多,而且有很多关于它的研究和工具

    现在是我的问题。假设我对持久性编程模型的理解是正确的,那么将所有可变变量(例如,循环计数器)视为持久性变量会是错误的吗?我知道这会造成巨大的开销,被认定为“性能缺陷”。如果在任何情况下,持久化可变变量会影响恢复程序的正确性,我将不胜感激


    谢谢。

    从持久性内存分配易失性变量是完全正常的。通常,您希望从持久内存中分配对性能不敏感的易失性变量,以利用其更高的容量。与DRAM相比,持久性内存的延迟和带宽较低,这是造成性能开销的主要原因。不经常访问或具有高时间局部性的对象是持久内存的良好候选对象。那些不常被访问的可能对性能影响很小或可以忽略不计。那些具有高时间局部性的内存很可能从缓存层次结构中访问,因此持久内存的性能在启动阶段之后是无关紧要的

    不过,您必须使用正确的API。支持volatile语义的持久内存编程模型将提供与持久性语义不同的内存分配和释放API。这一重要区别是必需的,因为当应用程序终止时,系统应该自动回收持久内存中的易失性区域

    如果持久性内存硬件没有内置的加密支持,那么安全性可能会成为一个问题。恶意用户或应用程序可以访问“易失性”状态