Panda on MarsPanda on Mars · 归一
Homelab · 硬件

给 2017 年的 X299 换上 i9-10980XE

Qun Wang · 2026 年 11 月 · 换机、测试、监控、死机、瘦身,一个星期的全过程

一句话:同一块 2017 年的主板,CPU 从 6 核换到 18 核,内存从 64G 加到 128G,多任务并行快了一大截,单个视频却没变快。换完第二天还死机了一次。这篇把整个过程按时间顺序写下来,包括踩的坑和最后的结论。

这次从查瓶颈、选型、写操作步骤,到换完以后的测试、监控和排查,我都是跟 Claude Code 一起做的。它在这台机器上直接读日志、跑测试、改脚本,需要 root 权限的命令由我自己在终端里敲。

01为什么要换

这台机器是一台 24 小时开着的家用服务器:上面同时挂着几十个 AI 编程会话,还有一条视频处理流水线在跑,要转码、逐帧比对画面、做语音转写。原来的 CPU 是 i7-7800X,6 核 12 线程。

11 月 2 日晚上我觉得机器明显变慢了,让 Claude 量了一下。结果很直接:

吃 CPU 的大头是视频批处理。几十个 AI 会话加起来还不到一个核,它们主要在等网络回话,不怎么算东西。

02两条路:同平台升级,还是换新平台

主板是 ROG Rampage VI Extreme(LGA2066,X299)。这块板子能上的最强 CPU 是 i9-10980XE。另一条路是直接换新平台。下面的跑分取自 cpubenchmark.net(2026 年 11 月 3 日的对比页):

方案核心多线程跑分单线程跑分还要买什么
现在:i7-7800X6 核 12 线程12,9952,378—
i9-10980XE(同一块主板)18 核 36 线程31,8782,656只买 CPU,主板和内存接着用
Core Ultra 9 285K24 核 24 线程67,235约 2 倍新主板、DDR5 内存
Ryzen 9 9950X16 核 32 线程65,705约 2 倍新主板、DDR5 内存

10980XE 多线程是原来的 2.5 倍,单线程只快 12%。新平台多线程约 5 倍、单线程约 2 倍,但主板和内存全要换。我的瓶颈是很多任务一起跑,多线程最要紧,所以选了 10980XE:只花一颗二手 CPU 的钱,其他全部留用。

单线程只快 12% 这一条,我当时没太在意。后面第 06 节会看到,它决定了单个视频为什么没变快。

03先过 BIOS 这一关

原来的 BIOS 还是 1004 版(2017 年 12 月),认不了 10980XE。ASUS 从 2002 版起才支持这一代 CPU。如果不先刷 BIOS,新 CPU 装上去根本点不亮。

麻烦的是我这台机器只有 Ubuntu,没有 Windows,而 ASUS 的很多工具只有 Windows 版。好在这块板子有 USB BIOS Flashback:主板通着电、不开机,甚至不装 CPU,插上 U 盘按一个键就能刷。具体做法:

  1. 从 ASUS 官网下最新的 BIOS(当时是 4401,2026 年 9 月发布),核对官网公布的 SHA-256。
  2. 按说明书把文件改名成 R6E.CAP,放在 FAT32 格式 U 盘的根目录。ASUS 提供的改名工具 BIOSRenamer 是 Windows 程序,手动改名效果一样。
  3. 正常关机,电源线别拔,U 盘插到后面板标着 BIOS 的那个 USB 口,按住 Flashback 键 3 秒,灯开始闪就松手,等灯灭。

我特意先用旧 CPU 开机进一次 BIOS,确认版本已经是 4401,再关机换硬件。这样万一后面点不亮,能分清是 BIOS 的问题还是硬件的问题。

还有一个 Intel ME 固件的问题。ASUS 建议新版 BIOS 配新版 ME 固件,可是 ME 的升级工具也只有 Windows 版。我决定不升,结果直接用新 BIOS 也完全正常。

04内存加到 128G,以及那一滴水

换 CPU 之前,Claude 算了一笔账:18 核以后,我准备让批处理用 30 个线程。按我们最近 300 多个批处理任务的实际用量,平均每个线程要 1.6G 内存,30 个线程就要约 47G;再加上常驻的会话和服务,原来的 64G 会先到顶。所以我又买了两套 2×16G,凑成 8 根 128G。

