☕ 架构师的白话因果律

为什么给内存扩容,系统反而可能频繁卡死?

计算机体系结构教材中有一个看似反常的经典现象,称为 Belady 异常:在某些置换算法下,明明分配了更多的物理内存块,系统的缺页中断次数反而增加了!

从工业界真实资源调度的视角审视,原因极其直观:

• 先进先出算法(FIFO)是完全“盲目”的:它只以进入内存的绝对时间为准。当工位满载时,哪怕那个最早驻留的页面每天承载着 90% 的核心并发访问,系统依然机械地将其置换淘汰!

• 刚被置换,下一秒业务又急需该页面,系统只好频繁触发“缺页中断”,从慢速磁盘中重新载入。这种刚淘汰又立即载入的往复震荡,即为系统抖动(Thrashing)!

• 为什么 LRU(最近最少使用)算法彻底免疫该问题? 因为 LRU 考核的是“近期做功热度”,久未访问者才会被淘汰。堆栈类算法在数学上证明了集合包含原则,彻底杜绝了 Belady 异常!

[FIFO 内存置换队列仿真] 内存块加载中...
FIFO 只认进场时间先后,易误伤高频热点常驻页面