设为首页收藏本站

 找回密码
 立即注册

只需一步,快速开始

搜索
查看: 114|回复: 1

MemoryDiagnostics内存诊断工具

[复制链接]

尚未签到

灌水成绩
1
6
595
主题
帖子
积分

等级头衔

ID : 1230

测量学徒

积分成就 测量币 : 595
在线时间 : 0 小时
注册时间 : 2025-12-7
最后登录 : 2026-5-17

勋章
UID勋章测量学徒
发表于 2025-12-23 02:21:07 | 显示全部楼层 |阅读模式 IP:广东东莞
最终测试需以MEMTEST86 引导加载测试为准。
这个工具运行在WIN系统受系统束缚,可以检测到大部门的内存问题,但这不是最闭幕论,比如我也在MEMTEST86测到内存条有上万个错误,但现实上是两条内存老化了,降频运行即可稳定运行。如果我直接采信MEMTEST86按现在内存比肩黄金的价格,必要自掏3千大洋换普条内存。。。。。。

所以有了这个工具,这个工具多次检测均未发现内存和主板有信号和稳定性问题,那么结果已经指向主板内存点亮匹配的自动练习的时序过紧,大概导致偶发性蓝屏。解除XMP降频运行,偶发蓝屏问题彻底解决。





1. 简介
本工具是一款内存稳定性测试与信号质量分析软件,旨在帮助用户检测计算机内存是否存在硬件故障、信号干扰或稳定性问题,集成了AVX2信号完整性测试、Rowhammer攻击模仿等高级功能,能够发现深层次的硬件隐患。

2. 核心功能与原理

2.1 AVX2 信号完整性压力测试
   原理: 利用CPU的AVX2指令集举行高强度的并发计算与内存读写。通过特定的数据模式(如0x55/0xAA交替),在内存总线上制造最大的电压摆幅和电流噪声。
   作用: 检测内存供电系统是否稳定,以及内存颗粒在高负载下是否会出现数据翻转。
   包罗模式:
       Power Virus (自动运行): 模仿极端的功耗场景,最大化CPU和内存的电流消耗,磨练电源供应单元(PSU)和主板供电电路(VRM)的稳定性。
       Crosstalk (串扰): 写入相邻位相反的数据,检测数据线之间是否存在电磁干扰。
       Heavy Thrashing (重度翻转): 快速切换读写状态,磨练内存控制器的总线转向本领。
       在配置中启用 EnableAVX2SignalStress,测试过程中会自动循环执行上述模式。

2.2 Rowhammer 压力测试
   原理: Rowhammer(行锤击)是一种攻击技能,通过快速、频繁地访问同一行内存,导致相邻行的电荷走漏,从而引发位翻转。
   作用: 检测内存颗粒的物理隔离度。如果内存抗干扰本领差,大概会被恶意软件利用举行提权攻击。
   必要在配置中手动启用 EnableRowhammer。默认关闭,因为这是一种高强度的物理压力测试。

2.3 Stride/Bank 冲突扫描
   原理: 以特定的步长访问内存,试图命中同一个Bank(内存库)。频繁访问同一Bank的不同Row会导致Bank频繁预充电和激活,产生高延迟和高功耗。
   作用: 检测内存控制器的Bank调度逻辑是否稳定,以及在Bank冲突场景下是否存在时序违规。
   必要在配置中手动启用 EnableStrideScan。

2.4 信号干扰评分
   原理: 通过测量内存访问的延迟抖动。
   基准: 读取全0数据时的延迟稳定性。
   干扰: 读取高频翻转数据(0x55/0xAA)时的延迟稳定性。
   算法: 如果在干扰模式下,内存访问延迟出现剧烈波动(抖动),说明信号质量受到噪声影响,评分会低落。
   作用: 量化评估内存电气性能的优劣。评分越接近1.0越好,低于0.8建议查抄内存散热或降频

2.5 扫尾检测
内存测试通常以块(如4KB或64字节)为单元。扫尾检测专门针对末了剩余的、不足一个块的微小空间举行逐字节测试。确保内存的每一个字节都被覆盖,防止遗漏。