代价是:每个内存通道插两根,频率跑不到官方的 2933。这 8 根还来自三套不同批次的条子,混插本来就不保证稳。最后在 BIOS 里开 XMP,频率手动设在 2666。

第一次开机只认出了 93G。查下来是 C 通道的两根没认上。我想起装机时往那附近滴过一滴水,于是拔下来吹干、用酒精擦了金手指、重新插紧。第二次开机,8 根全认上了,系统里显示 125G 可用,剩下那点是系统和显卡预留的。

05开机后的设置和满载测试

BIOS 里我做了这几件事:

回到 Ubuntu 后,我们核对了一遍:36 个线程都在;两张 1080 Ti 都跑在 x16。原来 7800X 的 PCIe 通道不够,第一张卡只能跑 x8,这次也顺带解决了。

然后做满载测试:同时开 4 路 x264 编码,把平均负载压到 22 左右,每秒记一次温度。结果 CPU 封装最高 72°C,平均 68.8°C,降频 0 次。功耗更高的 18 核,反而比原来的 6 核满载时凉快 15 度。原因是功耗墙按原厂设置,没让主板自作主张地超频。

两个小坑

06换完到底快了多少

这是我最关心的,也是最出乎意料的一部分。

多任务并行:快了一大截

换完第二天半夜,一个会话一次交了 22 个任务,让机器把一门课 22 讲的视频各从头读一遍,找出每次翻幻灯片的时刻。这批活从 0:14 跑到 0:37,CPU 一共干了大约 11 个小时的单核活,只用了 23 分钟,最忙的十分钟 CPU 占到 87%。换机前批处理最多只能用 10 个核,同样的活要一个多小时。

平均下来,换机前一天,12 个线程平均有 8.8 个在忙,负载 16.8,确实不够用。换机后,36 个线程平均 9.9 个在忙,平时绰绰有余,只有这种整批并行的活才会冲上去。

单个视频:几乎没变快

可是换完那天做的一讲视频,耗时跟以前差不多。我当时的第一反应是「新 CPU 完全没用上」。Claude 把那一讲的每一步拆开量了一遍:

另外还查出一个跟硬件无关的问题:有几讲的配置文件里漏写了「用显卡编码、解码」这两行,视频编解码一直在用 CPU 做。配置文件是照着模板抄的,抄漏了。补回去以后,这几步改由显卡来做。

结论:多核只对「很多任务一起跑」有用。单个任务要变快,得先找到它最慢的那几步,再看能不能拆成多段并行、能不能交给显卡、或者没变的输入直接用上次的结果。这几处后来都改了。

那用显卡读视频是不是更好?

我也问过:翻页检测那批活,能不能交给显卡做?我们拿一讲视频的前 5 分钟实测了一下:

实际耗时占用 CPU 的时间出来的画面
CPU 解码9.4 秒78.6 秒逐像素完全一致
显卡解码(1080 Ti)18.1 秒15.8 秒

显卡解码只占用五分之一的 CPU,但单路慢一倍;两张卡一起跑,一秒最多也就 1000 帧左右。整批 22 讲算下来,CPU 要 23 分钟,显卡要 70 分钟左右。所以 CPU 有空时用 CPU,CPU 被别的活占着时才换显卡。小插曲:Homebrew 装的 ffmpeg 不带 CUDA 支持,要用系统自带的那个才能调显卡。

07给机器装上监控,每天一份硬件日报

换完以后,我让 Claude 给机器装了监控,每天早上 7:30 往我的 Telegram 发一份硬件日报。做法很简单,全部不需要 root 权限:

顺便给三块硬盘做了一次体检。系统盘是一块 960 EVO 500G,用了 4% 的寿命,累计写入 31.2TB,没有错误;另外两块 SATA 盘也都健康。

08换完第二天,死机了一次

11 月 8 日早上,所有会话突然都断了。我走到机器前,屏幕停在命令行,上面有几行 Memory cgroup out of memory: Killed process。我的第一反应是内存满了、把整台机器拖死了。

Claude 查完以后告诉我,不是这样:

所以这是一次「什么痕迹都没留下」的整机卡死。这种情况多半是硬件不稳,嫌疑在刚换的 CPU 和那 8 根混插的内存上。旧 CPU 上一次这样死机,已经是两个月以前的事。

