使用新的压缩算法提高快照速度

2020-10-28 13:45:47

安全性和性能通常是相互排斥的概念。出色的用户体验是设法将两者融合在一起,一方面不会损害强大而坚实的安全基础,另一方面又不会影响快速、响应迅速的软件交互。

快照是独立的应用程序,具有分层的安全性,因此,与那些通过传统Linux打包机制提供的相同应用程序相比,它们有时可能会降低感知到的性能。我们很清楚这一现象,我们已经投入了大量的精力和时间来解决任何速度差距,同时考虑到安全问题。去年,我们讨论了在进行fontconfig缓存优化后改进Snap启动时间。现在,我们想告诉您另一个重要里程碑-对快照使用新的压缩算法可将应用程序启动时间缩短2-3倍!

默认情况下,使用XZ算法将快照打包为压缩的只读squashfs文件系统。这会导致较高的压缩级别,但因此需要更多的处理能力来解压缩和扩展文件系统以供使用。在桌面上,用户可能会认为这是一种“缓慢”,即应用程序启动所需的时间。仅在应用程序数据缓存在内存中之前的第一次启动时,这一点也更加明显。随后的启动速度很快,通常与传统打包的应用程序相比几乎没有什么不同。

为了缩短启动时间,我们决定测试一个不同的算法-LZO-它提供较小的压缩,但需要较少的处理能力来完成操作。

作为测试用例,我们选择了Chromium浏览器(稳定版本,85.X)。我们认为这是一个极具代表性的案例,原因有几个。首先,浏览器是一个无处不在的(和流行的)应用程序,使用频率很高,所以任何潜在的缓慢都可能是显而易见的。第二,铬是一个相对大而复杂的应用。第三,它不属于任何特定的Linux桌面环境,这使得测试具有独立性和准确性。

相比之下,XZ压缩的快照重约150 MB,而使用LZO压缩的快照大小约为250 MB。

我们决定在一系列系统(2015-2020年笔记本电脑型号)上进行测试,包括硬盘、固态硬盘和NVMe存储、英特尔和Nvidia显卡,以及几个操作系统,包括Kubuntu 18.04、Ubuntu 20.04 LTS、Ubuntu 20.10(撰写本文时的预发布版本)和Fedora 32 Workstation(就在Fedora 33发布之前)。我们相信,这提供了硬件和软件的良好组合,使我们能够更广泛地了解我们的工作。

System 1配备4核/8线程英特尔®i5(TM)处理器、16 GB RAM、500 GB固态硬盘和英特尔®超高清620显卡,运行Kubuntu 18.04。

System 2配备4核英特尔(R)i3(TM)处理器、4 GB RAM、1TB 5,400 rpm机械硬盘和英特尔(R)HD 440显卡,运行Ubuntu 20.04 LTS。

System 3配备4核英特尔(R)i3(TM)处理器、4 GB RAM、1TB 5,400 rpm机械硬盘和英特尔(R)HD 440显卡,运行Fedora 32工作站。

System 4配备4核/8线程英特尔(R)i7(TM)处理器、64 GB RAM、1TB NVMe硬盘和运行Ubuntu 20.10的NVIDIA GM204M(GeForce GTX 980M)。

在每个选定的系统上,我们检查了启动和显示以下各项的浏览器窗口所需的时间:

我们用一个新的、未使用的配置文件测量了Chromium浏览器的启动时间。请注意,这些结果具有很强的指示性,但是交互式使用情况测量总是存在一定程度的差异,这可能是由您的整体系统状态、其他后台活动导致的当前系统负载、磁盘使用情况、您的浏览器配置文件和附加组件以及其他因素造成的。

表中的结果是多次运行的平均值。冷启动的标准偏差为~0.7秒,热启动的标准偏差为~0.1秒。

与XZ压缩相比,使用LZO压缩可提供40-74%的冷启动改进。

在Kubuntu18.04系统上,仍然以DEB包的形式提供Chromium,LZO压缩的Snap现在提供几乎相同的启动性能!

在Fedora32工作站上,LZO压缩的Snap冷启动比RPM包快33%(实际相差约5.0秒)。

您可能对分析浏览器或任何应用程序的启动时间感兴趣。为此,我们编译了一个脚本,您可以下载该脚本(链接到GitHub Gist),使该文件成为可执行文件,然后在您的系统上运行。该脚本允许您将任何本地打包软件的启动时间与Snap进行比较,并且可以与任何包管理器一起使用,因此您可以在Ubuntu、Fedora、openSUSE、Manjaro等上使用此脚本。

为了防止任何潜在的数据丢失,这些函数在脚本的主要部分被注释掉,因此您需要在脚本执行任何操作之前手动取消对它们的注释。

我们对LZO压缩带来的改进感到高兴,因为它允许用户获得更快、更流畅的快照体验。现在,我们可以研究通过其他快照引入和推出类似更改的最佳方式。

这绝不是旅程的终点!差得远呢。我们正在进行一系列额外的改进和优化。在大小方面,您可以使用内容快照和阶段快照来减小快照的侧面,还可以利用Snapcraft扩展。我们还在致力于一组新的字体缓存修复,在这个主题上也有一个相当引人注目的故事,我们很快就会分享它。在不久的将来,我们打算发布一个指南,帮助开发人员削减快照和减小总体大小,所有这些都可以帮助创建更精简、更快的应用程序。

如果您对这个话题有什么意见或建议,我们很乐意听取。您可以告诉我们您自己对Snap启动性能的调查结果,并指出您认为应该解决的任何突出问题或问题,包括您认为应该分析和优化的任何特定快照。我们一直致力于改善用户体验,并注意您可能得到的任何反馈。同时,享受您更快的浏览吧!

了解Ubuntu桌面操作系统如何支持全球数百万台PC和笔记本电脑。