[开箱] 45k 程式编译/build/compile Linux 机

楼主: changyuheng (张昱珩)   2021-06-09 22:26:47
本文 Web 版:https://bit.ly/3g6VXjD
https://i.imgur.com/V57niKn.jpg
# 背景
需求:程式编译,主要编译 Yocto(低配版 Build Code Server)
预算:4.5 万
# 零件挑选
## 中央处理器(CPU)
挑选 CPU 有几个重点,依优先级分别为:
售价(预算)、效能、功耗(耗电量、废热量)、C/P 值。
OpenBenchmarking 上搜集了各型号 CPU 的 Linux Kernel 编译时间
https://openbenchmarking.org/test/pts/build-linux-kernel ,
可用以评估各型 CPU 多核心编译的效能:
https://i.imgur.com/AODEvME.png
服务器版的 CPU 太贵,直接跳过。
AMD Ryzen™ 9 5950X
AMD Ryzen™ 9 3950X
Intel® Core™ i9-10980XE
这三颗 CPU 是目前家用主机的顶规。
Intel 这颗效能表现与 AMD 这二颗相伯仲,但功耗高很多,所以先剔除。
再来因为 5950X 和 3950X 这二颗都缺货,也只能放弃。
继续往下的选择中,AMD Ryzen™ 9 5900X 效能相差不大,有货,
且 C/P 值比 5950X、3950X 都高很多,因此没有什么悬念,就选它了。
## 主机板
相容 AMD Ryzen™ 9 5900X AM4 规格且有现货的芯片组有
B450、X470、A520、B550 和 X570。
符合目前需求的最便宜选择是 B450,但可惜目前 Mini-ITX 的版本缺货,
只能往更高阶看。因为想保留未来插高阶显示卡和 PCIe 4.0 SSD 的空间,
所以从 B550 和 X570 之间选了比较便宜的 B550。
https://i.imgur.com/TIT7R1F.png
https://i.imgur.com/1pFsFQp.png
## 内存
依照过去编译 AOSP 的经验,编译所需的内存大小,
约略是 CPU 执行绪数多少条,内存就要多少 GB。
除此之外,我也先在旧的电脑上,参考这个网页
https://www.linuxatemyram.com/ ,
分别在挂上 Swap 和卸载 Swap 的情形下实际编译 Yocto 专案,
来比较内存的使用状况。
测试机器:
- Intel® Core™ i7-8700K (6 核、12 绪)
```
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 12
On-line CPU(s) list: 0-11
Thread(s) per core: 2
Core(s) per socket: 6
Socket(s): 1
...
```
- 内存 16 GB
```
$ free
total used free shared buff/cache
available
Mem: 16303912 1840356 13280940 873236 1182616
13286976
Swap: 2097148 0 2097148
```
1. 有挂载 Swap:
挂 Swap:
```
swapon -a
```
清内存:
```
sync; echo 3 | tee /proc/sys/vm/drop_caches
```
开始搜集内存使用状况:
```
free -s 1 | tee memory-usage-log-swapon.txt
```
进行编译。
完成后确认,编译过程中最低可用内存剩余量:
```
grep Mem memory-usage-log-swapon.txt | awk '{print $7}' | sort -n |
head -n 1
```
及最高 Swap 使用量:
```
grep Swap memory-usage-log-swapon.txt | awk '{print $3}' | sort -nr
| head -n 1
```
最低可用内存剩余量为 5.46 GB,最高 Swap 使用量为 321.75 MB。因此在 12 绪
的 CPU 下编译我的 Yocto 专案,搭配 16 GB 的内存是足够的。本次编译耗时
1:06:13.27。
2. 无挂载 Swap:
卸 Swap:
```
swapoff -a
```
清内存:
```
sync; echo 3 | tee /proc/sys/vm/drop_caches
```
开始搜集内存使用状况:
```
free -s 1 | tee memory-usage-log-swapoff.txt
```
进行编译。
完成后确认,编译过程中最低可用内存剩余量:
```
grep Mem memory-usage-log-swapoff.txt | awk '{print $7}' | sort -n
| head -n 1
```
最低可用内存剩余量为 5.24 GB,与开头的经验,编译中 1 条执行绪约需 1 GB
相符。本次编译耗时 1:06:10.88。
AMD Ryzen™ 9 5900X AM4 是 12 核 24 绪,因此 32 GB 的内存应足够使用。
同样大小的内存也有价差,时脉、CL 值、会不会发光、品牌等都有影响。
我买了 DDR4-3600 CL18,其实应该选 DDR4-3200 CL16 的就好,
因为二者效能差不多,但 DDR4-3600 CL18 的价格高了近 20%。这边预算没有控制好。
## 固态硬盘(SSD)
储存空间大一点比较方便,目前有货的最大大小为 2 TB,
WD_BLACK™ SN750 太贵,就挑了使用国产控制器(群联)一样五年保的
Pioneer APS-SE20Q。
## 显示卡
基本上这台电脑除了安装 OS 以外都不会接萤幕,因此低阶的即可。
但仍希望起码能推动 4K 的萤幕看影片,所以挑了 GeForce GT 1030。
## 机壳
目前使用的 SilverStone SG09 搭配猫头鹰塔散,机壳尺寸和散热效果都让我很满意。
因为小机壳轻巧的特性,这次锁定 Mini-ITX 的机壳。
小机壳内部比较拥挤,装高度发热的元件要特别注意通风、散热。
参考了一些在 YouTube 上看到的机壳:
https://i.imgur.com/V1AvwxZ.png
发现符合我期待的散热方式及电源位置的只有 NZXT H210,所以就选了它。
https://i.imgur.com/SmRjUdH.png
挑选小型的机壳时,除了要注意 CPU 散热器的高度外,
还要看散热器的体积对机壳内通风的影响。
H210 的内部配置有一些亮点:
1. 前进气风扇的尺寸比后出风风扇的大,因此很容易可以达到机壳内正压的配置。
2. 风流设计看起来很合理,前方进风后方出风,中间会吹到 CPU、显示卡和电源。
3. 有附防尘滤网。
4. 电源下置且有独立空间。
5. 可使用 ATX (PS/2) 标准的电源。
6. 电源直接贴在背板,电源线可以直接接到电源上,不需要透过机壳自带的电源延长线
像这种小型的机壳,因为显卡离机壳底部很近,因此还要注意,若机壳下方会装风扇,
其风向应与显卡风扇的风向一致。
不是所有显卡的风扇都是往芯片方向吹的,也有反著吹的:
https://i.imgur.com/ENmoSOh.png
补充说明,我会避免选择将电源供应器定位为主要排风元件的机壳(如后上置型的)。
因为电源供应器很怕热,长期在较热环境中工作的电源供应器,除了寿命比较短之外,
也很危险
(可参见全汉官网说明 https://www.fsp-group.com/tw/knowledge-prd-4.html )。
机壳内有独立空间可放置电源供应器是最理想的,这样电源供应器就不会与 CPU、
显示卡等高发热元件混在同一空间内。
## CPU 散热器
散热器的选择实在太多了,所以我直接在以安静著称的猫头鹰里挑。
因为希望能与机壳设计的水平风流相配合,所以只看塔式散热器。
5900X 蛮热的,需要散热能力好一点的,
同时我又不喜欢内存完全被散热器遮住看不到,所以挑了 Noctua NH-D15S
Mini-ITX 主板 + 内存 + NH-D15S 示意图:
https://i.imgur.com/kzLSOdm.jpg
NZXT H210 + NH-D15S 示意图:
https://i.imgur.com/c8eoCy4.jpg
## 电源供应器
电源供应器是耗材,它的供应瓦数是会衰减的。
预算许可的话,就把瓦数买到 CPU + 显卡功耗的 2 倍,
这样电源供应器在其他零件坏掉前应该都会是好的。
爱护地球,在能负担的范围内选转换功率高一点的。
如果机壳支援 ATX 规格的电源供应器,那在电源供应器的选择会比较多,也会比较便宜。
# 组装
*开车就是要开手排才热血,电脑就是要自己装才有灵魂。*
开始前,先说明一个注意事项:
除了一些非通用特殊螺丝之外,一部电脑主机里的螺丝有 3 种不同的螺丝牙,
这三种螺丝牙通常是,
最粗的(kb5)锁风扇,
中等的(#6-32 UNC)锁主机板、机壳、电源,
最细的(M3)锁硬盘。
除此之外,也要注意螺丝头,
有些适合用平头、有些适合用宽头、有些适合用手拧的等等。
详请见维基百科 https://en.wikipedia.org/wiki/Computer_case_screws 。
(各种螺丝外观请见本文第一张图)
全零件合照(这边缺了 SSD 和 后置薄扇):
https://i.imgur.com/noqRfzF.jpg
拿出工具盒,正式开始。
https://i.imgur.com/JyTsFsK.jpg
## 安装电源供应器及机壳风扇
1. 把电源供应器装进机壳后下方 https://i.imgur.com/kWJR5BM.jpg
2. 将 2 颗 14" 进风扇装进机壳前方 https://i.imgur.com/qyAUenL.jpg
**Update**
之后为防落尘,上方出风口用黑色不织布封住:
https://i.imgur.com/NuXGxmq.jpg
https://i.imgur.com/cuCt04N.jpg
https://i.imgur.com/a2CILfM.jpg
另购了猫头鹰 NF-A12x15 薄扇 1 个装在机壳后方出风。
https://i.imgur.com/QALitqZ.jpg
https://i.imgur.com/Q2i9GDa.jpg
https://i.imgur.com/cPrBIWS.jpg
**Update 2**
实测后发现 NF-A12x15 对降低峰值温度没什么效果,同时产生了低频的共鸣噪音,所以
后来又把它拆掉了。
## 安装 CPU
1. 首先核对 CPU 安装方向的标示 https://i.imgur.com/wniTpbF.jpg
2. 拉起 CPU 固定杆并轻轻放下 CPU https://i.imgur.com/fpWspuv.jpg
3. 放下固定杆,确定 CPU 有被夹紧 https://i.imgur.com/Cs3BaYr.jpg
## 安装 NVMe SSD
补拍 SSD 照片 https://i.imgur.com/d2c6lcZ.jpg
B550 不是所有 NVMe 插槽都是 PCIe 4.0,所以要注意一下。
不过因为买的是 PCIe 3.0 的 SSD,所以也没差。
1. 从脚位判断安装方向 https://i.imgur.com/iGk6i0b.jpg
2. 斜斜地插入 SSD https://i.imgur.com/VA4LrZ2.jpg
3. 用六角套筒卸下主机板上的固定用螺母柱 https://i.imgur.com/MIggsjq.jpg
4. 将 SSD 压平,并用螺母柱加以固定 https://i.imgur.com/36v2f2D.jpg
5. 撕开 SSD 散热片的背胶 https://i.imgur.com/pquCe1s.jpg
6. 将 SSD 散热片放至定位,并锁上螺丝固定
https://i.imgur.com/M0cERWr.jpg
https://i.imgur.com/uCk4EC0.jpg
## 安装内存
1. 扳开内存插槽二侧的卡榫 https://i.imgur.com/fRXAeUp.jpg
2. 确认内存插销缺口位置 https://i.imgur.com/ZPouk0c.jpg
3. 垂直压下内存直到二侧卡榫卡紧内存 https://i.imgur.com/EqZckiM.jpg
## 安装 CPU 散热器
1. 卸下原厂散热器基座 https://i.imgur.com/0FkfuLc.jpg
2. 留下散热器加固背板
https://i.imgur.com/t3TfpVX.jpg
https://i.imgur.com/B4wl5iY.jpg
3. 比对散热器方向 https://i.imgur.com/cAOcx1C.jpg
4. 安装散热器基座
5. 点散热膏。于 CPU 中心点上一球直径约 0.5 cm 的量。
https://i.imgur.com/UHkGIjJ.jpg
6. 锁上散热鳍片 https://i.imgur.com/fnaYelT.jpg
7. 锁紧散热鳍片后,从与 CPU 的接缝处检查散热膏是否适量。
应该要稍微有一点散热膏被压出来,但量不要多到会沾到主机板。
https://i.imgur.com/1J9u7wz.jpg
8. 调整散热器风扇方向 https://i.imgur.com/rJBSN82.jpg
9. 接上 CPU 散热风扇电源 https://i.imgur.com/a2kVMx5.jpg
完成。
可以看到 NH-D15s 给内存相当大的空间:
https://i.imgur.com/WdEr3rA.jpg
https://i.imgur.com/4JICywW.jpg
散热鳍片的长、宽没有超出主机板:
https://i.imgur.com/reOY6Vf.jpg
## 安装主机板
准备放主机板进机壳时,才发现散热鳍片会卡到这款机壳后面和上面的风扇,
只好把它们拆掉。
https://i.imgur.com/5xa5kBJ.jpg
https://i.imgur.com/OHmiEsO.jpg
1. 接上 CPU 电源
2. 将主机板放至定位,以螺丝固定
https://i.imgur.com/PGZp45G.jpg
左上角的螺丝孔被 CPU 散热鳍片挡住锁不到,
要能锁到的话,就要先装主机板再装鳍片。
但因为先锁主板再装鳍片会不能检查散热膏的量,
加上这张主板背面有金属框加固应该够坚固,所以就不重做了。
3. 接上其他各种电源 https://i.imgur.com/87pdapT.jpg
## 安装显示卡
低阶显卡不用额外接电源,直接插到对应的槽并锁上机壳背板就好。
https://i.imgur.com/uWxyhop.jpg
## 理线
理线是一个耗时也不见得做得好的工作,建议动手前先参考别人的做法。
对外观讲究的话,可以另外购买高颜值的订制线。
网络上搜寻“机壳型号” + “Cable Management”就可以看到很多范例。
https://i.imgur.com/v2bdCbH.jpg
https://i.imgur.com/HfgScC2.jpg
## 完成
最后盖上机壳侧板,就完成啦!
https://i.imgur.com/6kqLXHM.jpg
# 验收
## CPU 效能
相同专案在新电脑的编译时间约为 35 分钟,
在上面列的 i7-8700K 旧电脑约为 66 分钟。
CPU 执行绪数加倍,时间约减半,算是符合预期。
## 内存用量
编译过程中,这台 24 绪的电脑可用内存高达 20 GB 左右,也就是说编译过程中,
有用到的内存约 12 GB。但在旧电脑 12 绪的 CPU 上编译也是只用了 12 GB 左右。
这个结果说明了执行绪数目和内存用量成比是错误的假设 ^___^"
## CPU 温度
环境温度 28 °C、空调
https://i.imgur.com/jjJ7n56.jpg
1. 后、上出风风扇都没装
待机:约 33 °C
峰值:80.4 °C
2. 后出风风扇没装、上方出风口封起
待机:约 33 °C
峰值:81.9 °C
https://i.imgur.com/oNXekMf.png
3. 后出风风扇 NF-A12x15 、上方出风口封起
待机:约 33 °C
峰值:81.9 °C
https://i.imgur.com/WJBfGxc.png

Links booklink

Contact Us: admin [ a t ] ucptt.com