2.6 内存稳定性测试模式
   Random (随机模式): 使用梅森旋转算法生成高质量随机数,覆盖各种随机位翻转错误。
   Sequential (顺序模式): 添补递增序列,检测基本的寻址和存储功能。
   Walking 1/0 (走步模式): 逐位移动 1 或 0,专门检测数据线(Data Bus)是否存在短路、断路或信号串扰。
   Address Test (地址测试): 将物理地址本身写入内存单元,检测地址解码逻辑是否出错(例如访问地址 A 却读写了地址 B)。
   Bit Fade (位衰减): 写入数据后休眠一段时间再读取,检测电容保持电荷的本领(Refresh 刷新问题)。

2.7 大页内存 (Large Pages) 的重要性
   什么是大页?: 普通内存页巨细为 4KB,而大页通常为 2MB 或 1GB。
   为什么要用?:
    1.  性能提升: 减少 CPU 的 TLB缓存未命中,显著提高内存访问服从,使测试压力更能直达内存颗粒,而非消耗在 CPU 寻址上。
    2.  物理连续性: 大页通常要求物理内存连续,且不可被交换。这意味着测试数据会一直驻留在物理内存中,不会被操纵系统移动到硬盘上的虚拟内存中,包管了测试的真实性。
   如何开启: 工具会自动尝试申请大页。如果失败(通常是因为没有“锁定内存页”权限或内存碎片过多),会自动回退到普通页模式。
   注意事项: 使用大页内存时,Windows 任务管理器大概不会在“历程”标签页中正确显示该历程的内存占用(因为它不属于常规的分页内存池)。请查看“性能”->“内存”中的“使用中”总内存,或者相信工具内部显示的分配状态。

2.7.1 锁定内存页权限说明
   它解决什么问题?: 允许历程使用 MEM_LARGE_PAGES 分配大页,并提高内存驻留稳定性,减少因换页/系统干预导致的测试噪声。
   为什么授予后仍大概“没变”?: 该权限属于“用户权利分配”,对新登录会话见效;授予后必要注销/重启,当前历程的访问令牌不会立刻得到该权限。
   如何自动授予?: 手动模式菜单提供 6. 提权自动执行 - 为当前账号授予“锁定内存页”,会触发 UAC 提权并自动写入本地安全策略。

2.7.2 VirtualLock 失败的寄义(常见误解)
   VirtualLock 失败通常意味着工作集(Working Set)配额不足或未提权,不等价于“内存坏了”
   工具会在必要时降级为普通页/可换页内存继续执行,并在输出中给出提示,以便你按需优化情况(关闭占用大量内存的程序、重启后立即测试等)。

2.8 安全退出机制
   强行退出: 在测试过程中,如果必要立即停止,可以随时按下 Ctrl+C 组合键。
   安全机制: 工具捕捉到退出信号后,不会立即“杀掉”历程,而是触发安全退出流程:
    1.  立即向所有测试线程发送停止指令。
    2.  等待当前正在举行的原子操纵完成(防止数据损坏)。
    3.  尝试开释已锁定的物理内存(固然操纵系统最终会回收,但自动开释更安全)。
    4.  生成最终的测试简报。
   提示: 如果在收到退出信号后程序没有立即关闭,请耐烦等待几秒钟,这是工具在举行必要的资源清算。

2.9 内存边界与系统稳定性 (关键!)
   内存占用: 操纵系统、驱动程序和背景服务必须占用一部门物理内存才能运行。例如 16GB 的电脑,开机后可用内存大概只有 12GB。
   边界风险:
       不要测试 100% 内存: 如果强行分配超过可用物理内存的测试空间(例如在 16GB 电脑上测试 16GB),操纵系统会被迫将核心数据移至硬盘(虚拟内存/Page File)。
       后果: 这会导致严重的系统卡顿,表现为鼠标卡顿、程序无相应、硬盘高占用,甚至导致系统彻底死机或蓝屏。
   最佳实践:
       工具会自动检测当前可用物理内存。
       建议测试巨细设置为可用内存的 80% - 90%。例如可用 10GB,建议测试 8GB - 9GB。
       如何继续测试?: 如果必要测试全部内存,建议分多次测试(Windows 会动态分配物理地址),或使用专用的 DOS/UEFI 版专业内存工具(本工具仅运行在 Windows 情况下,受限于 OS 调度)。

