【问题标题】:FreeBSD-10/gcc48 ar command incredibly slowFreeBSD-10/gcc48 ar 命令非常慢
【发布时间】:2014-10-13 13:06:22
【问题描述】:

我将服务器升级到 FreeBSD-10/gcc48,我的项目使用 ar 将子项目放入静态库,现在链接速度异常缓慢。

10.0-RELEASE-p4 FreeBSD 10.0-RELEASE-p4 #0: Tue Jun  3 13:14:57 UTC 2014     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64

使用不同的 ar 标志:

“时间 ar -v -c -u -q ...” : 362.62 real 0.11 user 0.82 sys

“时间 ar v -c -r -u -s ...”:407.94 真实 0.13 用户 0.80 系统

这必须比以前慢十倍(FreeBSD-8,股票 GCC 编译器)。我能做些什么来改善这一点? GNU Libtool 只是在幕后使用 ar(所以没有帮助),对吧?我应该完全绕过静态库吗? (但是构建一个 .so 不会花费同样的时间吗?)不用说,这会缩短我的开发周期时间。

【问题讨论】:

  • 由于用户和系统时间很少,你似乎把时间花在了IO上。所以做一些调整,例如确保您有足够的 RAM 并且没有交换。尝试另一个文件系统,或尝试将您的目标文件和库放在内存磁盘上。还要在创建全新的静态库时测试性能,与库已经存在时相比(因为您提供了 -u 标志)。还要检查没有 -u 标志。

标签: c++ ld freebsd unix-ar


【解决方案1】:

这个问题是由 ar(1) 的 I/O 访问模式与内核 UFS 死锁避免代码交互引起的,已在 FreeBSD r284298 中修复。这将在 2015 年 7 月中旬的 FreeBSD-CURRENT 快照版本中提供,并且应该向后移植到 FreeBSD 10.2。

【讨论】:

  • 7 月中旬之后可以通过 pkg 和端口获得吗?
【解决方案2】:

无法解析 ar 并且看不到它与其他任何东西,我构建了一个足够大的 RAM 磁盘以容纳我最大的 ar 输出文件,然后破解我的构建以输出 ar 那里,然后 @987654324 @ 文件到原来的目的地。

这解决了性能问题,并且是一个非常独立的解决方法,但您可以想象其中的警告。 (创建 RAM 磁盘需要 root 访问权限,保存您只是临时需要的资源,不能很好地扩展多个任务等)。

【讨论】:

    猜你喜欢
    • 2021-02-01
    • 2017-08-19
    • 2015-12-14
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2015-11-19
    相关资源
    最近更新 更多