Zypper 添加实验性并行下载

2025年3月27日 | Douglas DeMaio | CC-BY-SA-3.0

Zypper Adds Experimental Parallel Downloads

最新版本的 zypper 实验性媒体后端和对并行包下载的支持已随 libzypp 17.36.4 和 zypper 1.14.87 的发布而引入。

根据 factory 邮件列表中的一封邮件,这些增强功能通过减少获取包和元数据所需的时间来提高包管理的性能。

该更新提供了两个主要功能:一种使用并发连接获取包的能力,以及一个简化的媒体后端,可以改善连接重用和元数据处理。这两个功能目前处于实验阶段,必须手动启用。

在默认情况下正式启用该功能之前,可以通过在执行 zypper 操作之前设置环境变量来启用并行包下载。这允许同时下载多个包,从而提高整体速度。

启用并行下载

env ZYPP_PCK_PRELOAD=1 zypper dup

可以使用以下指令在 zypp.conf 文件中配置并发下载的数量

download.max_concurrent_connections = 5

默认值为 5。但是,根据系统资源和网络条件,更高的值可能会产生更好的性能。

可以使用单独的环境变量启用新的媒体后端。该后端通过避免获取 metalink 和多服务器文件拆分来消除开销。它针对更好的元数据获取期间的连接重用进行了优化。

启用新的媒体后端

env ZYPP_CURL2=1 zypper ref

虽然这两个功能是独立的,但一起使用时效果最佳。在 .repo 文件中使用 metalink= URL 可以进一步提高镜像性能。但是,baseurl= 仍然是生产系统的首选设置,因为它具有受信任的密钥行为。

要使用新功能,需要以下版本

  • libzypp 17.36.4 或更高版本
  • zypper 1.14.87 或更高版本

这些版本在 Tumbleweed Slowroll 中可用。用户可以使用 DistroboxLeap 或不可变桌面变体 AeonKalpa 上测试这些新的增强功能。

Tumbleweed 上的 openSUSE-repos 用户获得了 mediahandler=curl2 作为 仓库 URL 的一部分,以及通过最新的 openSUSE-repos 更新在 /etc/profile.d/opensuse_repos.sh 中预设 ZYPP_PCK_PRELOAD=1

Leap 15 和 16 用户可以从开发仓库获取包含这些增强功能的 zypper 更新。

要安装更新的软件包,用户可以使用 sudo su - 切换到 root shell,然后运行 zypper in <package-name>。不幸的是,调用 sudo zypper 不会处理 /etc/profile.d/ 文件,并且变量 ZYPP_PCK_PRELOAD=1 会被取消设置。习惯于调用 sudo zypper 的用户可以创建一个别名或手动传递变量(参见 env ZYPP_PCK_PRELOAD=1 示例)。一旦并行下载功能成熟并在 zypper 中默认启用,这部分繁琐的操作将消失。

https://download.opensuse.org/repositories/zypp:/Head/

并行下载应允许在慢速或高延迟连接上的系统更好地利用可用带宽。使用新的后端进行元数据刷新会变得更加高效。这些改进还可以减少 CI/CD 管道和自动化环境中的设置时间。

以下是 factory 邮件列表中的一封邮件 中列出的基准测试结果

Scenario                                           Time
--------------------------------------------  --------
Download 100MB / ~250 packages
Default (MultiCurl)                               68.7 sec
New Backend (ZYPP_CURL2=1)                        29.6 sec
Parallel Downloads (ZYPP_PCK_PRELOAD=1)           13.1 sec

Download 1.02GB / 407 packages into empty rootfs
Default (MultiCurl)                               281.1 sec
New Backend (ZYPP_CURL2=1)                        208.5 sec
Parallel Downloads (ZYPP_PCK_PRELOAD=1)           119.6 sec

这些结果显示在实际场景中有了显著的改进,在某些情况下总执行时间减少了 50% 以上。

虽然仍处于实验阶段,但这些选项现在可供希望启用和测试的用户使用。

希望提供反馈的用户可以回复 邮件列表线程提交 libzypp bugzilla 组件的错误报告

反馈越多,该功能就能越早正式发布。

教程

openSUSE YouTube 频道上观看我们的教程,了解其使用和设置方法。

分享此帖子