2.10 AVX2 与 CPU 缓存 (CPU Cache)
   缓存问题: 现代 CPU 拥有巨大的 L3 缓存 (如 Intel Core 30MB+, AMD Ryzen 64MB+)。如果测试数据量小于缓存巨细,数据只会反复读写缓存,而不会到达物理内存。
   AVX2 突破:
    1.  本工具的 AVX2 信号测试模式使用非临时存储指令 (Non-temporal Stores / Streaming Stores)。
    2.  这些指令(如_mm256_stream_si256)会通知 CPU 绕过缓存层级,直接将数据写入主内存
    3.  此外,工具会在每次迭代前执行缓存刷新 (Cache Flush) 操纵,刷新缓冲区巨细远大于普通消费级 CPU 的缓存上限,确保测试压力真实作用于内存条和内存控制器 (IMC)。

2.11 隐蔽的故障点:电压与时序
   时序 (Timing): 内存的延迟参数(如 CL, tRCD, tRP)。
       问题: 如果用户在 BIOS 中开启了 XMP 但主板自动练习的时序过紧,大概导致偶发性蓝屏。
       检测: AVX2 高负载模式对时序非常敏感,能快速暴露边沿不稳定性。
   电压 (Voltage):
       问题: 混插不同品牌/型号的内存时,BIOS 大概取最高或最低电压,导致部门内存欠压不稳或过压发热。
       本工具功能: 启动时会自动扫描并对比所有插槽内存的SPD 预设电压和当前运行频率,如果发现不同等会给出警告。(仅华硕主板可以读取SPD,且SPD结构体变化大,目前仅支持DDR4时序手动计算)

2.12 推荐测试流程
1.  预扫描: 启动工具,观察控制台输出的“硬件兼容性预扫描”结果,查抄是否有频率/电压不同等或插槽警告。
2.  AVX2 信号测试: 快速筛选严重的电气故障和供电问题(建议运行 5-10 分钟)。
3.  MemTest 稳定性测试:
       Random: 必测,覆盖率最高。
       Bit Fade: 选测,如果猜疑内存因为过热或老化导致“记不住”数据。
4.  Rowhammer: 选测,针对高安全需求情况。

2.13 预检机制与误报克制(近期更新)
   工具会在正式测试前对目标内存地区执行“预检”:验证页掩护/触页读写,尽量规避被系统限定/掩护页面引入的干扰。
   正式的稳定性测试与性能分析会优先复用“预检通过”的内存缓冲区,减少重复分配与跨页掩护差别带来的误报。
   预检针对偶发性异常参加了短暂重试,并在失败信息中包罗更精确的地址信息,便于定位问题来源(系统/驱动/资源限定 vs. 硬件不稳定)。

2.14 手动模式的安全确认(近期更新)
   手动模式启动稳定性测试前会显示情况提示(关闭大内存占用程序、碎片化与重启关系、大页权限见效方式)。
   必须输入 Y 才会开始稳定性测试,避免误操纵导致长时间占用系统资源。

