Skip to content

方法Method

抖动与内存负载控制

Memory thrashing · Admission control for paging · 页面抖动

把工作集容量压力与缺页阻塞连成可复算模型,说明CPU低利用率下继续加负载的反馈风险,以及准入、暂停和恢复的成本边界。

系统看起来很忙:不断换入页面、切走等待进程,应用却几乎没有推进。要解释这种情况,既要知道活跃工作集有多大,也要知道缺页处理会让程序等待内容和可用页框,而不是立即完成原访问。

形式陈述 ​

先区分容量压力与已经发生的抖动 ​

页面抖动描述一种运行状态:程序反复换入仍将很快使用的页面,换页工作占据大量时间或带宽,有用计算因此严重受损。一次首次缺页,或有计划地顺序读一个大文件,都不足以单独证明抖动;需要结合重访、缺页率和有效进展看持续行为。

令活跃集合A的联合工作集需求估计为 DA,可用驻留预算为 M。DA>M 表示估计中的页面不能同时驻留,是容量压力信号。它不直接给出缺页率:访问顺序、替换方法、页共享、I/O并行性和估计窗口都会影响结果。反过来,容量足够也可能因不合适配额或替换规则频繁缺页。

本页用局部与全局替换实验的LRU模拟作为工具,固定引用顺序并计算缺页数,再额外接上串行时间模型。所有成本是教学参数;它们给出可检验的因果链,不用于预测某台机器的实际毫秒数。

直觉

少一帧,可能不只是多一次缺页 ​

单进程循环访问三个页a、b、c,只给两帧。读a、b后帧满;读c淘汰a;下一步读a又淘汰b。程序每次都把稍后要用的页换走,形成持续循环。替换器每次都执行了合法动作,整个配置仍然低效。

若能给三帧,第一次装入a、b、c后就不再换出它们。额外一帧改变的是能否容纳整个循环的内容,因此收益可以远大于“多一帧少一次缺页”。这也是只看已用内存百分比,难以推断应用进展的原因。

例子与边界

十二次访问的时间账本 ​

分别从空驻留集重放 a b c 四轮。假定每次引用最终带来1毫秒有用CPU工作;每次缺页在此前额外等待5毫秒I/O。只有一个运行进程,不预取、不重叠I/O,也不额外收费页表、调度或脏页写回。

帧数 第1轮缺页 后3轮缺页 总缺页 f 有用CPU I/O等待 总历时
2 3 9 12 12 60 72
3 3 0 3 12 15 27

串行总历时为 T=12+5f,有用CPU比例为 12/T,分别是 1/6 与 4/9。三帧情况下比例还没接近1,是因为这个短观察窗口仍包含3次冷启动缺页。若执行 m 轮,三帧总历时 3m+15,有用比例趋近1;两帧则每轮缺页3次,始终为 1/6。

这里的“有用CPU比例”特意不把内核处理开销算进分子。实际监控中的CPU利用率可能包括内核回收与缺页处理,因此CPU很忙也不必然表示应用推进得好。要核算业务进展,至少要另看完成引用、请求或作业的数量。

为什么低CPU利用率有时不能再加任务 ​

一般情况下,一个进程等待I/O时运行另一个进程,可以隐藏等待。但若新增进程又带来一份装不下的工作集,它会挤走旧进程的热页,使后者下一次恢复时继续缺页。于是可能出现:换页等待增加,CPU有用工作减少,系统误以为空闲而继续增加活跃任务,换页压力又更大。

这是一条可能的正反馈链,不是“增加并发总会更慢”的定理。若新任务工作集很小或访问不共享紧张资源,它也可能填满CPU空档。判断关键在联合需求和瓶颈资源,不在任务计数本身。

把准入决定算成容量不等式 ​

另起快照:MEM-16中只有8帧可供本组进程使用。P、Q、R各有3页不共享且稳定的工作集,总需求 3+3+3=9>8。若只让其中两个维持活跃,估计需求降为6,留出2帧余量。每个活跃进程有3帧配额并进入重复阶段后,都能避免前例的循环替换。

第三个进程不能因此被宣称“已经完成”,也不能无限期遗忘。可以先暂停它参与新的引用,等一批工作完成或预算增加后再恢复。选择谁等待需兼顾截止时间、交互需求和公平;只按工作集最小者优先,可能长期排挤大任务。容量条件解决能否装下,不能独自决定服务次序。

推论与应用

暂停CPU与释放页框是两项操作 ​

仅把R移出运行集合,不会自动释放它的驻留页。如果R仍占3帧不让出,P与Q依旧可能拿不到所需6帧。控制器必须明确将哪些R页移出预算,保存必要内容,完成映射撤销和相关TLB失效,再把可安全复用的帧交给其他进程。

清洁且有可靠后备副本的页可以不写回;已修改且无当前副本的页必须先保全内容。页被锁定或正在I/O时还可能暂时不能回收。恢复R时,重新调入又有成本,因此频繁在“全放进来”和“全赶出去”之间切换,可能制造新的开销。

控制需要观察窗口和迟滞 ​

可同时观察每进程缺页次数、因换页阻塞的时间、活跃需求估计和单位时间完成的工作。连续多个窗口表现出过载时减少准入,恢复到更宽松阈值并稳定一段时间后再扩大活跃集合,能避免对偶发冷启动立即作大幅调整。具体窗口和阈值必须在目标负载下验证,本页不提供脱离成本模型的通用数值。

把帧数、窗口、页大小与准入变化分开试验,才能知道改善来自哪里。例如把基本页换成大页可以减少翻译未命中,却不会自动解决这里9页活跃内容塞不进8页容量的问题;某些稀疏访问还会因大页内部碎片更占空间。

最终复算应交出两层证据:先用引用轨迹证明缺页数,再用声明的时间合同把缺页换算成历时。若允许多进程隐藏I/O,72与27的加法账本就需重建,不能继续当作整机吞吐答案。

参考资料
关系图谱7 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系