发现不论是手动停止还是被内核杀死,zram的内存竟然可以回收?测试方法是这样的:
我用watch跟踪free 和zram的mem_used_total的变化
然后用C语言写了一个不停申请1024*1024字节的内存块,直到被内核杀死
free显示内存占用猛跌
zram的mem_used_total文件的数值也猛跌
但根据这个链接的说法貌似应该无法回收?
https://segmentfault.com/a/1190000000380500
zswap.txt也说zsmalloc无法回收
https://www.kernel.org/doc/Documentation/vm/zswap.txt
如果我没弄错的话,zram也是用zsmalloc来管理内存吧?
就算zsmalloc这个API支持类似标准库的free
zram作为一个定长块设备居然还能在空间被使用之后回收?
Wed Feb 24 02:21:31 CST 2016补充:
硬着头皮看了看内核代码:
zram_drv.c:
代码: 全选
.swap_slot_free_notify = zram_slot_free_notify
代码: 全选
disk->fops->swap_slot_free_notify(p->bdev,
offset);