自己摸索出的一种解决死机的方法(本人纯小白,完全是瞎猫碰见死耗子解决这个问题),希望能给有相同情况的朋友们和官方提供一些思路,看能否彻底解决。
事情起因是开开心心组装了一台新电脑
硬件配置:
CPU:I5-13500(14核心20线程)
内存:金士顿DDR4-3200
主板:影驰B660M光影
电源:台达DPS-500AB-5 B
问题情况:安装了飞牛以后进行大文件传输后系统出现卡死(文件复制、相册备份、文件压缩等都会出现),死机以后连接显示器的情况下光标卡死,死机后连接显示器,显示器无信号。只能通过强制关机、重启解决,有时也会自己断 电重启。
查询了大量论坛和资料后依然无解。起初以为是硬件问题,在更换了其他同型号CPU和内存、主板、电源、硬盘后依然出现问题。后怀疑是bios设置问题(不得不吐槽一下影驰的bios真的难用,后在华硕主板上进行修改),在更改了大量bios设置后问题依旧,直到偶然间关闭了超线程技术后,问题解决了。但是新的问题又出现了,关闭超线程技术后的代价是CPU变成了14核心14线程,那么我剩下的6个线程哪去了?(并且没了这6个线程系统不再死机,嘎嘎流畅,怀疑是CPU问题,在PE环境下对CPU即内存进行了3个小时的稳定性测试,都不会触发死机,也就是说硬件没有问题,问题出在系统上)。少了那6个线程心里不是滋味,于是通过DeepSeek查询得出以下结论:
-
超线程资源争抢
- 物理核心的两个逻辑线程共享执行单元和缓存,高I/O负载时中断处理线程(如
ksoftirqd
)占满逻辑核心,阻塞用户进程。
-
中断风暴(IRQ Storm)
- NVMe/SATA控制器在高速传输时产生海量中断(MSI-X),默认分配可能集中到少数核心。
-
内核调度延迟
- 飞牛OS默认调度策略(如CFS)在CPU饱和时无法优先保障桌面响应。
-
文件系统或驱动瓶颈
- Btrfs/ZFS等高级文件系统在并发写入时可能加剧锁竞争(飞牛OS常用Btrfs)
实测有效解决方法:
以下步骤需要在SSH中进行
首先在Docker镜像仓库中搜索并下载安装fnossshtool

运行后在容器中打开终端

点击连接

连接自己的SSH并获取ROOT权限后进行下面操作
1. 确认CPU拓扑结构
首先需要明确你的CPU核心和线程的分布情况(物理核心与逻辑线程的对应关系):
bash
lscpu -e
示例输出(简化后,实际以你的系统为准):
text
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
0 0 0 0 0:0:0:0 是 # 物理核心0的第一个逻辑线程 (CPU0)
1 0 0 0 0:0:0:0 是 # 物理核心0的第二个逻辑线程 (CPU1, 超线程)
2 0 0 1 1:1:1:0 是 # 物理核心1的第一个逻辑线程 (CPU2)
3 0 0 1 1:1:1:0 是 # 物理核心1的第二个逻辑线程 (CPU3, 超线程)
... (以此类推,共20个逻辑线程)
- i5-13500 的实际拓扑:
- 6个性能核 (P-core):每个物理核心有2个线程(超线程),共12个逻辑CPU(通常为CPU0-11)。
- 8个能效核 (E-core):每个物理核心1个线程(无超线程),共8个逻辑CPU(通常为CPU12-19)。
- 总逻辑CPU数:20个(0-19)。
2. 设计中断分配策略
目标:
- 保留部分核心给系统/桌面响应(避免中断占用所有资源)。
- 将磁盘中断绑定到剩余核心(均衡负载)。
建议分配方案:
CPU类型 |
逻辑CPU范围 |
用途 |
保留核心 |
0-3 |
系统任务/GUI响应 |
性能核 (P-core) |
4-11 |
处理磁盘中断 (优先) |
能效核 (E-core) |
12-19 |
处理磁盘中断 (次要) |
原因:
- 性能核(P-core)更适合处理高吞吐中断。
- 保留前4个逻辑核心(物理核心0-1的超线程)确保系统响应。
3. 计算中断亲和掩码 (Affinity Mask)(不会计算掩码的将CPU型号发给DeepSeek让他计算)
需要将中断绑定到 CPU4-19(共16个逻辑CPU):
- 掩码规则:
- 每个CPU对应一个比特位(从右到左:CPU0=bit0, CPU1=bit1, ..., CPU19=bit19)。
- 允许中断的CPU:对应比特位设为
1
,否则 0
。
- 计算步骤:
- 允许的CPU范围:4-19 → 比特位4到19为
1
,其余为 0
。
- 二进制值:
00000000 00001111 11111111 11110000
(CPU0-3=0, CPU4-19=1, CPU20+=0)
- 转换为十六进制(每8位一组):
00000000
→ 00
00001111
→ 0f
11111111
→ ff
11110000
→ f0
- 完整掩码:
00000000,00000fff,ffff0000
(实际写入时可能需要简化为 00000fff,ffff0000
或 fffffffc
,见下文)
简化掩码(推荐):
对于20线程,直接使用 20位掩码(忽略更高位):
- 允许CPU4-19:
11111111 11111111 110000
(二进制,右侧补0到20位:11111111111111111100
)
- 十六进制:
0xfffffc
(24位掩码,实际写入时用 00000000,0000ffff,fffffffc
)
最终掩码值:
bash
echo "00000000,0000ffff,fffffffc" > /proc/irq/N/smp_affinity
# 或简写(系统会自动截断):
echo "fffffffc" > /proc/irq/N/smp_affinity
4. 操作步骤
(1) 区分性能核与能效核
如果希望中断优先绑定到性能核(P-core,CPU4-11):
bash
# 掩码计算:仅允许CPU4-11 (比特位4-11=1)
# 二进制: 00000000 00000000 00001111 11110000
# 十六进制: 00000000,00000ff0
echo "00000ff0" > /proc/irq/122/smp_affinity
(2) 排除能效核 (E-core)
如果确定能效核(CPU12-19)处理中断效率低,可完全禁用:
bash
# 仅允许CPU4-11
echo "00000ff0" > /proc/irq/122/smp_affinity