2.15 Windows 安全与虚拟化机制对测试的影响(重要)
Windows 10+默认启用/可选启用多种安全与虚拟化干系本领(如 VBS/HVCI、Hyper-V、EDR/杀软内核回调等)。这些机制并不“阻止你写内存”,但大概改变内存分配、页面驻留与性能抖动特性,从而影响测试表现与误报概率。

   常见机制:
       VBS (Virtualization-based Security): 使用虚拟化隔离关键组件,大概带来额外开销与更高抖动。
       HVCI/内存完整性 (Memory Integrity): 代码完整性在 Hypervisor 下执行,大概影响性能测量与低层行为同等性。
       Hyper-V/WSL2/Docker/虚拟机平台: 启用系统级 Hypervisor,计时/调度/缓存行为大概与“裸机”略有差别。
       企业 EDR/杀毒实时防护: 大概引入扫描/钩子/监控导致的延迟尖峰与工作集压力。
   大概表现:
       MEM_LARGE_PAGES 分配失败更频繁(权限/碎片化/策略),工具会自动回退到普通页。
       VirtualLock更易失败(工作集配额/策略限定),这通常不代表硬件故障。
       性能带宽偏低、延迟抖动增大;极少数情况下大概出现“瞬态不同等/访问异常”噪声。
   工具如那边理:
       优先尝试大页与锁页;失败则降级回退并输出提示,不会因为单点失败直接终止全部流程。
       在正式测试前举行“预检”,对页掩护与触页读写做校验;遇到偶发异常会短暂重试并记录到报告的 systemEvents。
       启动时输出 “Windows安全/虚拟化状态” 摘要提示,便于你解释性能波动与失败原因。
   当无法关闭/无法绕过期:
       在企业策略/安全基线情况中,上述特性大概无法关闭;此时建议更关注“稳定性是否报错/是否有同等性错误”,而不是把性能指标当作裸机基准。
       必要尽量提升稳定性时:关闭大内存占用程序、重启后尽快运行、以管理员运行并按需授予“锁定内存页”权限。



3. 常见问题
   Q: 为什么测试时电脑会变慢?
       A: 这是正常的。工具会占用大量CPU和内存带宽以施加最大压力。
   Q: 发现错误怎么办?
       A:
        1. 查抄内存是否超频,尝试恢复默认频率(XMP关闭)。
        2. 查抄内存散热片是否过热。
        3. 干净内存金手指并重新插拔。
        4. 如果问题仍旧,大概必要更换内存条。

        5.查抄同频率下,不同内存条之间的内存电压,时序是否同等,不同等必要降频使用。
        6.极小概率是内存控制器或主板损坏。








更新:
V1.1
1.修复内存读取/写入/复制/延迟算法的数值异常偏低的BUG,现算法优化已缩小与商用软件AIDA64的差距;
现象: 在未使用优化算法构建版本中,带宽仅为 2.5GB/s 左右,远低于硬件极限。
原因 :
标量指令瓶颈: 普通 C++ for 循环逐个 int 读写,指令发射率低,无法填满 CPU 流水线。
缓存所有权读取 (RFO - Read For Ownership): 传统写入操纵是“回写”模式,CPU 必须先把目标内存块从 DRAM 读取到缓存中才能修改。这意味着一次写入现实上消耗了1读+1写两倍的带宽,且严重污染缓存。
缺乏指令级并行 (ILP): 简单循环导致 CPU 等待上一条指令完成才能执行下一条(数据依赖),大量执行单元处于空闲状态。
编译器优化和 CPU 缓存机制掩盖了真实的 DRAM 写入时间。

修复方向:三级回退策略:优先 AVX2,其次 SSE2,末了 Scalar,包管最大兼容。
AVX2 向量化: 使用 __m256i数据类型,单条指令吞吐量提升 8 倍 (32 字节)。
NT (Non-Temporal) 流式写入: 使用 _mm256_stream_si256指令。它告诉 CPU不要把这些数据读进缓存,直接写到内存条里。这直接消除了 RFO 的带宽浪费,写入性能翻倍。
8路循环展开 (8x Unrolling): 手动在循环体内连续发射 8 条读/写指令。这利用了 CPU 的超标量架构,允许同时处置惩罚多条不干系的内存操纵,掩盖了指令延迟。
软件预取: 在处置惩罚当前数据块时,提前发出 _mm_prefetch指令加载下一块数据,掩盖 DRAM 高达 50ns+ 的物理访问延迟。




在我开发情况下,单线程内存写入 32.7 GB/s,而DDR4-2400 双通道理论极限:38.4 GB/s ,服从:85.3%。
在单线程下达到这个速度,说明 _mm256_stream_si256 指令配合 大页内存 (Huge Pages),已经完全消除了 TLB Miss 和缓存同等性协议(RFO)的开销。CPU 核心直接向内存控制器灌输数据,没有任何中间损耗。这接近个人开发者软件优化的天花板。

