Wine 11 从内核层面重写 Linux 运行 Windows 游戏的方式,带来巨大性能提升
Hacker News 摘要原标题:Wine 11 rewrites how Linux runs Windows games at kernel with massive speed gains
Linux 游戏体验自 2018 年 Valve 发布 Proton 以来发生了翻天覆地的变化。与以往仅包含少量修复的年度更新不同,Wine 11 是一次重大的跨越。它引入了开发多年的 NTSYNC 支持,从内核级别重写了 Linux 运行 Windows 游戏的方式,并彻底完成了 WoW64 架构的重构。
内核级同步机制:NTSYNC
由于现代 Windows 游戏高度依赖多线程协作,线程之间需要通过互斥锁、信号量和事件等同步原语进行频繁通信。Linux 系统原本缺乏与之完全对应的原生机制,这导致 Wine 长期以来只能使用效率较低的方案:
1. 传统方案:通过一个名为 wineserver 的进程处理所有同步请求。由于每秒产生数千次此类调用,远程过程调用(RPC)的开销成了性能瓶颈,表现为画面微小的卡顿或帧生成时间不稳定。
2. 变通方案:
• Esync:利用 Linux 的 eventfd 系统调用,虽然减少了对 wineserver 的依赖,但容易触及系统的文件描述符限制。
• Fsync:利用 Linux futexes 实现更好的性能,但它长期需要非官方的主线外内核补丁。
3. NTSYNC 的突破:这个新功能在 Linux 内核中直接添加了一个驱动程序(/dev/ntsync),用来模拟 Windows NT 的同步 API。这意味着同步操作直接在内核中发生,不再需要复杂的变通手段或用户空间转换。它支持完善的队列管理、事件语义和原子操作。
令人瞩目的性能提升
根据开发者的基准测试,在没有 esync 或 fsync 干扰的情况下,Wine 11 对比原生 Wine 的性能增幅非常惊人:
• 尘埃 3(Dirt 3):从 110.6 帧提高到 860.7 帧,提升了 678%。
• 生化危机 2:从 26 帧跳升至 77 帧。
• 使命召唤:黑色行动 I:此前在 Linux 上几乎无法运行,现在已完全可玩。
• 小小缇娜的奇幻之地:从 130 帧增加到 360 帧。
NTSYNC 目前已并入 Linux 内核 6.14 版本。Fedora 42、Ubuntu 25.04 等发行版以及最新的 SteamOS 测试版都已经支持该特性。
WoW64 架构正式完工
WoW64 是在 64 位系统中运行 32 位应用程序的关键子系统。Wine 11 标志着该架构的完全实现,其意义包括:
• 摆脱 32 位库:用户不再需要在 64 位 Linux 系统上安装大量的 32 位系统依赖项。
• 向前兼容:现在的 WoW64 模式甚至支持 16 位应用程序,这意味着 90 年代的古老软件也能通过 Wine 平稳运行。
• 游戏简化:许多老旧游戏依然采用 32 位执行程序,现在 Wine 可以自动处理这些程序的翻译和运行,避免了配置 multilib 仓库的麻烦。
针对 Wayland 与现代技术的优化
除了内核级别的核心改动,Wine 11 还包含了一系列重要改进:
• Wayland 驱动成熟化:实现了 Wine 窗口与原生 Wayland 应用之间的双向剪贴板支持,支持拖拽功能。低分辨率的老游戏现在可以通过合成器缩放正常显示,不再会搞乱桌面分辨率。
• 图形后端更新:在 X11 环境下,EGL 成为 OpenGL 渲染的默认后端。Vulkan 支持已同步至 1.4 API 版本。
• 视频解码:通过 Vulkan Video 实现了 Direct3D 11 视频接口下的 H.264 硬件加速解码,有助于提升游戏过场动画的流畅度。
• 外设与连接:改进了赛车方向盘和飞行摇杆的力反馈效果。引入了全新的蓝牙驱动,支持低功耗蓝牙(BLE)服务和配对。
• ARM64 兼容性:支持在拥有更大原页面的系统上模拟 4K 页面大小,这为 Wine 在各类 ARM 架构 Linux 设备上的运行铺平了道路。
Wine 11 还修复了大量特定游戏的兼容性问题,包括《仁王 2》、《星际争霸 2》、《巫师 2》和战网客户端等。随着官方 Proton 逐步合并 Wine 11 的代码,Steam Deck 用户和广大 Linux 玩家将能够直接享受到这些技术进步带来的红利。
原文:https://www.xda-developers.com/wine-11-rewrites-linux-runs-windows-games-speed-gains/