
1. 为什么我偏要在 Ubuntu 22.04 上折腾 Arc A770先说结论Intel Arc A770 在 Ubuntu 22.04 上跑起来比大多数人想象的要顺但前提是你得把两件事做对——内核版本要够新RBARResizable BAR要开。这两件事任何一件没搞定你要么进不了桌面要么性能直接砍半要么clinfo里根本看不到显卡。我手上这张是 A770 16GB 公版插在一台 B660 i5-12400 的机器上系统是 Ubuntu 22.04.4 LTS。之所以选 22.04 而不是更新的 24.04是因为我日常跑的一些推理框架和容器镜像在 22.04 上验证得最充分不想为了显卡把整个环境迁走。但 22.04 原生的 5.15 内核对于 Arc 来说太老了i915驱动虽然能认卡但频率管理、电源状态、部分编解码能力都不完整所以升级内核是绕不开的第一步。这篇文章适合三类人一是刚拿到 Arc 显卡想在 Linux 下做深度学习推理或者视频转码的二是装了驱动但发现xpu-smi报错、clinfo看不到设备的三是机器点不亮或者进系统后频繁花屏、掉驱动的。我会把 RBAR 的开启、内核升级、驱动栈安装、验证、以及我自己踩过的几个坑完整讲一遍尽量让你少走弯路。需要提前说明的是Arc 在 Linux 下的软件栈和 NVIDIA 完全不是一回事。NVIDIA 是装一个闭源驱动包就完事Arc 走的是开源内核驱动i915 用户态计算栈intel-compute-runtime 媒体栈intel-media-driver的组合。理解这个分层后面排查问题会清晰很多。2. 装系统之前必须先确认的 RBAR 状态2.1 RBAR 到底是什么为什么 Arc 离了它不行RBAR 全称 Resizable BAR中文一般叫可变基址寄存器。传统上 CPU 访问显卡显存一次只能映射 256MB 的窗口显卡要把数据搬来搬去。RBAR 允许系统把整个显存一次性映射给 CPU 访问省掉了反复搬运的开销。对 Arc 来说这不是锦上添花而是刚需。Intel 官方明确说过Arc 系列在未开启 RBAR 的平台上性能会有明显损失部分游戏和负载下差距能到两位数百分比。更麻烦的是在 Linux 下如果 RBAR 没开i915驱动加载时可能直接报错或者设备初始化不完整表现就是lspci能看到卡但/dev/dri下没有对应的 render 节点。所以我的建议是在装系统之前先进 BIOS 把 RBAR 打开。这样能省掉后面一大堆驱动装了但用不了的排查时间。2.2 进 BIOS 开 RBAR 的具体路径不同主板叫法不一样我列几个常见的主板品牌BIOS 里的位置备注华硕 ASUSAdvanced → PCI Subsystem Settings → Re-Size BAR Support需同时开启 Above 4G Decoding微星 MSISettings → Advanced → PCI Subsystem Settings → Re-Size BAR部分老 BIOS 叫 Resizable BAR技嘉 GIGABYTESettings → IO Ports → Above 4G Decoding 和 Re-Size BAR Support两个都要开华擎 ASRockAdvanced → PCI Configuration → Re-Size BAR Support需先开 Above 4G Decoding有两个关键点容易被忽略第一Above 4G Decoding 必须先开。RBAR 依赖 64 位地址空间如果 Above 4G Decoding 是关闭的RBAR 选项要么是灰的要么开了也不生效。第二CSMCompatibility Support Module必须关闭。CSM 是给老系统用的兼容模式它会把系统限制在传统 BIOS 引导方式RBAR 在这种模式下无法正常工作。如果你装的是 UEFI 引导的 UbuntuCSM 本来就该关。改完之后保存重启进系统用这条命令验证sudo lspci -vv -s $(lspci | grep -i VGA.*Intel | cut -d -f1) | grep -i BAR如果看到类似Region 2: Memory at ... (64-bit, prefetchable) [size16G]这样的大尺寸 BAR说明 RBAR 生效了。如果还是 256M那就是没开成功回 BIOS 再检查。2.3 一个反直觉的坑开了 RBAR 反而进不去系统我自己遇到过一次开了 RBAR 之后Ubuntu 安装 U 盘引导到一半黑屏。当时以为是显卡坏了后来发现是安装镜像里的老内核5.15配合 RBAR 有兼容问题。解决办法有两个一是临时在 BIOS 里把 RBAR 关掉装完系统升级内核后再打开二是直接用 22.04.4 及以后的镜像它的 HWE 内核版本更高兼容性更好。我推荐第二个省得来回折腾。提示如果你用的是 22.04.0 或 22.04.1 的原始镜像建议直接去官网下 22.04.4 或更新的 point release内核版本会新不少。3. 内核版本Arc 驱动能不能跑起来的命门3.1 为什么 5.15 内核不够用Ubuntu 22.04 原生带的是 5.15 内核。这个版本里i915对 Arc 的支持处于能认卡但功能不全的状态。具体表现包括显卡频率被锁在低频性能上不去电源管理不工作待机功耗偏高AV1 编解码支持不完整部分情况下xe相关的新特性完全缺失Arc 的完整支持大概是从 6.2 内核开始逐步完善的6.5 之后比较稳定。所以我的做法是直接上 6.5 或更高的 HWE 内核。3.2 升级内核的两种方式方式一用 Ubuntu 官方 HWE 内核推荐给求稳的人sudo apt update sudo apt install --install-recommends linux-generic-hwe-22.04 sudo reboot重启后uname -r看一下应该是 6.5 或 6.8 系列。这种方式的好处是内核由 Ubuntu 官方维护安全更新跟着走不用担心自己编译出问题。方式二用主线内核适合需要更新版本的人如果 HWE 内核还是不够新可以去 kernel.ubuntu.com 下载主线内核的 deb 包手动安装。但我要提醒一句主线内核没有 Ubuntu 的签名和模块适配某些第三方驱动比如 VirtualBox、部分网卡驱动可能会编译失败。除非你有明确需求否则优先用 HWE。3.3 升级内核后必须做的清理升级完内核旧的 5.15 内核还在。如果你确认新内核稳定可以清掉旧的省空间sudo apt autoremove --purge但别急着删。我建议至少保留一个旧内核作为 fallback万一新内核出问题还能在 GRUB 里选回去。等新内核跑了一两周没问题再清理。另外升级内核后第一次启动可能会比较慢因为要重建 initramfs 和模块依赖。耐心等别以为卡死了就强制关机。4. 驱动栈的三层结构i915、compute-runtime、media-driver4.1 内核态i915 驱动i915是 Intel 显卡的内核态驱动已经包含在 Linux 内核里不需要额外安装。升级内核本质上就是在升级它。验证它有没有正确加载sudo dmesg | grep -i i915正常的话能看到一堆初始化日志包括显卡型号、显存大小、固件加载情况。如果看到GuC firmware或HuC firmware加载失败的报错说明固件缺失需要装linux-firmwaresudo apt install linux-firmwareGuC 和 HuC 是显卡上的微控制器固件负责调度和编解码加速。Arc 对这两个固件依赖比较重缺了会导致性能异常或者编解码不可用。4.2 用户态计算栈intel-compute-runtime这层是给 OpenCL 和 Level Zero 用的跑深度学习推理、科学计算都靠它。安装sudo apt update sudo apt install intel-opencl-icd intel-level-zero-gpu level-zero装完之后用clinfo验证sudo apt install clinfo clinfo | grep -i Device Name应该能看到Intel(R) Arc(TM) A770 Graphics。如果只看到 CPU 的 OpenCL 设备说明 compute-runtime 没认到显卡回去检查内核版本和 RBAR。4.3 媒体栈intel-media-driver这层负责硬件编解码做视频转码、ffmpeg 加速必须装sudo apt install intel-media-va-driver-non-free vainfo注意包名里的non-free因为部分编解码器有专利限制Ubuntu 把它放在 non-free 仓库。装完验证vainfo输出里应该能看到VAProfileAV1Profile0、VAProfileHEVCMain之类的条目说明 AV1 和 HEVC 硬解可用。4.4 三层之间的关系我用一个类比帮你理解i915是发动机compute-runtime是变速箱负责把算力输出给计算任务media-driver是另一套传动负责把算力输出给视频编解码。三者独立安装但都依赖内核态驱动正常工作。所以排查问题时永远从dmesg | grep i915开始内核态不对上面两层怎么装都没用。5. 完整安装流程与验证清单5.1 从零开始的步骤假设你已经装好 Ubuntu 22.04.4RBAR 已开下面是完整流程# 1. 更新系统 sudo apt update sudo apt upgrade -y # 2. 安装 HWE 内核 sudo apt install --install-recommends linux-generic-hwe-22.04 -y # 3. 安装固件 sudo apt install linux-firmware -y # 4. 重启进入新内核 sudo reboot重启后确认内核uname -r然后装用户态栈# 5. 计算栈 sudo apt install intel-opencl-icd intel-level-zero-gpu level-zero -y # 6. 媒体栈 sudo apt install intel-media-va-driver-non-free vainfo clinfo -y # 7. 把当前用户加入 render 和 video 组 sudo usermod -aG render,video $USER第 7 步很多人会漏。不加组的话普通用户访问/dev/dri/renderD128会权限不足表现为clinfo用 sudo 能跑、不用 sudo 就报错。加完组要重新登录才生效。5.2 验证清单按顺序跑这几条全过就说明环境没问题# 内核态 sudo dmesg | grep -i i915 | grep -i error # 设备节点 ls -l /dev/dri/ # OpenCL clinfo | grep -i Arc # Level Zero sycl-ls # 媒体能力 vainfo | grep -i AV1/dev/dri/下应该有card0、card1、renderD128之类的节点。renderD128是计算用的card0是显示用的。如果只有card0没有renderD128说明计算侧没起来。5.3 一个实测的性能参考装好之后我跑了个简单的 ffmpeg AV1 转码测试1080p 视频用av1_qsv编码器ffmpeg -hwaccel qsv -i input.mp4 -c:v av1_qsv -preset medium output.mp4对比纯 CPU 软编速度大概快了 8 到 10 倍。这个提升主要来自媒体栈跟计算栈无关。如果你主要做视频处理媒体栈的验证比计算栈更重要。6. 我踩过的四个坑和排查过程6.1 坑一clinfo 只显示 CPU不显示 Arc现象装完 compute-runtimeclinfo里只有 CPU 的 OpenCL 设备。排查链路先看dmesg | grep i915发现有GuC firmware load failed。顺着查发现linux-firmware版本太老里面没有 Arc 需要的dg2_guc_*.bin。升级linux-firmware到最新版后重启问题解决。经验Arc 是较新的硬件固件更新频繁。装完系统第一件事就是把linux-firmware升到最新别用镜像里自带的。6.2 坑二权限问题导致非 root 用户用不了现象sudo clinfo正常普通用户clinfo报clGetPlatformIDs failed。原因当前用户不在render组里没有/dev/dri/renderD128的读写权限。解决sudo usermod -aG render,video $USER然后完全注销重新登录。注意是注销不是开个新终端因为组权限在登录时确定。6.3 坑三RBAR 开了但系统不稳定现象开 RBAR 后系统偶发花屏重负载下掉驱动。排查查dmesg发现i915报 GPU hang。这种情况通常是 RBAR 和某些 BIOS 版本的兼容问题。我的处理是先把 BIOS 刷到最新版问题缓解了大半。如果还不行可以在内核参数里加i915.enable_guc2强制启用 GuC 调度稳定性会好一些。修改内核参数的方法sudo nano /etc/default/grub # 在 GRUB_CMDLINE_LINUX_DEFAULT 里加上 i915.enable_guc2 sudo update-grub sudo reboot6.4 坑四升级内核后 NVIDIA 驱动挂了双卡机器现象机器上同时有 Arc 和一张 NVIDIA 卡升级内核后 NVIDIA 驱动模块编译失败。原因NVIDIA 闭源驱动是 DKMS 编译的新内核的头文件还没装。解决sudo apt install linux-headers-$(uname -r) sudo dpkg-reconfigure nvidia-dkms-*装完头文件重新编译 DKMS 模块即可。这也是我建议保留旧内核的原因之一——万一新内核下某个 DKMS 模块编不过还能回退。7. 日常维护和几个实用技巧7.1 怎么查看显卡实时状态Intel 有个intel-gpu-tools包里面的intel_gpu_top能看 GPU 利用率和频率sudo apt install intel-gpu-tools sudo intel_gpu_top输出里重点看Render/3D和Video两列的占用率。如果跑推理时Render/3D一直是 0说明计算任务没走 GPU回去查 compute-runtime。7.2 内核升级后驱动消失了怎么办这是最常见的问题。Ubuntu 自动升级内核后如果你装的是 DKMS 类的驱动需要重新编译。Arc 的驱动栈大部分是内核自带的不受影响但如果你还装了其他 DKMS 模块升级后跑一遍sudo dkms autoinstall7.3 卸载重装的正确姿势如果驱动装乱了想重来别用网上那些apt purge一通乱删的脚本。Arc 的驱动栈分层清晰按层卸载即可sudo apt purge intel-opencl-icd intel-level-zero-gpu level-zero sudo apt purge intel-media-va-driver-non-free内核态的i915不用卸它是内核的一部分卸载不了也不该卸。卸完重启再按第 5 节的流程重装。7.4 关于稳定性的一点个人体会Arc 在 Linux 下的成熟度这两年提升很快但相比 NVIDIA 还是有一些边角问题。我的经验是内核版本尽量新固件尽量新BIOS 尽量新。这三样保持更新能规避掉九成以上的玄学问题。另外如果你做的是生产环境建议在正式部署前用目标负载压测至少 24 小时观察dmesg里有没有 GPU hang 或者 reset 记录早发现早处理。最后分享一个小技巧把dmesg | grep -i i915的输出重定向到文件每次系统更新后对比一下能快速发现驱动行为的变化。这个习惯帮我提前发现过两次固件兼容问题比出事了再排查省心得多。