Zram内存压缩-开机自启动配置

:pushpin:问题描述

  • 描述内容

由于手上的小米平板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是在不加物理运存的情况下改善内存情况的一种很好的方式。

:computer:系统与设备信息

  • 硬件与系统配置:小米平板2
    • 处理器:Intel ATOM X5-Z8500
    • 显卡:Intel HD Graphic
    • RAM(运行内存):2G
    • 存储容量:16G
    • FydeOS版本:FydeOS for PC v17.1

这个机不是很多人魔改自己加内存的么,有4G内存现在的安卓子系统就足够用了,不太会卡顿,换安卓11后就可能不够了。fydeos官方说的就是至少4G内存,再怎么虚拟内存都会消耗其他资源,zram也会消耗cpu耗电,不如加上一点内存省得顾此失彼的。
另外有现成的自启动,论坛有人发过,搜auto应该可以搜到。

现在手上的机器还没魔改过,后面是要改一下的,目前先凑合着用。此外这款机器散热是个瓶颈,估计也得改好才用得顺手。目前哔哩哔哩1080P视频可以流畅播放,但CPU温度接近60度,不能套保护壳,如果套了保护壳的话散热不畅差不多十分钟左右就会过热重启。

大佬,米板2在fydeos上的驱动全吗

目前在米板2上我是通过Brunch框架编译了Linux6.6内核来启动FydeOS的。
1.米板2的主板设计原因,内核原版gpu驱动是无法正常启动系统的(Ubuntu下可以nomodeset启动,但是FydeOS不行),所以给gpu相关的i915驱动源码打了补丁才成功启动,日志里面发现3d加速报错,但估计也用不上,其它暂未发现异常。
2.触屏驱动正常。
3.WiFi正常,但蓝牙无法打开,驱动都有,但还没找到问题所在。
4.声卡硬件是rt5659解码芯片+tfa9890功放芯片,他们单独的驱动在Linux内核里都有,但没有适配机器的Board驱动,我自己试着写了一个,目前能正常驱动喇叭外放,但3.5mm耳机孔拔插检测部分还没完成,还无法使用耳机。
5.屏幕亮度目前无法调节,一直是最亮,驱动是有识别的,但应该要打补丁。
6.电池驱动也有识别,但电量不准确。
7.音量按键、电源键正常。底部三按键有识别,返回、home键正常,但菜单键识别成“s”字母按键,按键灯不亮,不过这三键也用不太上。
8.摄像头无法工作。

1 个赞

v18似乎是默认配了zram(?),看到帖子想照着配一下发现已经有swap和zram块了233

amd64-fydeos ~ # free -h
               total        used        free      shared  buff/cache   available
Mem:           7.7Gi       1.4Gi       3.9Gi       324Mi       2.4Gi       5.8Gi
Swap:           15Gi          0B        15Gi

看样子是默认开启了2倍物理运存的zram。我还没升到18,有时间试试用18会不会有其他问题。