我这台电脑刚配半年,配置不算低,i5-12400处理器,16G内存,512G固态硬盘,却在最近一个月染上一种怪病——只要打开浏览器,页面还没加载完,鼠标先卡住,接着屏幕定格,键盘灯全灭,只留下主机风扇在疯狂嘶吼。强制重启,再试,依然是同样的结局。更离奇的是,每次拔掉网线单机操作,无论开多少个文档、跑多少进程,系统稳如泰山。问题的指向性非常明确:网络相关操作触发了某种致命崩溃。
下载文件时的症状尤为剧烈。用迅雷拉一个三个G的镜像,进度条刚走到百分之二,任务管理器里的网络占用率像失控的指针,猛冲到百分之百,随后系统直接冻结。按理说固态硬盘的写入速度在1.5G每秒左右,下载带宽不过几十Mbps,瓶颈绝不在于存储。我怀疑过是网卡固件问题,设备管理器里显示的是瑞昱RTL8168千兆网卡,驱动版本已经更新到最新,但问题依旧。也尝试过关掉硬件加速、调整电源管理里的“允许计算机关闭此设备以节约电源”选项,均无济于事。
转折来自一次偶然的观察。死机前的那一瞬,我瞥见系统日志里有一行“处理器核心错误中断风暴”的警告。查询Intel官方技术文档后明白,现代网卡在接收网络数据包时,会通过PCI Express总线向CPU发送中断请求。如果一个中断没有被正确响应,网卡会不计后果地重发。当这种重发以每秒上万次的频率发生时,CPU的全部资源都被拖入中断处理的泥潭,系统对外表现为死机,实际上CPU已经被中断风暴淹没。这就是为什么下载时死机最快,因为那正是数据包接收最密集的时刻。
玩游戏输密码死机则揭示出更深层的原因。游戏客户端在连接服务器的瞬间,会进行高强度加密握手,大量小数据包以突发模式涌向网卡。这种流量特征比大文件下载更容易触发中断异常,因为每个小包都会单独产生一次中断事件。我的主板BIOS里有一条与C-State节能有关的设置,默认开启情况下,CPU在空闲时会进入深度休眠状态。当网络数据到达,CPU需要从C6状态迅速唤醒,这个过程需要数百微秒,而网卡的接收缓冲区区几毫秒就会被填满。缓冲溢出后,网卡进入异常重试循环,最终引爆中断风暴。
关闭BIOS里的C-State支持,同时把电源计划改为“高性能”,症状立刻减轻八成。再用任务管理器把网络进程的优先级从“标准”调高到“高于标准”,剩余两成也基本消失。现在这台电脑恢复正常,但每次打开网络连接,我仍会下意识地盯着CPU占用率那条线,而它平稳得像一潭死水。
