草庐IT

程序员给自己攒了台电脑:这配置老鸟来点评下

川川川川桑 2023-03-28 原文
今年给自己定下目标是整明白操作系统的底层运行机制,同时试着学习下系统修改与制作,之前一直用来兼职的J4125万由NAS就不太够看了,于是乎下血本单独组装一台X86架构设备。

这台设备后续用来远程测试与编译,所以这次装机配置单都是围绕这两点设计,下面正式和大家分享下编译环境的硬件搭建与环境部署实操流程,觉得有所帮助欢迎关注点赞收藏三连哈。

本次装机展示开始正文前先晒一下作业,本人对这台设备颜值相当满意。

虽然整机看起来粉嫩小巧,其实内心是一块十四核二十线程的i5-13500T暴力CPU,同时背部还有着一张双口万兆电口,容颜和内在极具反差感,哈哈。

这台设备的核心件都在设备顶部,开颅照如下图所示,内部机架上预留了大量的扎带槽位方便理线(坨线),后期打理比较轻松,替换固态硬盘和PCI拓展设备也比较方便。

乔思伯N2机箱本身带五个3.5寸硬盘位,比较有趣的是这张硬盘拓展卡接口兼容SAS硬盘,市面上有大量便宜的3-4T容量拆机SAS机械硬盘,后期维护成本会很低。

环境搭建思路还是那句话,自组电脑主机需要和实际工作需求匹配,这段分享下我的思路。

1、设备需求整理

原来兼职编译工作的设备是一台使用J4125平台的万由NAS,Debian核心的U-NAS OS其实不错,不过现在从零开始学习制作系统就涉及到虚拟机,四核四线程确实有些不够看。

新装这台编译机搭建前就已经规划好了,明确硬件和系统需求如下:

首先是设备硬件,CPU核心数和内存容量足够切出来一台4c4t+4G的虚拟机就可以,用于测试安装包与系统稳定性,主要需求在存储池与内存的IO,编译和传输主要就是看这两块。

第二是系统环境,由于需要不断测试新硬件、新驱动和新软件,操作系统得紧跟上游,同时预装工具越少越好,方便后期调试修改配置,最终选择的是ArchOS。

2、操作系统选择

关联硬件:CPU

能用的宿主系统非常多,Ubuntu、Debian甚至CentOS8.2都不错,但装这台主机的目的是学习制作系统,再考虑到后期驱动维护和问题解决,还是决定使用ArchLinux作为最终环境,对比其他Linux,选择ArchLinux的原因有以下三个。

ArchLinux最大的优势还是更新相当快,系统、驱动、软件版本都紧跟上游,这么做的好处不只是对于新硬件的支持,后期为这台主机升级/更换硬件也会比较方便,在独有的Pacman工具加持下,所有更新直接滚一下就可以完成升级,并且很少会出现兼容性问题。

其次是ArchWiKi百科,对我这个半路出家的自学玩家来说很重要,大部分的Linux问题都可以在这里找到解法,几乎所有问题都可以比较方便的找到答案,并且不需要FQ且有中文支持。

需要提醒下新手朋友们,如果打算和我一样选择ArchLinux作为宿主系统,Linux基础知识有多少其实无所谓,因为很多命令与常规系统不一样,正好不用破后而立,但是需要准备很多时间用于学习,Archlinux系统部署比较麻烦,老手可能都会卡在安装上。

3、文件系统选择

关联硬件:CPU、内存、主板、固态硬盘、机械硬盘

考虑到编译效率和后期替换硬盘的灵活性,文件系统选择的是ZFS,对比传统XFS,ZFS在数据完整性验证和修复上更胜一筹,这对小文件存储居多的需求来说更适合一些。

但是ZFS需要有两块硬件支持:

第一是需要CPU支持比较新的AVX指令集,不同指令集会影响存储池的最终性能。

第二是需要调用额外的内存辅助处理,所以内存容量得比常规文件系统要多4G左右。

除了在数据管理和修复上的优势,ZFS还有现成的SSD加速缓存工具,可以轻松将固态硬盘为机械硬盘,这点相当重要,毕竟几T的纯SSD环境成本实在太高了,SSD Cache的效率不算差,足够我使用了。

根据上面整理出来的需求;

