通过回写 (clflush) 损害 RAM
Harm the RAM via write-back (clflush)
我为 MASM 编写了这段 x86 汇编代码:
loop_start:
mov dword ptr [esp], 0
clflush dword ptr [esp]
mov dword ptr [esp], 0FFFFFFFFh
clflush dword ptr [esp]
jmp loop_start
它在无限循环中将 0 和 1 写入内存中的同一地址。
在这个例子中只是堆栈的顶部。
然后 clflush 指令强制从 cpu-cache 回写到内存。
问题是,如果这样运行一天左右,会不会及时损害内存。
因为我知道 RAM 会及时出错,例如 ssd 驱动器的可写性有限。
与闪存(用于 SSD)不同,DRAM 本质上具有无限的写入耐久性。它不会 "wear out" 从 reads/writes 比坐在那里开机快得多。
顺便说一句,movnti
或 movntps
将是绕过缓存存储的更简单方法。交替写入一对缓存行。
我为 MASM 编写了这段 x86 汇编代码:
loop_start:
mov dword ptr [esp], 0
clflush dword ptr [esp]
mov dword ptr [esp], 0FFFFFFFFh
clflush dword ptr [esp]
jmp loop_start
它在无限循环中将 0 和 1 写入内存中的同一地址。
在这个例子中只是堆栈的顶部。
然后 clflush 指令强制从 cpu-cache 回写到内存。
问题是,如果这样运行一天左右,会不会及时损害内存。
因为我知道 RAM 会及时出错,例如 ssd 驱动器的可写性有限。
与闪存(用于 SSD)不同,DRAM 本质上具有无限的写入耐久性。它不会 "wear out" 从 reads/writes 比坐在那里开机快得多。
顺便说一句,movnti
或 movntps
将是绕过缓存存储的更简单方法。交替写入一对缓存行。