刚试了squashfs配合overlayfs做root目录,感觉系统在机械硬盘上快不少,

其它类软件,非上述版软件
回复
科学之子
帖子: 2251
注册时间: 2013-05-26 6:58
系统: Debian 9
送出感谢: 839 次
接收感谢: 30 次

刚试了squashfs配合overlayfs做root目录,感觉系统在机械硬盘上快不少,

#1

帖子 科学之子 » 2018-09-07 15:40

刚试了squashfs配合overlayfs做root目录,感觉系统在机械硬盘上快不少
和常见用法不同的是,我这里用在内置硬盘,而不是USB硬盘之类的慢速移动设备上.

squashfs创建命令:

代码: 全选

sudo mksquashfs "./debian_stretch" "./debian_stretch.1m.squashfs" -comp lz4 -Xhc -b 1M -no-exports -noappend
initramfs挂载命令

代码: 全选

loopdev="$(losetup -f)"
echo 1024 > "/sys/block/$(basename ${loopdev})/queue/read_ahead_kb"
losetup --direct-io=on --read-only "${loopdev}" "${rootmnt}/debian_stretch.1m.squashfs"
echo 1024 > "/sys/block/$(basename ${loopdev})/queue/read_ahead_kb"
mount -r -t squashfs "${loopdev}" "${rootmnt}${ROOTDIR}/overlayfsdir/lower"
mount -t overlay -o "lowerdir=${rootmnt}${ROOTDIR}/overlayfsdir/lower,\
upperdir=${rootmnt}${ROOTDIR}/overlayfsdir/upper,\
workdir=${rootmnt}${ROOTDIR}/overlayfsdir/work" "overlay-root" "${rootmnt}"
需要注意initramfs默认自带的losetup不支持 --direct-io 选项,需要手动加上
hook脚本命令:

代码: 全选

rm "${DESTDIR}/sbin/losetup" 
rm "${DESTDIR}/bin/losetup" 
copy_exec "/sbin/losetup" "/sbin/losetup"
另见:https://manpages.debian.org/stretch/ini ... .8.en.html

不过GUI文件文件管理器没法挂载设备了,可能是squasshfs还没实现ACL的关系.
测试环境:
Linux-kernel 4.14.13
Debian Stretch
Fri Sep 7 15:46:40 CST 2018 补充{
需要注意这种用法(squashfs 的 block-size 设置成最大的1M)会显著增加page cache内存消耗,
推荐在initramfs阶段挂载squashfs前就开启zram
viewtopic.php?p=3209439#p3209439
}
科学之子
帖子: 2251
注册时间: 2013-05-26 6:58
系统: Debian 9
送出感谢: 839 次
接收感谢: 30 次

Re: 刚试了squashfs配合overlayfs做root目录,感觉系统在机械硬盘上快不少,

#2

帖子 科学之子 » 2018-09-18 20:43

补充一个简单的benchmark和简单的原理分析(猜测)

代码: 全选

nopti nospectre_v2 nospectre_v1 rw fastboot noresume root=/dev/disk/by-uuid/UUID rootdir=/fast-debian-stretch/test.gzip
19.14 13.34
nopti nospectre_v2 nospectre_v1 rw fastboot noresume root=/dev/disk/by-uuid/UUID rootdir=/fast-debian-stretch/test.gzip
18.81 12.64
nopti nospectre_v2 nospectre_v1 rw fastboot noresume root=/dev/disk/by-uuid/UUID rootdir=/fast-debian-stretch/test.gzip
19.06 12.79
nopti nospectre_v2 nospectre_v1 rw fastboot noresume root=/dev/disk/by-uuid/UUID rootdir=/fast-debian-stretch/test.lz4
17.85 13.77
nopti nospectre_v2 nospectre_v1 rw fastboot noresume root=/dev/disk/by-uuid/UUID rootdir=/fast-debian-stretch/test.lz4
17.50 12.79
nopti nospectre_v2 nospectre_v1 rw fastboot noresume root=/dev/disk/by-uuid/UUID rootdir=/fast-debian-stretch/test.lz4
17.83 13.24

lz4 is win!
创建命令:

代码: 全选

sudo mksquashfs /overlayfs ./test.lz4 -b 1M -comp lz4 -Xhc -no-exports -noappend
sudo mksquashfs /overlayfs ./test.gzip -b 1M -comp gzip -no-exports -noappend
sync
lz4在我的机器上表现最佳(只测试过lz4和gzip),xz 什么估计就更慢了)不知道在CPU更快和内存更大的机器上是否会出现相反效果(毕竟压缩率更高,如果解压很快的话就相当于预读很快很多).
"-b 1M"参数使用1M大小的数据块,因为机械硬盘特性就是顺序读取超快,一次性顺序读取128K(默认大小)和1M几乎没有什么差别,就算读取到的数据暂时用不到,也可能之后不久会用到,就算真的用不到,也会被内核的缓存算法淘汰,在我以前的测试中1M相比128K有微弱优势(从引导菜单开始计算,普通ext4需要约30秒进入桌面,LZ4HC 128K需要约20秒进入桌面,1M需要约18秒进入桌面,具体测试结果没保存,这段是凭记忆写的,仅供参考)
"-Xhc" 启用lz4hc,应该对解压速度没影响,而且能获得高的数据密度,更有利于放大加速效果
"-no-exports"个人不需要NFS,所以去掉NFS的相关支持,尽可能提供数据密度
"-noappend"不确定追加是否会影响加速效果和系统镜像完整性,所以不要追加.
回复

回到 “其它类软件”