与 AIDA64 的差别: AIDA64 使用了手写的汇编代码,利用 CPU 的寄存器堆作为临时缓冲,并且通过指令流水线编排,让内存控制器能够尽量同时处置惩罚读取与写入哀求(更充分地利用 bank/队列并发)。这属于面向特定架构(例如 Intel Alder Lake)的硬件层面深度优化路径,普通 C++ 编译器很难自动生成同等级别的代码。

2.分层延迟输出(L1/L2/L3/DRAM)
延迟曲线:
4MB:  14.23 ns
8MB:  16.39 ns    2719566.0ns)</strong>
[DRAM刷新惩罚] Heartbeat: ..#*.......*...!#...!.-...+*...
Legend: !=极端 #=严重
解读:
24倍延迟尖峰:基准操纵耗时约 113us,但最差的时候飙升到了 2.7ms (2719us)。
注意:2.7ms 的停顿对于内存来说是极长的(通常 tRFC 刷新只有几百纳秒)。
图形分析:
心跳图充满了 ! (极端) 和 # (严重)。
这说明内存子系统非常繁忙且不稳定。
原因推断:
这不仅仅是尺度的 DRAM 刷新(Refresh)。
我是 4根内存混插,故内存控制器大概正在背景疯狂举行信号重试 (Signal Retraining) 或 纠错(固然没报 WHEA 错误,但控制器大概在底层默默重试)。
这种毫秒级的卡顿,在玩高帧率游戏(如 CS:GO)时,就会表现为“莫名其妙的掉帧”。
推论:
病灶 A:Bank Interleaving 失效(Stride 2MB = 132 MB/s)。
病灶 B:偶发性心律失常(Heartbeat = 2.7ms 卡顿)。
病因:    4根不同型号内存混插,主板强制激活最低兼容模式。




9.修复其他错误;



V1.2.2
修复:
1.修复日志异常问题,测试异常项目会红字显示;
2.低落因多线程写入因带宽饱和线程互相争抢,内存控制器仲裁开销导致多线程测试成绩比单线程成绩
严重劣化问题。通过内存地区隔离处置惩罚(2MB 对齐 + 错开线程访问地区)覆盖 读/写/复制三条带宽路径,且不改变统计口径(仍覆盖整块测试区间)让相邻线程尽量不要落在相邻内存地区上,低落 Bank/Row 冲突概率;

3.将来的DDR6内存不实用测速,因为AVX2无法跑满带宽,必要AVX10指令集,但25年大部门CPU不支持该指令集,故检测到DDR6特征码会提示实验性功能;

4.输入参数严酷验证,自动处置惩罚内存对齐与资源开释,防止缓冲区溢出。强制实施内存对齐策略,确保 AVX2指令集的安全执行。在关键路径(如带宽测试、延迟测试)入口处添加了严酷的 nullptr 查抄与 size 校验。

5.处置惩罚边界处置惩罚不严谨,加固 Decode 中的向量访问安全性,优化错误记录的清算机制,修复了带宽计算中的除零风险

6.修复了交互式菜单的输入处置惩罚逻辑,防止非数字输入导致的无限循环。



7.修复缓冲区越界读取、增量操纵与边界查抄不同等转义字符处置惩罚溢出掩护指针运算不安全时间计算精度问题。



新增:
1.加强DDR3/DDR4/DDR5/DDR6(实验性) 平台的兼容,不同代的硬件定义完全不同特性也不同,带宽服从判定阈值会按代次自适应,比如:避免用DDR4的尺度误判DDR3。

2.DDR5 平台会提示片内 ECC 大概掩盖位错误,导致测试无效;


3.若观测到疑似 IMC 重试/片内 ECC 尾部尖峰形态,也会写入报告建议,推荐联合 WHEA-Logger 事件复核。在 DDR5 平台上,若观测到“少量非周期性极端尖峰 + 其余分位数较平”的形态,工具会输出“疑似 IMC 重试/片内 ECC”提示,并将其作为告警与性能建议写入报告(建议同步查看 系统日志WHEA-Logger 事件以确认是否存在纠错记录),如DDR5内存平台测试报出
“少量非周期性极端尖峰 + 其余分位数较平”且存在WHEA-Logger 日志,则说明DDR5内存发生错误被片内ECC纠正,请注意降频/散热或售后更换的生理准备
4.获取处置惩罚器,主板,硬盘型号功能;


