AArch64 桌面实验的终结
The end of my AArch64 desktop experiment

原始链接: https://marcin.juszkiewicz.com.pl/2026/06/26/the-end-of-the-aarch64-desktop-experiment/

经过十一个月,作者结束了将 Ampere Altra(80 核 AArch64)服务器作为日常桌面电脑使用的实验。 该项目从一开始就面临巨大障碍。由于 Altra 的 PCIe 控制器存在已知的硬件缺陷,作者被迫每周手动修补并重新编译 Linux 内核,以维持显卡的兼容性。虽然该系统提供了巨大的多核潜力,但在实际桌面性能和兼容性方面却表现挣扎。 当 AMD 显卡在较新的内核下开始出现故障时,稳定性问题进一步恶化。更换为 Nvidia 显卡解决了一些视频加速问题,但也引入了新的阻碍,例如在 AArch64 Flatpak 生态系统中,FreeCAD 和 OrcaSlicer 等关键桌面工具缺乏软件支持。 最终,作者回归了一台配置适中的 x86-64 系统,并指出其卓越的软件兼容性和单核性能,比 80 核服务器提供了更可靠的桌面体验。Ampere Altra 目前仍作为专门的多核任务构建机器使用,但作者总结认为,在没有专门的消费级平台的情况下,AArch64 桌面实验并不可行。

一位红帽公司的开发者近期记录了他们尝试将基于 Ampere Altra 的工作站作为日常 Linux 桌面系统使用的结果。这次实验凸显了服务器级硬件与消费级桌面需求之间存在根本性的脱节。 评论者指出,尽管 AArch64 指令集是标准化的,但处理器的设计目的却大相径庭。Ampere 芯片优先考虑数据中心所需的高核心数和吞吐量,缺乏流畅桌面体验所必须的高单线程性能。相比之下,苹果的 M 系列芯片在消费级任务上表现优异,因为它们是专为低功耗和高性能用户交互而设计的。 讨论还涉及了 Linux 在 ARM 平台上运行的阻碍。参与者指出,与标准化的 x86 生态系统不同,许多 ARM 设备依赖“设备树(Device Tree)”配置而非即插即用的枚举,这往往迫使用户维护自定义内核,并应对硬件特定的驱动缺失问题(如 GPU 加速和 Flatpak 支持)。 归根结底,虽然一些用户在使用 ARM 硬件时取得了一定成功,但这次实验提醒我们,非苹果 ARM 平台上的桌面 Linux 仍然是一项充满挑战的“修剪牦牛毛”(指琐碎且耗时的麻烦工作)式工程,需要大量的技术投入,而非传统 x86 桌面系统的即插即用替代品。
相关文章

原文

This post is part 7 of the "Let me try to use an AArch64 system as a desktop" series:

  1. AArch64 desktop: day one
  2. AArch64 desktop: day two
  3. AArch64 desktop: last day
  4. Arm desktop: 2025 attempt, part one
  5. Arm desktop: emulation
  6. Arm desktop: so many cores, not enough speed
  7. The end of the AArch64 desktop experiment

After about eleven months of using an AArch64 desktop, I decided to end that experiment.

Hardware used

About a year ago, I bought myself an Ampere Altra system. After moving some hardware around and making a few extra orders, the final setup was:

   
CPU Ampere Altra Q80-30 processor (80 cores at 3.0GHz)
RAM 128 GB (8x 16GB HMA82GR7CJR8N-XN)
GPU AMD Radeon RX6700XT
NVME Lexar LM970 2TB
ADATA SX8200 Pro 1TB
Motherboard ASRock Rack ALTRAD8UD-1L2T
PSU MSI MPG A850G (850W)
Case Endorfy 700 Air
USB3 no-name USB 3.2/10Gbps controller (PCIe x4)

To be fair, I should mention that this is a server motherboard, not a desktop one, and Altra systems were never meant to be desktops (despite companies selling them as such). Naturally, the list of tested/approved devices (Qualified Vendor List (QVL for TLA fans)) is quite short and for Ampere Altra systems, it does not contain AMD Radeon GPU cards. They can be made to work, but this often requires additional effort.

The extra USB 3.2 controller allowed me to have more USB devices than the motherboard alone supported, and gave me some 10Gbps ports for connecting external NVMe drives.

