[已放弃]让zswap的zsmalloc实现LRU,有什么思路?

内核编译和嵌入式产品的设计与开发
回复
科学之子
帖子: 2284
注册时间: 2013-05-26 6:58
系统: Debian 9

[已放弃]让zswap的zsmalloc实现LRU,有什么思路?

#1

帖子 科学之子 » 2016-05-15 5:14

测试了一下,本以为zsmalloc凭借自己的高压缩率可以避免很多reject_compress_poor.
我还没写代码,但测试时发现reject_alloc_fail与reject_compress_poor不相上下.
压缩率的话zram中是30%~40%左右,和zbud也差不多.
虽然没能成功作出一些改进,但看了一些代码,我很满足

让zswap的zsmalloc实现LRU,有什么思路?
目前我的思路是在zswap.c里面利用zswap_entry和zswap_pool和内核提供的链表设施(rculist.h / list.h)来实现LRU
理由:
1.实现简单,如果从zsmalloc去实现的话,会经过更多层接口,我的挨个了解这些接口
2.在zsmalloc实现LRU的话,会增加zram的zpool元数据开销,但zram不需要LRU

缺点:
1.如果zpool类型是zbud的话就会导致LRU链表重复,额外增加开销
缺点1貌似可以通过设置单独链表,然后通过参数来解决
2.由于是直接修改了zswap,可能不利于兼容未来可能出现的新zpool_driver.(就像缺点1一样,LRU重复,或更糟的未知情况)


疑惑:
1.如果zswap的zsmalloc实现了LRU,zswap还需要去使用或兼容zbud吗?
2.zswap会创建多个zswap_pool?
zswap_pool里面的 list是干什么用的?
不像是为每个swap设备创建的样子,难道是我没看出来?
回复