目前版本总结:
颠末迭代后它更像是一个故障定位器。
它可以告诉用户的电脑固然跑分高(32GB/s),但玩游戏卡顿(2.2ms 延迟),是因为乱插内存导致的。
这种深度的洞察力是市面上绝大多数免费工具所不具备的。

V1.3

参加原生LPDDR 支持:扩充内存类型字典,深度支持浮滑本 LPDDR3 / LPDDR4 / LPDDR5 识别,修复了板载内存大概产生的频率识别错误与冗余插槽警告。
调整动态预期带宽算法:重构了理论带宽计算公式。现在能够根据检测到的每根内存条的现实速率(MT/s)与位宽(Bus Width)举行累加,并判断消费级/HEDT处置惩罚器架构的通道上限,输出硬件真实的物理极限带宽(理论带宽服从将落在 70%~90% 区间,不再出现 >100% 溢出)。
调整拓扑分析重构:修复了拓扑报告中硬编码 DDR4/2400MHz 的逻辑,现在直接基于 SMBIOS/WMI 提取的底层物理信息构建真实的通道映射关系。
增长内存真伪与品质综合鉴定功能: 深入识别颗粒、SPD窜改与冒牌内存风险,输出质检结论。
修复:
1.WMI/SMBIOS 数值读取边界、类型校验与序列号采集不完整;
2.AVX2/压力测试工作线程异常仅计数不留根因摘要;
3.若干小问题;


V1.3.1
1.修复部门表述和判定,避免歧义;
2.线程部门调整,自旋锁僵尸线程,线程亲和性走漏,缓存与 TLB 刷写,减小前序影响;


V1.5
1.支持AVX512指令集,程序启动时通过 CPUID自动识别硬件本领,并联合操纵系统是否启用了对应寄存器状态保存机制,动态选择 Scalar / SSE2 / AVX2 / AVX-512 测试路径。
2.修复小弊端若干;
3.增长NUMA细化;
4.诊断更精准,对之前的打补丁式修复举行重写;




V1.0版本SHA256:   933F3E94CA02F18C076C13107D85B84693238385C6B4B60044755CF2585569FA
V1.1版本SHA256:      2c117023a76042f0b8f3a593d4f435e253bc520ee596dcb553adbdd0bb9c1edc
V1.2.2版本SHA256:   64469F872635025A93C398A91CD9C219A0BD8166446B2A84249CF85399AD473F
V1.3.1版本SHA-256:  20f8fc350200188cb3525990048ee8e0ea6ed331da46e37c376a0b2cf584b334

V1.5版本SHA-256:a7b5577ac63ce09a4cda76c2cb4527a601f770978d6f2cf9e4a3eb635bbfeef6








MemoryDiagnostics -V1.0.7zMemoryDiagnostics -V1.2.2.7zMemoryDiagnostics -V1.1.7zMemoryDiagnostics-1.3.1.7zMemoryDiagnostics-v1.5.7z
精密测量技术论坛免责声明
✈️重要声明:以上内容仅代表该作者观点,不代表本站精密测量技术论坛立场。
✅如有涉及侵权请尽快告知,我们将会在第一时间处理。作者原创内容未经允许不得转载!
📱 站长联系邮箱:1339305021@qq.com
📱 站长联系微信:dddnnbbb
累计签到:20 天
连续签到:3 天
灌水成绩
0
34
2711
主题
帖子
积分

等级头衔

ID : 962

初级技术员

积分成就 测量币 : 2711
在线时间 : 0 小时
注册时间 : 2025-9-25
最后登录 : 2026-5-18

勋章
UID勋章测量学徒测量员
发表于 前天 13:17 | 显示全部楼层 IP:美国
LZ说的很不错
回复

使用道具 举报

快速回复换一批
好贴支持!
感谢楼主,好人一生平安
遇见神贴岂能不顶
路过留名
好贴帮顶
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|精密测量技术论坛 ( 桂ICP备2026007449号-1 )

GMT+8, 2026-5-21 06:28 , Processed in 0.104954 second(s), 34 queries .

快速回复 返回顶部 返回列表