在去年的Linux Plumbers大会上进行了讨论之后,提出了一个用于Linux内核的Windows NT同步原语驱动程序。这个驱动程序会暴露/dev/ntsync作为一种新的字符设备,用于直接在Linux内核中实现一些Windows NT同步原语。反过来,这将有助于一些通过Wine在Linux上运行的Windows游戏/应用程序的性能,在某些情况下,这将意味着更好的性能。
CodeWeivers的Elizabeth Figura向各种Linux内核邮件列表发布了“Request for Comment”(RFC),她解释了这个同步原语驱动程序针对Windows NT内核行为的动机:
Wine项目在用户空间模拟Windows API。该API的一个特定部分,即NT同步原语,过去一直通过RPC实现到专用的“内核”进程。然而,最近的应用程序更努力地使用这些API,RPC的开销已经成为一个瓶颈。
NT同步API过于复杂,无法在不牺牲正确性的情况下在现有原语之上实现。某些操作,如NtPulseEvent()或NtWaitForMultipleObjects()的“Wait-for-all”模式,需要直接控制底层的等待队列,而在用户空间中实现足够健壮的等待队列是不可能的。因此,这个建议的驱动程序直接在Linux内核中实现有问题的接口。
最初提出的补丁程序系列是一组32个补丁程序,而17个补丁程序是实际实施的。有了这些“NTSYNC”内核驱动程序补丁,不同的Windows游戏在Wine上的好处从21%与Metro 2033到高达678%与污垢3!通常情况下,这有助于游戏达到100%+更好的性能。
以下是菲古拉分享的一些业绩数据:
这并不是一个全新的概念,因为多年来葡萄酒开发商已经寻求新的Linux内核同步API这比esync/fsync更适合处理Windows NT同步对象API需求。
这将是非常有趣的,看看这个NT同步原语驱动程序的工作走向,以及它是否/何时最终会被主流Linux内核接受,以增强在Linux上运行Windows游戏/应用程序的性能。无论如何,由于本系列被标记为“RFC”,并且其实现有一些开放的设计元素,因此在确定可以上行的内容之前,可能需要进行一些修改。
看见本补丁系列 最初的RFC工作。下面嵌入的也是LPC 2023关于这个主题的演讲。