问题标签 [persistent-memory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 在 PCIe 中写入持久内存
我想在英特尔 Linux 系统上的 PCIe 设备 (FPGA) 中读取和写入持久性内存(现在测试 ddr 已连接)。
内存显示在特定的条形图中(比如条形 2)。如何访问此持久内存。我查看了 PMDK 库中的示例,但找不到任何示例。
当我查看libpmem 库时,我确实找到了映射 api pmem_map_file()
,但没有选择栏的规定。
可以使用mmap()
通话吗?目前我正在使用如下所示的方式使用 uio 驱动程序访问我的栏。我需要对 mmmap pmmem 内存进行任何更改吗?
谁能给我一些关于这个的想法。
assembly - RISC-V 指令将脏缓存行写入下一级缓存
是否有任何 RISC-V 指令将脏缓存行写回下一级缓存或主内存,如x86 中的 clwb 或ARMv8 -A 中的cvac ?
我想确保对非易失性持久内存的承诺。
我的意图是为 RISC-V 改编下面提到的 ARMv8_A 代码并在 Gem5 中执行它。
#代码
assembly - clwb 是否负责写入存储缓冲区?
Intel 软件手册说clwb “将缓存行(如果已修改)写回内存,其中包含使用缓存一致性域中任何级别的缓存层次结构中的内存操作数指定的线性地址。该行可能会保留在缓存层次结构中未修改状态。 clwb 是根据对缓存行的较旧写入进行排序的“
我的问题是,在下面的伪代码中
clwb 是否负责写入存储缓冲区?或者在使用 clwb 之前,我是否需要在写入之后进行 sfence,例如
我想知道“sfence”是否真的需要?谢谢
.net - 在持久 RAM 上运行 .NET?
我在内存中有大量索引,可以在庞大的数据集中快速搜索。构建索引需要很长时间,而且将它们的快照从磁盘反序列化到内存也需要很长时间。他们用掉了很多珍贵/昂贵的内存。我确实尝试使用一种自定义搜索阅读器直接从磁盘使用索引,该搜索阅读器只是即时反序列化所需的位。这工作得非常好,但在多线程环境中确实存在一些关于锁、并发、版本控制等严重缺陷。当然,它并不是超快的。
无论如何,我想知道“持久性 RAM”(NVMe、Optane..?)是否可以帮助我。我不确定我是否完全理解它们应该如何使用,但它们似乎填补了 HDD/SSD 和 DDR-RAM 之间的空白?它们的成本低于 RAM,但比 SSD 快,并且持久。
所以我希望以某种方式直接在持久 RAM 上运行 .NET 程序,使用我的索引,而不必在重新启动之间来回将其序列化到 SSD。那将是梦想成真!
如果不将整个 .NET 程序放在持久性 RAM 中,也许还有其他方法可以从 .NET 与其交互?即使它只是写入和读取字节?
x86 - DC PMM(内存模式)缓存一致性如何表现?
当前设置:
当今大多数最新的英特尔架构都具有非包容性 L3 缓存,其中每个切片 (+CHA) 都包含一个“窥探过滤器”,其中包含 L3 目录在包容性情况下将提供的位置信息(这种设计选择可能会避免一致性消息占用超过网状带宽)。大多数还默认启用“内存目录”,可用于过滤远程监听或以其他方式更改一致性事务的本地和远程部分的时间属性。当访问属于不同套接字的内存位置时,RFO 直接发送到 QPI/UPI 环,而不是 L3+CHA。内核复制 L3 维护的源地址解码器 (SAD) 寄存器,这些寄存器确定哪个 NUMA 节点负责物理地址。一旦 RFO 到达负责的家乡代理,它决定是否必须将窥探发送到其他套接字/内核并响应调用者(可以并行执行此操作)。如果带宽可用,还有 OSB 可以让 L3 进行推测性窥探。
“内存目录”是与 DRAM 中的高速缓存行数据一起定位的一个或多个位,指示另一个相干域是否可能具有高速缓存行的修改副本。
这些位不会针对来自本地核心/缓存的负载进行更新,因为 L3/CHA 会跟踪它。在 M 状态高速缓存行回写失效后,内存目录位被清除,因为只有一个 L3/CHA 可以使高速缓存行处于 M 状态。
英特尔 DC PMEM、
From、英特尔® 64 和 IA-32 架构优化参考手册第 2.1.31 节
(我想是在内存模式下,尽管他们没有在该节中指定)
在具有多个处理器的系统上,目录用于缓存一致性。该目录实现为分布式内存目录,每个缓存行的一致性状态存储在内存中行本身的元数据中。
如果不同处理器中的内核重复读取 Intel Optane DC Persistent Memory Module 中的同一组行,则每次都会对 Intel Optane DC Persistent Memory Module 进行多次写入,记录一致性状态的变化。
这表明 PMM 使用内存目录。
这些写入被称为“目录写入”并且在本质上往往是随机的。因此,其中一些写入会降低应用程序可用的有效 Intel Optane DC Persistent Memory Module 带宽。
在类似的设置中,普通 DRAM 也会遭受随机目录写入的影响吗?还是在具有 48GB/s 写入 b/w 而 PMM 只有 ~2.3GB/s (1)
的 DRAM 中无关紧要?
当 DRAM 内存目录存在时,为什么 PMM 需要使用目录一致性协议?
Optane DC Persistent Memory Module 可能被不同的线程访问,如果观察到这种模式,需要考虑的一个选项是通过禁用目录系统范围。
对远程 PMM 的 RDMA 请求是否也需要通过远程 DRAM?
c - 系统崩溃时 clflush 或 clflushopt 是原子的吗?
通常,高速缓存行是 64B,但非易失性存储器的原子性是 8B。
例如:
x
缓存行对齐,最初设置为0
.
系统崩溃clflush();
重启后可以吗?</
x[1]=0
p >x[2]=100
x86 - 为什么“movnti”后跟“sfence”保证持久排序?
SFENCE 防止 NT 存储在 SFENCE 本身之前从存储缓冲区提交。
因此 SFENCE 只能保证数据进入 LFB 的顺序。
例如,
这里的 SFENCE 只能保证第一个 NT 存储将比下一个更早地提交到 LFB。但是,由于 LFB 是易失性的,因此数据尚未持久化。进入LFB的数据会按照进入的顺序持久化吗?
kubernetes - 无法在 kubernetes 1.20 中安装到持久内存支持的本地持久卷
我正在尝试使 k8s pod 能够在不使用privileged mode
. 我正在尝试的方法是在 k8s 中使用 PVC 在 fsdax 目录之上创建一个本地 PV,并让我的 pod 使用它。但是,我总是得到MountVolume.NewMounter initialization failed ... : path does not exist
错误。
这是我的 yaml 文件和 PMEM 状态:
存储类 yaml:
PV yaml:
聚氯乙烯:
豆荚yaml:
一些状态和 k8s 输出:
它在抱怨path "/mnt/pmem0/vol1" does not exist
,但它确实存在:
除了使用 local-PV,我还尝试了:
PMEM-CSI。但是 PMEM-CSI 方法被容器 / 内核问题阻止了我:https ://github.com/containerd/containerd/issues/3221
光伏。当我尝试创建由 PMEM 支持的 PV 时,pod 无法正确声明 PMEM 存储,但始终作为覆盖 fs 安装
/
在主机之上。
任何人都可以提供一些帮助吗?非常感谢!
performance - Linux 如何在内存模式下处理 Intel 的 Optane Persistent Memory Modules?
我想知道当底层系统在内存模式下使用持久内存模块(近内存 DRAM 缓存和 NVRAM 作为主内存)时,Linux 内核是否做了任何特别的事情或执行了任何优化。我试过查看驱动程序/nvdimm,但似乎这里的所有内容都集中在 App Direct 模式下,您在 DAX 文件中进行 MMAP,但在内存模式下,它在语义和语法上与使用 DRAM 没有什么不同。
Linux 是否采用了任何优化,或者一切都在硬件中处理?有人可以将我链接到在 Linux 内核中执行任何内存模式优化的位置吗?提前致谢!