我有一个工作站,3 个人登录该工作站来编译源代码。我们的项目包含大约 1000 个文件,GCC 将其编译为一个 ~200MB 的 .elf 文件(带调试)。
我们当前的工作站是 Intel Core 2 CPU X6800 @ 2.93GHz,带有 2 个软件 RAID0 SATA 7.2K RPM 驱动器和 8GB 内存。
当一个人在做编译时,系统运行良好,但当两个人同时尝试编译时,速度会急剧下降。使用 distcc 将编译分发到其他服务器会有所帮助,但这当然不会缩短链接时间。链接可能需要长的时间。
对于新服务器来说,什么样的硬盘/内存配置比较好?我希望总花费不超过 5-6 千美元。例如:
对于这种工作负载,RAID0 是个好主意吗?我听说 RAID0 可能会影响寻道时间,我想这在编译大量小文件时可能会影响寻道时间?
如果我想支持 3 位开发人员,是购买 3 台便宜的机器更好,还是购买 1 台适合我价格范围的大型服务器更好?
考虑到我的价格范围,我应该考虑 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 所说的那样,最好分析一下你的系统,找出瓶颈并加以解决。)