内存确认需要16G及以上容量,手上有现成的8G*2,后期不够再加。

固态硬盘单块1T,重点是随机读写能力,所以选择使用IO能力更强的PCIe4.0型号。

机械硬盘没那么多讲究,手里正好一堆之前淘汰下来的小容量硬盘,正好拿来组Zpool。

4、系统备份机制

关联硬件:机械硬盘

虽然ZFS有着相当不错的IO性能和弹性管理能力,但有优点就会有缺点,除了比较吃内存以外就是ZPool损坏会导致数据全丢,所以我选择使用ZFS自带的Snapshot功能,关于快照功能的好处苹果(时光机)和NAS厂商(快照)已经科普很多年了,感兴趣可以看看之前的文章。

另外这台设备最终也会加入我现有的备份链路,组网后用RSync直接打通同步到群晖上即可,操作上没有任何难度。

用于备份的硬盘不需要多高的性能,快照生成的文件不算大,平时也是写多读少,所以找了个健康度看起来还行的旧500G硬盘单独做了个Pool用于存放快照的备份,也就是大家经常说的冷存储机制。

5、外网访问方案

关联硬件:主板、独立网卡、路由器、交换机

作为NAS老玩家,外网访问倒是简单,分为三块:

第一是远程SSH控制,组SD-WAN,部署后加入现有的Zerotier和Tailscale网络即可。

第二是程序的Web页面,用域名解析,走DNSPOD绑定IPv6协议的公网IP。

第三是远程桌面,部署向日葵,偶尔用用也不怎么占用硬件资源。

第四是网络唤醒(WOL),虽然不关机,但停电远程开机还是挺重要的。

虽然外网访问和路由器性能几乎没啥关系,但考虑到现在新主板都是2.5G网口,个人建议还在千兆拓扑的用户考虑下升级2.5G环境,现在价格都不算高,需要注意的是目前在售路由器单口/双口2.5G居多,如果需要全2.5G得搭配交换机使用。

上面提到的WOL并不是什么新技术,前几代民用主板都有板载,只不过唤醒需要在网关设备(路由器)上操作,可以考虑下华硕、领势这些手机App可以唤醒设备的路由器。

6、设备结构确认

根据上面的个人需求整理,可以得出本次装机的硬件需求:

由于后期压根不需要接显示器7*24小时开机,另外还有热拔插硬盘的需求,所以弄个类似NAS的ITX机箱合适点。

CPU需要线程多功耗低,主频够用就行,所以在线程数较多的十三代低功耗U中选择,为了压低点预算上ES版本。

主板需要多硬盘接口用于接入多块固态硬盘和机械硬盘,能接入SAS机械硬盘最好,因为便宜。

内存需要32G以上,由于高频率对编译加成不高,所以选择量大管饱的DDR4内存。

硬盘分固态硬盘和机械硬盘两种,用于编译的固态硬盘需要随机读写性能高一些,用于冷存储的机械硬盘只要没坏道就继续用,S.M.A.R.T报警再说。

电源倒是压力不大,毕竟选的是低功耗CPU也没独立显卡这种耗电大户,算上多块机械硬盘满载也就300W以内,任意型号都行。

其实写配置单并不难,大家可以参考下我这次的思路自行整理需求并与之匹配。

硬件方案选择下面分享一下我这次的具体型号选择和理由,后期CPU和拓展设备可能会按需更换升级。

1、机箱丨乔思伯N2

简介:乔思伯N2这台机箱是我下决心重新组装编译设备的最重要原因,纯白ITX的高颜值真的是宅男杀手,刚出来就冲动下单了,到现在才有空装好。

乔思伯N2背部预留了8cm挡板的PCI拓展槽,可以用于插半高显卡(刀卡)、U.2固态或者和我一样的万兆显卡,占地面积和原来的NAS差不多,适合组建核显钢炮或者NAS设备。

必须要吐槽乔思伯N2的硬盘固定方案,设计比较奇怪,没有用常见的硬盘笼,而是减震螺丝固定+橡胶带抽拉的组合,固定效果确实不错但拔插有点困难。

另外特别提醒打算入手乔思伯N2的朋友,这台机箱的硬盘转接卡需要接主板的SATA数据口,并且位置和背部出风风扇贴着,只能使用L型弯头的SATA数据线,直头线盖不上盖子,我单独后买了四根绿联弯头线才能安装回去,虽然价格不贵但是耽误事情,切记切记。

