[BUG] 4.29.4 桌面端在无 AVX2 的 CPU 上启动即 SIGILL(4.29.3 正常)

Đang mở
#192 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
53/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
linux, rust, tauri
Lĩnh vực
build-system, desktop

Hướng nghiên cứu

Start by comparing the 4.29.3 and 4.29.4 desktop build configuration and release workflow for the amd64 target, including any Rust target CPU flags or bundled runtime variants. Reproduce on a CPU without AVX2 or BMI2 and identify the build setting that introduces unsupported instructions. Done means the released amd64 desktop binary starts on that CPU, or release notes clearly state the minimum CPU requirement and provide a compatible build.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

bug
What happened? / 实际发生了什么?

从 4.29.3 升级到 4.29.4(AstrBot_4.29.4_linux_amd64.deb)后,桌面窗口一闪就消失,进程被 SIGILL 终止,一分钟能崩好几次,重启、重装都没用。

崩溃的只是桌面外壳 astrbot-desktop-tauri。后端和 WebUI 都是正常的:http://127.0.0.1:6185 依然能打开、能操作,功能没问题。

同一台机器换回 4.29.3,一切正常。

环境

  • 系统:Linux Mint 22.3 x86_64(基于 Ubuntu 24.04),内核 7.0.0-42-generic,桌面 Xfce 4.18
  • CPU:Intel Core i7-3610QM(4 核 8 线程,Ivy Bridge,2012)
  • 支持的指令集:AVX / SSE4.2;没有 AVX2、BMI1、BMI2、FMA
  • grep -c avx2 /proc/cpuinfo 返回 0

结论

对 astrbot-desktop-tauri 反汇编后,能看到大量 Haswell 之后才有的指令:

指令 条数 引入该指令的微架构
vpaddd 745 AVX2 - Haswell (2013)
mulx 354 BMI2 - Haswell (2013)
vpcmpeqb 117 AVX2
vpbroadcastb/q/w 53 AVX2
vpaddb 18 AVX2
andn 4 BMI1 - Haswell
vpermd 2 AVX2

mulx(BMI2)、andn(BMI1)、vpermd(AVX2)是 Ivy Bridge 完全不支持的指令,进程执行到就会触发 SIGILL。

所以 4.29.4 的 amd64 二进制按 x86-64-v3(AVX2 + BMI2) 编译,不是 Rust 默认的 SSE2 基线。4.29.3 在同机正常,说明这是一次构建基线变更带来的回归。

可能来源:CI 里带了 RUSTFLAGS=-C target-cpu=native 或 -C target-cpu=x86-64-v3(Actions 的 runner 是较新的 CPU,编出来在 CI 里跑得通,到老机器上就炸),或者打包的运行时是 v3 变体。

Expected behavior / 预期行为
  1. 把 amd64 的构建基线固定回 ‘x86-64’(或 ‘x86-64-v2’,覆盖 2009 年之后的绝大多数机器);
  2. 若 v3 构建是有意为之,额外提供一份兼容构建,或至少在 README / Release 里标注最低 CPU 要求;
  3. 至少启动时检测一次,缺指令集就给提示 —— 现在完全没有任何错误对话框,只能靠 dmesg 才看得出是 SIGILL。
Steps to reproduce / 复现步骤
  1. 在一台不支持 AVX2/BMI2 的 x86-64 机器上安装 AstrBot_4.29.4_linux_amd64.deb
  2. 启动 astrbot-desktop
  3. 窗口出现后立即退出,dmesg 里是 traps: astrbot-desktop-tauri ... SIGILL
  4. 对照组:卸载后装 AstrBot_4.29.3_linux_amd64.deb,同样步骤,正常
Desktop version / 桌面端版本

v4.29.4

Installation channel / 安装来源

GitHub Release installer

OS / 操作系统

Linux

Architecture / 架构

amd64

Upstream AstrBot ref used by desktop build (optional) / 桌面构建使用的上游 AstrBot Ref(可选)

No response

Logs, screenshots, and additional context / 日志、截图与补充信息

$ grep -c avx2 /proc/cpuinfo
0

$ coredumpctl list | grep -i astrbot | tail -4
Thu 2026-11-05 22:32:00 CST 4147 1000 1000 SIGILL present /usr/bin/astrbot-desktop-tauri 5.3M
Thu 2026-11-05 22:39:22 CST 4272 1000 1000 SIGILL present /usr/bin/astrbot-desktop-tauri 5.3M
Thu 2026-11-05 23:32:19 CST 4539 1000 1000 SIGILL present /usr/bin/astrbot-desktop-tauri 5.3M
Fri 2026-11-06 01:05:33 CST 2066 1000 1000 SIGILL present /usr/bin/astrbot-desktop-tauri 5.3M

$ readelf -n /usr/bin/astrbot-desktop-tauri | grep -i -A2 ISA
(无输出;Rust 默认不写 ISA note,所以这条既不能证明也不能否证,如实记录)

$ objdump -d /usr/bin/astrbot-desktop-tauri | grep -cE '\bv[a-z0-9]+[[:space:]].*%ymm'
4996

$ objdump -d /usr/bin/astrbot-desktop-tauri | grep -oE '\b(vfmadd[0-9][a-z]|vpermps|vpermd|vpermq|vpaddb|vpaddw|vpaddd|vpsubb|vpsubd|vpbroadcast[a-z]|vpblendd|vpcmpeqb|vpgatherdd|andn|bzhi|mulx|rorx|pdep|pext)\b' | sort | uniq -c | sort -rn
745 vpaddd
354 mulx
117 vpcmpeqb
42 vpbroadcastb
18 vpaddb
9 vpbroadcastq
4 andn
2 vpermd
2 vpbroadcastw
注:上面的统计没有按 %ymm 过滤,vpaddd / vpcmpeqb 里可能混有 128 位形式;
但 mulx、andn、vpermd、vpbroadcast
是 Haswell 之后才引入的指令,
Ivy Bridge 一条都不支持,结论不受此影响。

Willing to submit a PR? / 是否愿意提交 PR?
  • I am willing to submit a PR to fix this issue. / 我愿意提交 PR 修复此问题。
Code of Conduct
  • I agree to follow the project's Code of Conduct. / 我同意遵守项目行为准则。
Ngôn ngữ chính
Rust
Star
1k
Fork
48
Merge trung bình
1 ngày 9 giờ
Pull request đã merge (30 ngày)
2

Chuẩn bị môi trường

  • Không có Dockerfile hay tệp Docker Compose
  • Có mẫu pull request
  • Không có hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của AstrBotDevs/AstrBot-desktop

Tất cả issue của AstrBotDevs/AstrBot-desktop

Issue tương tự

Thêm issue về Rust

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.