zswap在无外部IO设备动作的情况下,和zram比(时间,空间)效率如何?

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

zswap在无外部IO设备动作的情况下,和zram比(时间,空间)效率如何?

#1

帖子 科学之子 » 2016-04-29 0:16

zswap在无外部IO设备动作的情况下,和zram比(时间,空间)效率如何?
zswap在不发生实际swapping的情况下,和zram比(时间,空间)效率如何?
但从这两者本身来看,zswap用红黑树,zram用顺序表;
顺序表的结构更适合并行,节点管理所需的内存也比树要少

但看zram用的是vzalloc来分配内存
细想底层的内存映射,管理什么的也都是树类算法
树的话,并行起来就要加锁?加锁就会严重拖慢并行速度.
仔细想了想,问题不在于是否是树,而在于zswap无法像zram那样直接分配多个树
如果在单块硬盘上分配多个swap设备,岂不更慢?

那么实际上(不访问外部存储器的情况下)zswap和zram哪个会更快?差距有多少?差距在哪里?
上次由 科学之子 在 2016-04-30 12:04,总共编辑 3 次。
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: zswap在不发生实际swapping的情况下,和zram比(时间,空间)效率如何?

#2

帖子 rosynirvana » 2016-04-29 0:48

实际swapping指什么?缓冲区满了然后fall back到原来的Swapping上?
rosynirvana
帖子: 893
注册时间: 2011-02-14 17:46

Re: zswap在无外部IO设备动作的情况下,和zram比(时间,空间)效率如何?

#4

帖子 rosynirvana » 2016-04-30 1:44

首先,你的描述中的问题

1. 通常来讲,顺序表不适合并行,适合并行的是链表。对于这里的情况,顺序表如果要修改就一定不适合并行,树还有适合并行的结构,当然这里没有用;
2. zram只有meta部分用vzalloc,主要内存分配用的是zs_malloc;
3. 内存管理大多数用树?只知道vma用树;
4. 仔细看代码就会发现zram的meta在修改时候一样加锁。

空间效率上,内存压缩用的lzo lz4算法压缩率不高,在压缩文本的测试中也不大会小于原文件的5/8,在zram这种块设备上要用6个区块(sector),或者用8个区块
( 1 page = 4KiB = 8区块,临界值是8 / 4 x 3 = 6区块,所以可以估计是以6区块和8区块为主 )
这就等于把7个区块的情况放弃了。对于zswap这种纯粹的swap辅助机制而言,只要压缩后体积 + sizeof(unsigned long)能放进一页中就行,从这点来看是zswap要好。

运行效率应该是差不多的。

如果不考虑强加上去的没有外部IO,那么zswap可以完全嵌入到swap机制中去,zram会带来一个LRU上的问题,最老的页面被留在内存中,较为年轻的页面反而要进入较慢的外部设备中去。
回复