2、CPU丨Intel i5-13500T(ES)

简介:这是一款猫狗这些主流平台没有在售的CPU,需要去某鱼或者线下自己找一下,代号为Q0WK,十三代ES和十二代ES区别挺大,重点在于PCI-E插槽现在没有Bug了,也就是M-ATX和ATX主板的第二槽也能用。

Q0WK是不显版本,也就是系统抓不到CPU型号,其他与正式版几乎无异,主参数为12核+20线程,基础频率为1.6GHz(大核)/1.2GHz(小核),最大加速频率为4.6GHz(大核)/3.2GHz(小核),比上一代桌面级i5-12490F还要强。

选择这块低压U的另外原因是发热量,i5-13500T的基础热设计功耗(TDP)为35W,全核满载也就92W的功耗,任意四热管下压散热器都能压得住,这次我直接用了个更小号的性能扇,平时非满载状态也就和开个灯差不多电费。

3、主板丨铭瑄终结者B760ITX(DDR4)

简介:入手这块主板的理由挺简单,这次的需求环境对内存性能要求不高,B760主板中的ITX型号不算多,恰巧这块铭瑄B760是DDR4内存的型号,同时还板载两条满速PCIe4.0协议的M.2接口和四个SATA接口,IO方面正好适配。

铭瑄这块主板还有个比较能打动我的地方就是兼顾实用性的颜值了,三大块银色合金散热装甲覆盖着MOS和电感,马甲接触面和IC之间有额外的导热硅条辅助传热,并且位置和乔思伯N2的散热栅位置正好匹配,对只有CPU、硬盘和电源三处有主动散热的这台设备友好度较高。

对玩家比较友好的是CMOS按键外置在IO背板上,需要尝试超频这类需要恢复BIOS的操作不用拆机,直接按外置按钮就行,需要吐槽的地方是故障显示灯布局,对应CPU、内存和PCI槽的Debug灯分布在不同的角上,首次装机时习惯最小开机测试的我看得是头皮发麻。

4、内存丨台电极光DDR4内存

简介:自从主力机换成了DDR5平台,好几条DDR4内存就闲置,这次正好拿出来用,本次上的是两条台电极光,当时图个比其他家便宜,3200MHz频率放在这台设备上也比较合适。

对比其他内存,台电极光性能上没啥优势,比较强的地方在散热,合金材质马甲条和颗粒中间夹了2.4W/m.K散热系数的3M导热硅胶,比较适合这台内部结构极为紧凑的ITX主机。

5、系统硬盘丨七彩虹CN700(1T)

简介:之前淘汰下来的中端PCIe4.0固态硬盘,给编译机用正好,需要吐槽的是这款固态硬盘主控用的是联芸MAP1602但颗粒有点差,所以只有5000MB/s顺序读写这样的性能,七彩虹在存储硬件调教这块还是有很长的路要走。

虽然顺序读写是有点拉,七彩虹CN700的随机能力还是达到平均水平的,实测IOps能达到41.7万+79.2万,程序员朋友切记别买金士顿NV2这类入门级PCIe4.0型号,虽然看着是便宜一些,实际上对生产力环境来说60万IOps是门槛,省那么点钱没必要。

存储硬盘拿之前淘汰下来的一堆500G-1T机械硬盘用,坏了拉倒,正好换4T左右的SAS机械盘。

6、电源丨艾湃电竞(Apexgaming)SFX-750M

简介:同样是之前淘汰下来的电源二次利用,当时买就图个同额定便宜,i7-8700+GTX3060实测没有任何压力,毕竟是全日系电容外加80Plus金牌认证。

除了93%以上的实际转化效率,这款SFX电源还带风扇启停功能,功耗在30%以下完全不会动弹,满载转速噪音也不到35db,喜欢安静的玩家绝对舒适。

7、散热器丨乔思伯HX4170D & 霍尼韦尔PTM7950

简介:散热器手上还真没库存可用,唯一下压风扇还在i5-12490F那台设备上挂着,只能新买了个乔思伯HX4170D,虽然可能听着像水军硬吹,不过这玩意的散热能力是真不错。

