0

今天早上编译时,我有一个想法。

给定一台专用的 Linux 机器(例如运行 Fedora),用户远程登录并编译(使用 gcc)他们的 c++ 软件,该软件存储在他们自己的机器上(在一个小型 LAN 上),通过符号链接链接到 Linux 机器。

假设每个用户现在正在编译完全相同的代码......一个用户可以在 10 分钟内编译和链接他的代码。

是否需要 2 个用户总共 20 分钟才能同时编译 3 个或 10 个用户呢?

随着用户的增加,是否存在导致收益递减的开销?

作为一个额外的问题 - 你有什么技巧可以提高这个设置的编译效率?

4

4 回答 4

2

我建议distcc

于 2009-03-18T10:30:54.993 回答
0

编译主要受 CPU 限制,因此假设您有足够的 RAM,您可以预期编译时间大致为(每个任务的时间)*(任务数)/(系统中的 CPU/核心数)。(奇怪的是,我在我的一个项目的 3 核系统上运行了“make -j”,并且速度提高了 3 倍以上,因此可能存在某种阻塞问题,阻止了顺序 make 全速运行。)

为什么用户不在自己的计算机上编译他们的程序?

于 2009-03-18T10:36:24.590 回答
0

根据项目源的大小,节省可能是在编译之前将所有文件本地复制到构建机器。如果编译器必须根据需要通过网络提取所有文件,这将引入一些开销,因为网络访问比磁盘访问慢得多。

如果您编写脚本或使用仅将修改后的文件复制到构建机器的工具,那么开销将大大减少。在这种情况下,构建机器基本上会保留源文件的本地镜像,并且每次编译时,它都会更新任何修改过的文件,然后编译。显然,如果您有很多用户和/或大型项目文件,那么您会遇到存储/空间问题。

于 2009-03-18T10:28:26.730 回答
0

由于以下原因,总会产生开销:

  • 调度需求
  • 时间冲突的 I/O 操作

最后一个对您来说是最重要的,因为网络访问比磁盘访问慢得多。预缓存(首先在本地获取所有文件,然后开始编译)在这里可能会有所帮助。已经开始的构建将不会受到新的并发用户的阻碍。

于 2009-03-18T10:29:03.237 回答