8种机械键盘轴体对比
本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?
来源: https://pengzhangdev.github.io/zram/
简介¶
在linux内核的mm子系统中, 包含三个支持内存压缩的组件, 分别是zram, zcache 和 zswap.
zswap: 前提条件是, 系统中存在swap设备, 内核版本>3.5, 因为依赖了frontswap的接口, 用于管理swap page.
zswap是一个轻量化的后端架构, 将进程各种交换出的页面进行压缩, 并存储在一个基于RAM的内缓冲池中. 缓冲池不预分配, 有最大值, 且当缓冲池满了, LRU的内存页会被写入swap设备. 依赖swap分区, 不适用hdtv.
zcache: 与zswap类似, 依赖frontswap接口和cleacache接口, 内核版本>3.5. 与zswap一样, 将进程交换出的页面和文件系统的缓冲进行压缩并存储在RAM的内存缓冲池中, 在缓冲池满后, 将页面存入swap分区或者 RAMster (一种基于网络的内存池共享技术, 可以共享网络中其余硬件的内存). zswap可以理解为是zcache的子集. 不适用hdtv.
zram: 内存中的swap设备, 内核>3.14, 可以理解为zcache的RAM缓冲池. 优先级最高, 不建议与其他swap一起使用.不依赖真实的swap设备(Nand或者网络), 倾向于在低内存的嵌入式设备中使用.
综上, zram更适合hdtv这个项目
zram¶
zram是将系统中的内存的一部分内存隔离成zram设备(swap设备),对于小内存的设备, 在使用上会感内存被扩大了.
linux内核中为zram提供了各种压缩算法, 默认的是LZO, 该算法在大部分情况下都能很好地平衡压缩率和速度. LZO主要是在速度上优化.在一些比较正式的文档上, LZO的压缩率平均为50%. 下面是针对内核源码(50.6M)压缩的一个图表, 网上提供的.
lzop: 1.62 seconds to compress, 18.0 MB, ratio=.355
gzip: 19.13 seconds, 10.8 MB, ratio=.213
bzip2: 60.81 seconds, 8.46 MB, ratio=.176
xz: 311.65 seconds, 7.33 MB, ratio=.145
压缩率计算:
相关数据/sys/block/zram0/{mem_used_total,orig_data_size,compr_data_size}
compression radio = orig_data_size / compr_data_size
real compr. ratio = orig_data_size / mem_used_total
优点¶内存扩大, 平均压缩比为2.0
由于在实现上, 如果某个PAGE的压缩率大于PAGE_SIZE * 4 / 3 (kernel 3.10), 则不进行压缩, 在读取时, 也就省下解压的消耗. 从而提高速度,降低CPU占用,但是会降低压缩率.
缺点¶CPU占用
功耗增加
由于占用一部分内存作为zram设备, 则如果zram压缩速度不够快, 反而更容易引发OOM.(github上的一个情况, 无数据信息, 在ZX2000上未出现该情况)
调整方法¶
CPU占用查看kswapd(kswap)
CPU占用调整:/sys/block/zram0/max_comp_streams 设置压缩流个数. 默认为每个CPU分配1个.
/sys/block/zram0/comp_algorithm 切换压缩算法, 建议使用默认的LZO, 速度快
测试¶
以下数据是 在ZX2000上, UI切换和启动新应用换, 抓取的数据.
压缩率相关的三个值分别为
# busybox free
total used free shared buffers cached
Mem: 427400 365136 62264 408 348 72148
-/+ buffers/cache: 292640 134760
Swap: 204796 103784 101012
orig_data_size: 90275840
mem_used_total: 25862144
compr_data_size: 21846958
zero_pages: 1903
压缩率为:
compression radio(orig_data_size / compr_data_size) = 90275840 /