Skip to content

模型Model

分区页分配与保留预算

Page allocation zones · Zone watermarks · 分区水位

将页框分配拆成区域资格、形状可用性与保留预算三个检查,追踪普通请求和受限设备请求,并区分教学阈值与实际系统水位。

同一台机器里,一些页框可能只有特定设备能访问,另一些又必须给无法等待的内核路径留用。物理页框分配保证一页不会被两个独占所有者同时拿走;分区政策还需要回答:这次请求允许从哪里拿,以及现在是否应该动用最后几页。

形式陈述 ​

一次请求有三道检查 ​

把管理池分成若干区 z。本页为每区记录空闲页数 Fz、保留预算 Rz,并为每个请求记录允许区集合 E、尝试顺序和本次实际从空闲池扣除的页数 r。一个区可以满足请求,至少要同时满足:它在 E 中;有符合连续性与对齐要求的块;政策允许扣除这 r 页。

为便于独立复算,普通请求采用自定的硬预算规则

Fz−r≥Rz.

这里 r 计实际占用,不一定等于调用者的有效需求。若请求3页而伙伴分配交付4页块,预算检查和空闲扣账都必须用4,整个块也都计入所有权。一般请求 d 页、底层按幂二交付时,应取 r=2⌈log2⁡d⌉。例如 Fz=5,Rz=2,需求3若按3扣会误判可用;按真实4页检查得到 5−4<2,应拒绝且不改变状态。

明确标记为“可动用保留预算”的请求改用 Fz−r≥0。标记不改变允许区集合:只能访问D区的设备请求,即使获得预算例外,也不能因此取G区。这是教学政策,不是Linux的水位判定公式;真实实现还区分请求标志、order、回退路径和不同保留机制。

失败的候选区不改变状态;成功才扣减一次 Fz 并登记所有权。若所有候选区都失败,结果应是进入约定慢路径或返回失败,而非把一个负数写进空闲账本。底层可用伙伴分配查找具体块;预算计数足够,不代表形状检查也能通过。

直觉

空闲不是一个可任意挪用的大水桶 ​

MEM-16的新快照有D区 [0,4) 和G区 [4,16)。D能被一台受限设备直接寻址;G不能。一般CPU请求两区都能用,尝试顺序为G、D。D区适用范围更窄,所以普通请求优先用G,避免把设备唯一可用的地方提前耗尽。

本次初态为 FD=4,FG=6,其余6个G页已分配;普通请求两区均保留2页。除了后面特别说明的设备请求,所有分配都受预算限制。这里刻意按单页或若干独立页批量分配,假定所需单页可用,先隔离区域政策;没有暗中宣称G区的6个空闲页连续。

“保留2页”不是让2个固定页号永远封存,而是普通请求完成后不能让该区空闲数跌破2。设备的例外请求可以使用当时仍空闲的任意合格D页。若想用静态页号划出紧急池,那是另一种表示方式,也要明确它何时补充、谁能使用。

例子与边界

逐项扣账,直到有空闲也不能给 ​

请求 判断 结果后 (FD,FG)
初态 D共4页空闲,G共6页空闲 (4,6)
普通请求4个独立页 G扣4后剩2,达到预算底线 (4,2)
普通请求1页 G剩1不合格;D扣1后剩3 (3,2)
普通请求1页 G仍不合格;D扣1后剩2 (2,2)
普通请求1页 两区扣后都会剩1 拒绝,仍是 (2,2)
受限设备请求2个独立页,允许动用预算 只试D,扣后0非负 (0,2)

第四个普通请求被拒绝时,系统仍有4页空闲。拒绝的证据不是内存已用尽,而是所有合格区都碰到了当前政策底线。最后设备请求成功,也不是推翻前一次结论:它的预算权限不同,但区域资格仍然严格。

如果设备随后还要1页,即使G有2页空闲也会失败,因为D为0。若把该请求悄悄回退到G,表面上所有权与计数都对,设备却无法使用所得页。资源分配的安全条件因此不止“别分配两次”,还包括“分配到的东西满足调用者合同”。

连续性是另一条失败理由 ​

把一个新快照改成G有4个空闲单页,分散在已占用页之间;普通预算为2。一次需要连续2页的请求满足 4−2≥2,仍可能没有任何可交付块。相反,有一个完整2页块,却扣完会穿越预算,也不能按本政策交付。错误诊断会把两个问题都叫“内存不够”,从而误选修复方法。

回收可以增加空闲数量,但不保证增加目标order的块;压实可以改善连续形状,但受不可移动页限制。等待、回收、压实和失败返回,都应由请求所处上下文决定。不能睡眠的路径不能为了拿一页就无条件等待磁盘I/O;此时预算存在也不保证所有请求都成功。

推论与应用

水位把后台准备与紧迫处理分开 ​

可在教学预算之外再设两个后台控制阈值:空闲低于 L 时启动准备工作,恢复到 H>L 时停止。不同开关阈值避免空闲数围绕同一值上下波动时频繁启停。阈值本身不创造页框;准备工作必须真的释放可回收页,或完成必要写回。

Linux文档将区域水位与低区保留机制分别列出:通常低于low会唤醒回收线程,min附近可能走直接回收或压实;high以及内存分层模式的promo参与停止条件。lowmem_reserve又用于保护较受限区域。它们作用相关,但不能把本页一个 Rz 硬底线当作这些字段的逐项实现,也不能从文档里一个阈值推出任何版本都绝对相同的拒绝行为。

诊断时保留失败原因 ​

一份有用的分配日志应记录所需页数与order、允许区、实际尝试次序、该区空闲数、预算权限,以及形状检查结果。这样才能区分“总量不足”“资格不符”“保留政策阻止”“缺少连续块”。把所有失败压成一个总空闲数字,会丢掉决定下一步的信息。

若内存还分布在不同处理器附近,区域资格与位置成本可以同时出现。NUMA放置会增加节点选择,但不会取消本页的资格检查。先确定哪些区域合法,再在合法选择中比较距离,才能避免用性能偏好覆盖硬约束。

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

拖动节点调整位置。

显示关系

显示:依赖

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