NVDIMM编程模型原理大概推导梳理

Posted 花草清香

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NVDIMM编程模型原理大概推导梳理相关的知识,希望对你有一定的参考价值。

NVDIMM编程模型原理大概推导梳理2021

1 NVDIMM 简介

NVDIMM(Non-Volatile DIMM) 非易失性DIMM(Dual In-line Memory Module,双列直插式内存模块),即

  • 掉电不丢失数据;
  • 兼容 DIMM 插槽(通过插入内存条插槽接入计算机使用);

故俗称 pmem(persistent memory)。

2 NVDIMM 编程模型原理推导梳理

原理上 NVDIMM 可直接作为一段物理内存使用——就像一块 DRAM 一样,此时可能需要注意

  • NVDIMM 比 DIMM 还是要慢一些;
  • NVDIMM 不丢失数据,进程重启后考虑清理重启前的程序状态。

着重掉电不丢失数据,不抢占 DRAM 原本角色,将 NVDIMM 作为持久性外设使用更为常见 —— 操作系统通过内存映射(mmap)的方式对外呈现提供使用。

① 将 pmem 外设转换为文件访问;
② 在用户程序进程地址空间中分配大小为 m 的虚拟地址空间段与 fd 对应设备的容量空间形成映射关系。当指定 MAP_SYNC 等标识时表示用户程序用mmap分配的虚拟地址空间直接映射真实设备,数据读写发生于数据原所在 DRAM 内存段与真实设备之间(CPU直接将原内存中的数据通过硬件路线写于真实设备,或通过硬件线路读真实设备数据于指定内存中,由于pmem位于内存插槽中,硬件线路速度很快);
③ - ④若无指定 MAP_SYNC 等标识时,用户程序用mmap分配虚拟地址空间还将与 DRAM 物理内存页映射。当访问用户虚拟地址时,内核会分配 DRAM 内存页与用户虚拟地址空间对应,用户的数据读写在数据原在内存与mmap映射的DRAM内存页之间发生。用户程序通过调用 msync 显式地将 DRAM 内存页中的内容刷到真实设备上。 用户程序读真实设备时,CPU将数据读到 mmap虚拟地址空间对应的DRAM内存页供用户程序访问。

3 稍微再多一点点 —— CPU 缓存

mmap DAX 省去了内存层面的数据同步问题,但需在 CPU 缓存层面考虑数据同步问题,主要包括

  • 数据同步(Cache Line到设备);
  • 数据顺序(多核);

将 CPU 缓存考虑在内,mmap DAX 数据读写大概如以下简述。

memcpy 将 DRAM 中的数据读到 pmem 时会经过 CPU Cache,CPU Cache 中的数据未必都会立即回写到 pmem 中。为了保证 memcpy 的数据落到 pmem 中,需将 CPU Cache 中的数据回写到 pmem (如CLFLUSH/CLFLUSHOPT/CLWB),若需在写其他数据前保证此次数据被全部写到 pmem 中还需使用屏障指令(如SFENCE)等待 此次 CPU Cache 回写。另外,pmem一次所能接受或输出的最大数据(如32位,64位)将是硬件层面的一次原子操作。

以上是没看什么资料大概脑补的,以下是而后看到的更好的。

以上是关于NVDIMM编程模型原理大概推导梳理的主要内容,如果未能解决你的问题,请参考以下文章

NVDIMM编程模型原理大概推导梳理

NVDIMM编程模型原理大概推导梳理

NVDIMM编程模型原理大概推导梳理

FM梳理以及公式细节推导

逻辑回归算法原理是啥?

[模型学习]Attention机制及其原理推导