zram,不开物理swap,内存即将耗尽时swappiness设置为100居然最流畅?为什么?
肚子饿了,我先吃点东西,个人猜测和更详细的描述稍后发布
Sat Mar 12 22:59:14 CST 2016补充:
测试环境:
物理内存总量:1989MB(被集成显卡吃掉32MB)
虚拟机内存总量:1491MB(XP虚拟机)
下面是我的分析与猜测(不一定正确,欢迎指正或提出不同想法):
首先压缩和解压算法的耗时是不会随内核swappiness参数变化的.

发现这个事情虽然直觉上感觉自己理解了,但比较感性,甚至越想越混乱...
感觉都呼吸困难了...
下面我用最简单但可能也是最模糊的语言描述一下我的分析与猜测(如果您有更清晰易懂的描述欢迎补充指正):
1:
swappiness=100时,一开始最卡,但当热页面稳定之后swappiness会继续频繁少量的交换冷页面
此时尽管频繁交换,但由于数据量少,不会卡,并且由于交换的是冷页面,对用户体验的影响也是最小化的(你可以简单的理解为几乎没有影响)
2:
swappiness=1时尽量避免发生交换,但每次交换时的数据量比swappiness=100热页面稳定时大,并且频繁发生,这就严重影响用户体验了
3:
zram速度与内存十分接近(在我的E5500CPU上约每秒400MB,双核并行理想状态下是800MB/s)
冷页面很少被使用,即使冷页面被使用也会较快响应,而且冷页面被使用之后极可能成为热页面,热页面的响应速度和普通内存页无异
4:
用曲线化的CPU监视工具可以发现swappiness值较小时CPU的波动更明显
而swappiness较大时CPU波动更加平稳
形象而可能不严谨的描述:
swappiness=100时,用户不操作时也频繁但少量的交换一些冷页面(对用户影响最小的页面);
用户操作时发生交换的数量就会较少,甚至不会因为用户的操作发生波动
swappiness=1时,只有在响应用户操作(即必要)时进行交换,如果用户不操作,交换也不会发生;
但用户一动就会发生"必要"的交换,这样的结果就是用户感觉很卡,虽然确实最小限度的发生交换
进一步简化描述(可能不严谨):
swappiness=1时所有交换几乎都发生在用户需要进行操作时
swappiness=100时大部分交换发生在系统空闲(用户盯着电脑屏幕看,没有输入)时,所以用户进行操作时交换的数据量也就较少了.