问题描述
- 描述内容:
由于手上的小米平板2是2G运存版本,使用安卓子系统应用(哔哩哔哩、网易云音乐等)时内存不太够用导致卡顿明显,于是想着配置一下虚拟内存。
网上搜索了一番,查到一些内容说ChromeOS是使用zram,而不是传统的swap分区或文件来解决小内存设备问题。自己测试了一下发现果然无法成功开启swap分区或文件,总是“ swapon failed : Invalid argument”,不知道是不是系统哪里做了限制。不过想来米板2用的eMMC存储,配置传统swap文件反而是下策,一来影响eMMC寿命,二来IO速度硬伤。而zram是采用的内存压缩方式模拟swap,虚拟出来的swap分区其实是放在内存里,更加适合移动设备。
然后手动
modprobe zram
lsblk发现多了/dev/zram,然后
echo 3G > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon /dev/zram0
没有异常,接着看看结果
free -m
显示配置成功有3个G的swap,大功告成(按照1:2的预估最小压缩率的话,最小可用内存为:(2-3/2)+3=3.5G,实际运行时压缩率应该会更好)。打开安卓子系统应用,卡顿现象大为改善。
网上搜索又发现Crosh其实有预设好的脚本命令来配置的,并且开机自启动。于是在crash输入:
swap enable 3000
没有异常,然后重启,结果并没有自动配置。查找发现,实现该自启动的为文件/etc/init/swap.conf,内容:
exec /usr/share/cros/init/swap.sh start
于是在crash进行手动开启:
swap start
结果提示无法写入/proc/sys/vm/min_filelist_kbytes,文件不存在,额。。。
找到命令脚本源文件/usr/share/cros/init/swap.sh,发现报错来自里面start函数开头
echo "${MIN_FILELSIT_DEFAULT_VALUE_KB}" > "${MIN_FILELIST_SPECIAL_FILE}"
分析发现里面用到的很多路径都在系统里没有,再看源文件开头
# Copyright 2016 The ChromiumOS Authors
。。。
不知道是不是fydeOS并没有更新这些脚本命令。没办法,只好自己搞定开机自启动。新建/etc/init/swap_zarm.conf文件,参照预设脚本,加入:
start on started system-services
script
modprobe zram || logger -t "swap_zram" "modprobe zram failed (compiled?)"
echo 3G > /sys/block/zram0/disksize || logger -t "swap_zram" "failed to set zram size"
mkswap /dev/zram0 || logger -t "swap_zram" "mkswap /dev/zram0 failed"
tries=0
while [ "${tries}" -le 10 ]; do
swapon /dev/zram0 && break
: $(( tries += 1 ))
logger -t "swap_zram" "swapon /dev/zram0 failed, try ${tries}"
sleep 0.1
done
end script
总结:后来去看了一下最新的ChromeOS,貌似swap相关的init文件差异很大,一下子还没弄清楚它现在是怎么处理的。希望FydeOs也能完善一下相关的内容,毕竟及时是4G以上内存,相信很多人在重载使用是还是会觉得内存不足,而zram是在不加物理运存的情况下改善内存情况的一种很好的方式。
系统与设备信息
- 硬件与系统配置:小米平板2
- 处理器:Intel ATOM X5-Z8500
- 显卡:Intel HD Graphic
- RAM(运行内存):2G
- 存储容量:16G
- FydeOS版本:FydeOS for PC v17.1