9cm巴掌大小的下压散热器我还是头一次用,高度只有45.3mm,完全不会挡到内存和主板马甲,FDB高风压风扇的噪音控制也不错,最重要的是还送了暴力熊硅脂,虽然这次没用上。

考虑到这台机器开机时间会非常久,所以并没有选择HX4170D原装的暴力熊,实际上的是更持久的霍尼韦尔PTM7950相变导热片,具体实际表现看下面的压测吧。

霍尼韦尔PTM7950的导热系数为8.5W/m.K和暴力熊Aeronaut一个性能,但是理论上2-3年换一次,上机也不需要涂抹直接贴上就好,比半年一换的常规硅脂更省事一些。

8、拓展卡丨浪潮YZCA-00311-103双口万兆电口网卡

简介:虽然我自己上的是这张卡,但是不建议普通用户上,原因在于大部分系统不能免驱使用,特别是群晖这类没办法简单打补丁的封闭系统,对于新手来说不太友好。

作为目前最便宜的拆机万兆网卡之一,用肯定是能用,65块钱包邮还要啥自行车,密密麻麻的IC和散热片确实不用担心过热导致的降频问题,有动手能力的朋友真可以考虑入手。

整机性能测试趁着还没装Arch,拿Windows跑一下相关硬件测试软件,大家可以参考一下。

1、温度测试

由于这台设备需要7*24小时开机运行,所以先进行压力测试,测试结果如下图所示:

常态待机,CPU温度在38°左右,核心温度在40°以内。

烤机期间,CPU温度在43°以内,核心温度在80°左右。

从80°+的主板温度可以看出,乔思伯N2的舱内温度还是挺高的,但在乔思伯HX4170D和霍尼韦尔PTM7950的帮助下满载温度控制的还不错。

2、办公测试

由于这台编译机到时候会彻底换系统并做专属优化,就先选了学常见的Windows跑分工具测试,这块ES可以理解为性能较低+基础功耗更低+线程更多的i5-13400,价格还便宜一些。

考核CPU性能的CinebenchR23,跑分数据如下:

单核成绩为1401分

多核成绩为14012分

考核CPU性能的CPU-Z benchmark跑分测试结果:

单核成绩为593

多核成绩为6352.8

考核CPU性能的3DMark CPU Profile跑分测试结果:

最大线程分数为6716

16线程成绩为6143

8线程成绩为4660

4线程成绩为2911

2线程成绩为1546

1线程成绩为808

考核CPU+内存能力的7Zip基准测试数据如下:

CPU使用率分为1520%

CPU使用率评分为5.649GIPS

综合评分为70.458GIPS

最后是偏向综合性能的PCMark10,最终分数为4925。

后续调整目前这台机器还没重装系统,后面调整优化好再和大家分享ArchLinux环境搭建与针对性优化方案,觉得有所帮助记得关注点赞收藏三联哈。

有关程序员给自己攒了台电脑:这配置老鸟来点评下的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  3. ruby - 在 Ruby 中编写命令行实用程序 - 2

    我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

  4. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  7. ruby-on-rails - 如何在我的 Rails 应用程序 View 中打印 ruby​​ 变量的内容? - 2

    我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby​​中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R

  8. ruby - 检查是否通过 require 执行或导入了 Ruby 程序 - 2

    如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby​​文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否

  9. ruby-on-rails - 如何在 Gem 中获取 Rails 应用程序的根目录 - 2

    是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在

  10. 程序员如何提高代码能力? - 2

    前言作为一名程序员,自己的本质工作就是做程序开发,那么程序开发的时候最直接的体现就是代码,检验一个程序员技术水平的一个核心环节就是开发时候的代码能力。众所周知,程序开发的水平提升是一个循序渐进的过程,每一位程序员都是从“菜鸟”变成“大神”的,所以程序员在程序开发过程中的代码能力也是根据平时开发中的业务实践来积累和提升的。提高代码能力核心要素程序员要想提高自身代码能力,尤其是新晋程序员的代码能力有很大的提升空间的时候,需要针对性的去提高自己的代码能力。提高代码能力其实有几个比较关键的点,只要把握住这些方面,就能很好的、快速的提高自己的一部分代码能力。1、多去阅读开源项目,如有机会可以亲自参与开源

随机推荐