我在 6.2.0-39-generic(Ubuntu 22.04,HWE)上运行 zswap。
我的理解是,zswap 拦截标记为交换的页面,压缩它们(如果可能)并将它们存储在物理 RAM 的压缩部分中,直到某个特定于用户的点。就我而言,zswap 设置为最多使用 25% 的 RAM。
但是,如果我对我的系统(具有 256GB RAM 和 256GB /swapfile)施加压力:
stress --vm-bytes 250G --vm-keep -m 1
当通过活动监视器或 free -h 等查看时,首先我的 RAM 被填满,然后我的“交换”开始被填满 - 远远超过存储 250GB 所需的量。
free -h
报告:
total used free shared buff/cache available
Mem: 251Gi 249Gi 1.9Gi 35Mi 523Mi 598Mi
Swap: 255Gi 128Gi 127Gi
但是 sudo grep -R 。 /sys/kernel/debug/zswap/ 报告:
sudo grep -R . /sys/kernel/debug/zswap/
/sys/kernel/debug/zswap/same_filled_pages:10982
/sys/kernel/debug/zswap/stored_pages:33556168
/sys/kernel/debug/zswap/pool_total_size:45804953600
/sys/kernel/debug/zswap/duplicate_entry:0
/sys/kernel/debug/zswap/written_back_pages:0
/sys/kernel/debug/zswap/reject_compress_poor:0
/sys/kernel/debug/zswap/reject_kmemcache_fail:0
/sys/kernel/debug/zswap/reject_alloc_fail:0
/sys/kernel/debug/zswap/reject_reclaim_fail:0
/sys/kernel/debug/zswap/pool_limit_hit:0
33556168*4096 = ~128GB - 与 free -h 报告的交换使用情况匹配。
那么,尽管未压缩的文件大小已被 zswap 压缩并且仍在 RAM 上,系统是否仍将其报告为“swap”?
基本上,我怎样才能获得直观且可报告的感觉:
- 使用的物理 RAM 总量(未压缩)
- 使用的物理 RAM 总量(通过 zswap 压缩)
- 使用的磁盘交换总量
- 剩余/可用的磁盘交换总量
还发布在这里:https://www.reddit.com/r/kernel/comments/18iykle/accurately_monitoring_ram_and_swap_usage_while/