The whole system was running just fine* under Fedora 42–44.

The first issue

Have you noticed the small “*” at the end of the previous paragraph? The system I used was not quite Fedora — I had to use my own, self-built kernel.

You see, the PCI Express controller in the Ampere Altra has some issues. Let me quote the description of the Ampere Altra erratum 82288 patches:

Per Altra family erratum, PCIE_65 may cause invalid addresses to be generated on PCIe mmio writes, impacting certain device types, notably AMD GPUs, and thus the Altra family is not generally compatible with those device types.

And longer description from patch itself:

PCIe device drivers may map MMIO space as Normal, non-cacheable memory attribute (e.g. Linux kernel drivers mapping MMIO using ioremap_wc). This may be for the purpose of enabling write combining or unaligned accesses. This can result in data corruption on the PCIe interface’s outbound MMIO writes due to issues with the write-combining operation.

The workaround modifies software that maps PCIe MMIO space as Normal, non-cacheable memory (e.g. ioremap_wc) to instead Device, non-gathering memory (e.g. ioremap). And all memory operations on PCIe MMIO space must be strictly aligned.

So, to have a working Linux system, I had to rebuild the kernel on every package update. Which usually meant “weekly”. Each Monday or Tuesday, I would update the local copy of the Fedora kernel package repository and build it using my own versioning scheme, like “7.0.2-200.fc44.pcie65.6”. The “pcie65” part reminded me which patches I had applied, and the “6” was a counter for the patch rebases.

I cloned the repository from GitHub and then rebased patches, adapting them whenever they needed work. The side effect was that I often used a newer kernel than the official Fedora release — there is a “stabilisation” branch in the Fedora kernel package repo where the soon-to-be-pushed version is present. So, when Fedora had 6.19.y kernel, I had 7.0.z one.

So many cores, not enough speed

As I wrote in my previous post, having eighty CPU cores does not mean that the system is a good, fast desktop machine.

AMD GPU started failing

As I mentioned above, to get my AMD Radeon RX6700XT running properly I had to alter kernel with the out-of-tree patches. It worked, I could play some games, watch videos with hardware-assisted video decode acceleration.

Until one day, around the Linux 7.0 release, when it started to fail. Running a game ended with:

kernel: amdgpu 0000:03:00.0: Fence fallback timer expired on ring vcn_dec_0
kernel: amdgpu 0000:03:00.0: Fence fallback timer expired on ring vcn_dec_0
kernel: amdgpu 0000:03:00.0: Fence fallback timer expired on ring vcn_dec_0

Over and over again. Watching YouTube videos became impossible due to 720 out of 750 frames being dropped, etc.

Normally I would start to bisect the kernel to find out where the problem is. But I was running a tainted kernel due to PCIE65 patches so who knew where the problem actually was…

Let’s get Nvidia

I bought an Nvidia RTX 2060 graphics card and put it in place of the AMD Radeon. It turned out that if I wanted to use it with the nouveau kernel driver I still needed PCIE65 patches applied…

So I tried default Fedora kernel with Nvidia binary driver. And it worked fine. Video decoding was accelerated, some games under Wine worked as well.

But then I started FreeCAD. And OrcaSlicer. And in both cases I got crash and exit…

It turned out that there was no org.freedesktop.Platform.GL.nvidia in Flatpak repositories for AArch64. And I used both of those tools quite often.

Powering up the old x86-64…

At that point, I gave up. And booted my x86-64 system, which had been powered off all that time. There were a lot of cables to move, some new ones to arrange, and now I have both “wooster” (Ampere Altra) and “puchatek” (Ryzen 5 3600) systems running under my desk.

Moving from 80 cores to 6 cores (12 threads) was a weird experience. A much smaller number, yet things work fine. I can load all threads and the music still plays. All games from my Steam library are playable. A working FreeCAD allows me to finish designing cases for my home projects and I can 3D print prototypes straight from OrcaSlicer.

The “wooster” system stays powered on, churning through RISC-V package builds. It may be weak in single-thread, but it flies when it comes to multi-core load.

Conclusion

As for the Ampere Altra, I am not planning to repeat this experiment. Another AArch64 desktop attempt would require a completely new hardware platform. And I have no plans to spend over twenty thousand PLN to buy an Nvidia DGX Spark system.

联系我们 contact @ memedata.com