当前配置是 swappiness = 40;zswap cache = 40
free -m
命令说
total used free shared buff/cache available
Mem: 3615 1353 1232 191 1029 1806
Swap: 4095 4 4091
zswap 通过命令调试信息sudo grep -r . /sys/kernel/debug/zswap
/sys/kernel/debug/zswap/stored_pages:892
/sys/kernel/debug/zswap/pool_total_size:1220608
/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
答案1
zswap 中的页面仍然被算作磁盘交换。我相信这是必要的,因为 zswap 池大小是动态的,这允许最终将所有页面移动到磁盘交换。
/sys/kernel/debug/zswap/written_back_pages 显示实际写入磁盘的页面数,但据我所知,这是一个所有时间的累积增量。
为了获得当前磁盘上交换的字节数:
你想计算
$used_swap_in_bytes(as shown by "free -b" or "swapon -s") -
/sys/kernel/debug/zswap/stored_pages * $(getconf PAGESIZE)
例如(以字节为单位)
echo "$(LANG=c free -b |grep Swap |awk '{print $3}') - $(sudo \
cat /sys/kernel/debug/zswap/stored_pages)*$(getconf PAGESIZE)" |bc -l
echo bytes swapped on disk
或者用 Mio (地板圆角) 表示:
echo | awk '{value='"$(LANG=c free -b |grep Swap |awk '{print $3}')\
- $(sudo cat /sys/kernel/debug/zswap/stored_pages)*\
$(getconf PAGESIZE)"';printf "%.0f\n", value/1024**2}'
echo Mio swapped on disk