phys_footprint
macOS通过libproc暴露的进程级内存指标,活动监视器Memory列显示的值,反映实际驻留且计入系统内存压力的物理页估算
时间轴 (近 90 天)
在 Apple Silicon Mac 上,把 MPS 设备上的 PyTorch 张量通过 .to("cpu") 搬到 CPU 后,进程的 phys_footprint 会立即降到接近零,但张量数据仍然完整保存在内存中。
phys_footprint 是 macOS 通过 libproc 暴露的进程级内存指标,活动监视器 Memory 列显示的就是它;它是『实际驻留且计入系统内存压力的物理页』的估算,扣除被换出到 swap 的部分,因此在统一内存架构下页面被标记为可压缩或进入 swap 时会迅速下跌。
MPS 的 driver_allocated_memory 计数与进程 phys_footprint 是两套独立的账本,两者同步下跌并不代表内存被释放。
复现实验中(torch 2.14.0,macOS 26.5.2,M5 Pro 48 GB,4 GiB 张量),刚搬到 CPU 时 phys_footprint 与 MPS driver 计数都回到接近零,只有 CPU 逐页读完拷贝后 footprint 才重新回到 4.2 GiB,三次运行结果完全一致。
自查 Mac 上模型运行是否真正放得下时应看 swap 而非只看 footprint:只要 swap 在任务运行期间增长,无论 footprint 多好看都说明它放不下;同时应参考系统级空闲内存百分比(kern.memorystatus_level)。
全部知识事实 (5)
在 Apple Silicon Mac 上,把 MPS 设备上的 PyTorch 张量通过 .to("cpu") 搬到 CPU 后,进程的 phys_footprint 会立即降到接近零,但张量数据仍然完整保存在内存中。
50%待验证phys_footprint 是 macOS 通过 libproc 暴露的进程级内存指标,活动监视器 Memory 列显示的就是它;它是『实际驻留且计入系统内存压力的物理页』的估算,扣除被换出到 swap 的部分,因此在统一内存架构下页面被标记为可压缩或进入 swap 时会迅速下跌。
50%待验证MPS 的 driver_allocated_memory 计数与进程 phys_footprint 是两套独立的账本,两者同步下跌并不代表内存被释放。
50%待验证自查 Mac 上模型运行是否真正放得下时应看 swap 而非只看 footprint:只要 swap 在任务运行期间增长,无论 footprint 多好看都说明它放不下;同时应参考系统级空闲内存百分比(kern.memorystatus_level)。
50%待验证复现实验中(torch 2.14.0,macOS 26.5.2,M5 Pro 48 GB,4 GiB 张量),刚搬到 CPU 时 phys_footprint 与 MPS driver 计数都回到接近零,只有 CPU 逐页读完拷贝后 footprint 才重新回到 4.2 GiB,三次运行结果完全一致。
50%