按说应该跑一遍内存检测(memtest86+),但 128G 跑一遍要好几个小时,机器这段时间什么都干不了。我决定先不跑:再死机就先把内存从 2666 降到 2400;降完还死,再仔细查。降一档内存频率,最高读写速度少约 10%,平时干活基本感觉不到。

让它卡死了也能自己爬起来:看门狗

那次死机,机器从 6:50 一直卡到我 10:28 发现。为什么不会自动重启?因为没开看门狗。

看门狗是主板芯片组里的一个独立倒计时器,有自己的时钟,不靠 CPU。系统正常时每半分钟去把它拨回 60 秒;整机卡死了没人去拨,它数到零就直接通过硬件重启机器,跟按机箱上的重启键走的是同一根线。Intel 芯片组都带这个功能(iTCO_wdt),只是 Ubuntu 默认把它的驱动禁用了。打开只要三步:

# 1. 开机自动加载驱动
echo iTCO_wdt | sudo tee /etc/modules-load.d/itco-watchdog.conf
# 2. 让 systemd 喂狗:卡住 60 秒自动重启,关机卡住 10 分钟强制重启
sudo mkdir -p /etc/systemd/system.conf.d
printf '[Manager]\nRuntimeWatchdogSec=60s\nRebootWatchdogSec=10min\n' | sudo tee /etc/systemd/system.conf.d/watchdog.conf
# 3. 内核崩溃 10 秒后重启,不要停在崩溃画面上
echo 'kernel.panic = 10' | sudo tee /etc/sysctl.d/60-panic-reboot.conf
sudo sysctl -p /etc/sysctl.d/60-panic-reboot.conf && sudo systemctl daemon-reexec

有的主板会在 BIOS 里把看门狗锁住,所以先 sudo modprobe iTCO_wdt 看驱动能不能正常加载。我这块能。看门狗不治病,只是让机器尽快恢复干活。为了不让死机悄悄过去,日报也加了一项:发现上一次开机没有正常关机,就单独报出来。

那天还有一个小插曲:重新开机后,每周的显卡驱动升级任务补跑了,升级完要重启,偏偏又赶上每天的备份任务也在补跑,重启硬是等了 30 分钟才强制完成。现在有了「重启卡住 10 分钟就强制重启」这一条,以后最多等 10 分钟。

09系统盘快满了

又过了一天,日报提醒系统盘用了 87%:一共 213G,只剩 27G,而且两天涨了 20G。查下来,最大的一块是 AI 会话派出去的子任务留下的完整对话记录,一共 36.5G,看图多的活每个都很大,这几天每天新增约 4G。

处理分三步:

  1. 删已经备份过的旧记录。这些记录每晚已经压缩存到数据盘,再传到云上。我们逐个核对备份账本:文件编号对得上、一个字节不差地存进去了、数据盘上确实有那一份,三条全满足才删。这次删掉 17.2G。
  2. 以后每晚自动清。超过 31 天、已经完整备份的记录,每晚自动删。保留 31 天而不是 7 天,是因为有两个用量统计要往回看 30 天。
  3. 把会话记录搬到同一块盘的另一个分区。这块 500G 的固态盘早年分成了两个分区,另一个 249G 的分区几乎空着。我们把整个会话记录目录拷过去,再用 bind mount 挂回原来的路径。对所有程序来说路径没变,Git 也照常工作。

第 3 步要先把所有会话停下来,不然正在写的记录会出错。为此 Claude 写了一个脚本:先给 41 个在跑的会话拍一张清单,停掉会话管理器,等所有进程退出、确认没人在写;最后补拷一次,逐字节比对;把原目录改名留底,挂上新位置,写进 fstab;再把会话管理器起来,逐个对照清单,确认每个会话都接回来了,账号、网页连接、名字都没变。中间任何一步出错就自动退回原样。实际跑下来,从停到 41 个会话全部接回,一共 56 秒。

有一个坑差点踩上:备份脚本是按文件的 inode 编号记账的。搬了家,编号全变了,如果不改账本,当晚的备份会把 26G 当成新文件整份重存一遍。所以脚本在搬家时顺手把账本里 3368 个文件的编号改成了新位置的。

10回头看

现在这台机器还在观察期。如果再死机,我会按上面说的先降内存频率,到时候再来补一篇。