今天早上编译的时候,我有一个想法。
鉴于专用Linux机器(例如运行Fedora),用户远程登录并编译(使用gcc)他们的c ++软件,该软件存储在他们自己的机器上(在小型LAN上),与符号链接链接到Linux盒子。
假设现在每个用户正在编译exaclty相同的代码... 一个用户可以在10分钟内编译和链接他的代码。
总共2个用户需要20分钟才能同时编译 3个或10个用户呢?
是否存在一个开销,随着用户的增加收益递减?
作为一个额外的问题 - 在这个设置中你有什么提示来提高编译效率?
答案 0 :(得分:2)
我建议distcc
。
答案 1 :(得分:0)
根据项目源的大小,保存可能在编译之前将所有文件本地复制到构建计算机。如果编译器必须根据需要通过网络提取所有文件,这将引入一些开销,因为网络访问比磁盘访问慢很多。
如果您编写了脚本或使用的工具只能将修改后的文件复制到构建计算机,那么开销将大大减少。在这种情况下,构建机器基本上会保留源文件的本地镜像,每次编译时,它都会更新任何已修改的文件,然后进行编译。显然,如果你有很多用户和/或大型项目文件,那么你会遇到存储/空间问题。
答案 2 :(得分:0)
由于以下原因,总是涉及开销:
最后一个对您来说是最重要的一个,因为网络访问速度比磁盘访问速度慢得多。预缓存(首先在本地获取所有文件,然后开始编译)可能会有所帮助。已经开始的构建将不会受到新并发用户的阻碍。
答案 3 :(得分:0)
编译主要是CPU限制,因此假设您有足够的RAM,您可以预期编译时间大致为(每个任务的时间)*(任务数)/(系统中的CPU /内核数)。 (奇怪的是我在我的一个项目的3核心系统上运行'make -j',速度提高了3倍以上,所以可能存在某种阻塞问题,导致顺序make无法全速运行。)
为什么用户不在自己的计算机上编译程序?