2009-12-22 88 views
1

我有一个自动生成大量代码的项目,我们在链接到最终可执行文件之前将其构建到静态库中。我们使用gcc /蚊蚋5.04a有这么多的文件,我们必须将作业分成批次,调用AR多次以构建库(为了避免命令行长度的限制),例如:提高归档性能

[echo] Archiving codegen     
[echo] Deleting old codegen archive      
    [ar] Using ar found in /usr/bin   
    [ar] Batch 1 of 7 completed in 37.871 s 
    [ar] Batch 2 of 7 completed in 55.796 s 
    [ar] Batch 3 of 7 completed in 89.709 s 
    [ar] Batch 4 of 7 completed in 256.894 s 
    [ar] Batch 5 of 7 completed in 196.704 s 
    [ar] Batch 6 of 7 completed in 248.334 s 
    [ar] Batch 7 of 7 completed in 243.759 s 
    [ar] Archiving took: 1129.067 s   
    [ar] Using ranlib found in /usr/bin  
    [ar] Indexing took: 247.223 s    
[echo] Done with codegen     

我们正在寻找潜在的速度改进。看起来,随着存档的增长,每个批次需要的时间越来越长,大概是因为它在添加对象之前有更多的搜索(用于更新)。这似乎是删除归档文件比只更新旧归档文件更快的原因。在追求更高速度的过程中,我们在ar命令中使用了“qcS”标志。根据手册页,“q”(它应该是快速附加的)实际上是“r”(它是“使用替换”)的同义词,“c”创建存档(没有什么特别的)和“S”跳过生成一个索引(我们在末尾再次使用“ranlib”覆盖的索引

是否有任何方便的方式使用内置工具来使此操作更快?如果“快速附加”模式工作可能会是我们想要的,但唉

回答

1

我们发现时间问题的一大部分是被归档文件的位置,上面的数字是位于NAS设备上的对象和归档文件。在本地硬盘上(临时存储)将时间减少到〜20 - 40秒。复制所有文件,执行本地存档并复制结果需要很长时间而不是直接在NAS上进行存档,但我们正在考虑将整个构建过程转移到本地临时存储,这应该会大大提高性能。