可能的实际解决方案的提示:

可能的实际解决方案的提示:

众所周知,除了 ECC 内存之外,还有其他方法可以帮助避免由于宇宙射线翻转 RAM 内存单元(位翻转问题)而导致的数据丢失:

位翻转问题是什么:

纠错程序:

RAM 镜像的 BIOS 实现:

软件实现:

软ECC

https://web.archive.org/web/20230119082028/https://pdos.csail.mit.edu/papers/softecc:ddopson-meng/softecc_ddopson-meng.pdf https://web.archive.org/web/20230114103624/https://pdos.csail.mit.edu/papers/softecc%3Addopson-meng/softecc_ddopson-meng.pdf

2023 年,哪些软件解决方案(例如内核实现或附加程序)可在 Linux Mint21 和 LMDE5 下使用?可能是使用类似于 ZFS RAIDZ 的端到端哈希技术,但适用于工作 RAM 内存而不是硬盘。

可能的实际解决方案的提示:

镜像内存支持:

答案1

基本上,以任何有意义的方式,您都需要硬件支持来修复内存错误,因为您的 CPU 并未设计用于执行任何错误检查或添加纠错信息:软件假定从 RAM 读取的数据是正确的。

当软件从 RAM 读取值时,它会通过一些“加载”指令告诉 CPU 它想要从内存中获取某个位置。 (这与从 ZFS 读取数据时发生的情况非常不同)

作为操作系统或其他软件,您几乎没有机会拦截未修改的软件中的读取内容 - 您所能做的就是每一个用户态读取失败,然后从内存中加载相应的页面,进行错误检查,最后返回值;除非您放弃每次将虚拟内存地址转换为线性内存地址的查找表,并使所有缓存无效,否则它在系统上每 4kB 页精确工作一次。结果是你的系统会变得超级慢——我们这里谈论的是奔腾1,因为速度上的大多数优势都来自于不这样做。如果您想要一台带有错误检查内存的非常慢的机器,我确信有硬件回收商可以为您在带有 ECC RAM 的旧服务器硬件上节省很多钱!

SoftECC 论文提出了一个实际上不适用于任何现实世界问题的解决方案:您需要实现“过时内存页面检查”(它无法保护经常写入的页面,尽管由于邻近效应,这些页面是实际上,您需要保护的那些,请参阅 Linux 中的 Row Hammer)(在现代系统上祝您好运),但您仍然会遇到巨大的性能下降。

现在,如果您正在考虑实际修改您的软件以包含完整性检查本身,那么这是可行的。例如,假设您实际上正在编写一个在 RAM 中具有大量数据缓存的数据库服务器 - 您可以自己轻松地实现校验和和更正。但接下来的问题就变成了特定应用程序的开发和通道编码问题,而不是系统上运行的所有软件的通用 RAM 保护方案。

老实说,ECC 内置于当前一代的台式机 CPU 中,许多主板都支持它,而且 ECC RAM 并没有那么昂贵:如果您需要 ECC,从架构的角度来看,硬件是实现它的正确位置,不是软件。

相关内容