编译服务器的硬盘/内存配置?

编译服务器的硬盘/内存配置?

我有一个工作站,3 个人登录该工作站来编译源代码。我们的项目包含大约 1000 个文件,GCC 将其编译为一个 ~200MB 的 .elf 文件(带调试)。

我们当前的工作站是 Intel Core 2 CPU X6800 @ 2.93GHz,带有 2 个软件 RAID0 SATA 7.2K RPM 驱动器和 8GB 内存。

当一个人在做编译时,系统运行良好,但当两个人同时尝试编译时,速度会急剧下降。使用 distcc 将编译分发到其他服务器会有所帮助,但这当然不会缩短链接时间。链接可能需要长的时间。

对于新服务器来说,什么样的硬盘/内存配置比较好?我希望总花费不超过 5-6 千美元。例如:

  1. 对于这种工作负载,RAID0 是个好主意吗?我听说 RAID0 可能会影响寻道时间,我想这在编译大量小文件时可能会影响寻道时间?

  2. 如果我想支持 3 位开发人员,是购买 3 台便宜的机器更好,还是购买 1 台适合我价格范围的大型服务器更好?

  3. 考虑到我的价格范围,我应该考虑 15K SCSI 驱动器吗?或者 2 个 SW/HW-RAID0 SATA 7.2K 驱动器的性能是否差不多?

两次制造期间的加载示例:

Tasks: 238 total,   1 running, 237 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.5% us,  3.5% sy,  0.6% ni, 90.0% id,  4.3% wa,  0.0% hi,  0.1% si
Mem:   8096556k total,  8052960k used,    43596k free,    50248k buffers
Swap:  2040212k total,      224k used,  2039988k free,  6745740k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
18972 user1     15   0  138m 131m 1076 D   10  1.7   0:03.25 ld
 3414 user2     18   0  6148 1024  476 D    8  0.0   0:14.97 mv
18975 user3     18   0 61672  12m  652 D    6  0.2   0:00.52 make

答案1

您好。这是一个好问题,我最近也遇到过类似的问题。虽然查看内存和 CPU 很重要,但您会惊讶地发现硬盘 I/O 在编译代码时会产生多么巨大的差异。我的任务是为我们的开发人员寻找新的开发机器,当然参数会有所不同……这些是 C# 开发人员,他们签出 SVN 并编译 C# 代码,但最终产品应该非常相似。请阅读我老板的以下日记,其中包含我们的发现:http://it.toolbox.com/people/martin_sielaff/journal-entry/4562

最后我们发现 SSD 驱动器、核心 i5 或 i7 CPU 和 64 位操作系统产生了巨大的差异。

答案2

由于您目前有一个现有系统,请花点时间查看它。在编译期间,找出您当前的系统是否受到 CPU、内存或 I/O 限制。然后购买设备来解决最薄弱的环节。

我没有进行太多的编译,但在大多数情况下,我发现最薄弱的环节往往与 CPU/内存有关,而不是 I/O。

答案3

我无法评论哪些因素会影响 GCC 在您的工作负载下的性能,但一般来说,您需要更多的 CPU 负载和更多的 RAM\更多带宽。为此,也许值得考虑购买一台合适的服务器。

从成本角度来看,您应该能够以这样的预算(约 6k)获得配备 Xeon 5520 和 12G 1333Mhz DDR3 RAM 的双插槽服务器。这样,您的核心数量将增加四倍,再加上超线程带来的提升,这很容易就值得增加一两个核心。总主内存带宽也快了大约 4 倍(6 个通道 @ 1333Mhz,而 2 个通道 @ 1066Mhz)。5520 的时钟频率也让 Core Duo 望尘莫及。而且,您将获得更现代的 IO 子系统带来的好处。

在 RAID 0 中放入一对 Intel X25M 作为编译的临时工作区,您就能轻松超越 Core2 X6800 工作站的性能。对于您处理的文件大小,即使是最小的闪存 SSD 也应该可以解决问题。

答案4

我倾向于同意 Zoredache 的观点,尽管您给出的顶部打印显示您的 CPU 有 90% 处于空闲状态。

用户 2 的内存使用量似乎相当大,达到 1GB(除非以 K 为单位,但我不认为是,但可能是错的。)如果是 1GB,那么了解他们移动了什么(“mv”命令)占用那么多内存会很有趣。

链接阶段似乎是最耗费 CPU 的(正如您已经知道的那样)。如果这是我的系统,我会倾向于查看内存使用情况,并且可能在编译期间分析 iostat 输出。

这是四核处理器还是双核处理器?无论如何,这都是一个功能强大的工作站,所以我认为再加装硬件也没什么用。就像 Zoredache 所说的那样,最好分析一下你的系统,找出瓶颈并加以解决。)

相关内容