收起左侧

死机的一种解决办法

3
回复
118
查看
[ 复制链接 ]

1

主题

1

回帖

0

牛值

江湖小虾

自己摸索出的一种解决死机的方法(本人纯小白,完全是瞎猫碰见死耗子解决这个问题),希望能给有相同情况的朋友们和官方提供一些思路,看能否彻底解决。

事情起因是开开心心组装了一台新电脑

硬件配置:

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查询得出以下结论:

  1. 超线程资源争抢

    • 物理核心的两个逻辑线程共享执行单元和缓存,高I/O负载时中断处理线程(如 ksoftirqd)占满逻辑核心,阻塞用户进程。
  2. 中断风暴(IRQ Storm)

    • NVMe/SATA控制器在高速传输时产生海量中断(MSI-X),默认分配可能集中到少数核心。
  3. 内核调度延迟

    • 飞牛OS默认调度策略(如CFS)在CPU饱和时无法优先保障桌面响应。
  4. 文件系统或驱动瓶颈

    • Btrfs/ZFS等高级文件系统在并发写入时可能加剧锁竞争(飞牛OS常用Btrfs)

实测有效解决方法:

以下步骤需要在SSH中进行

首先在Docker镜像仓库中搜索并下载安装fnossshtool

image.png

运行后在容器中打开终端

image.png

点击连接

image.png

连接自己的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
  • 计算步骤
    1. 允许的CPU范围:4-19 → 比特位4到19为 1,其余为 0
    2. 二进制值:
      00000000 00001111 11111111 11110000
      (CPU0-3=0, CPU4-19=1, CPU20+=0)
    3. 转换为十六进制(每8位一组):
      • 0000000000
      • 000011110f
      • 11111111ff
      • 11110000f0
      • 完整掩码00000000,00000fff,ffff0000
        (实际写入时可能需要简化为 00000fff,ffff0000fffffffc,见下文)

简化掩码(推荐)

对于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
收藏
送赞
分享

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

2

主题

193

回帖

0

牛值

初出茅庐

回去试试

希望对你有用  详情 回复
昨天 16:12
苟利国家生死以,岂因祸福避趋之

1

主题

1

回帖

0

牛值

江湖小虾

昨天 16:12 楼主 显示全部楼层

希望对你有用

5

主题

16

回帖

0

牛值

江湖小虾

现在纯小白的门槛太高了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则