标题: 【Wine游戏助手文档】如何为Esync增大系统文件描述符上限
时间: 2022-05-01发布,2022-05-02修改
Esync 的全称是 eventfd-based synchronization(基于事件通知文件描述符的同步),它减小了EXE程序与Wine内核服务进程(wineserver)通信时的开销,提升了多核游戏的性能。
在Wine中,wineserver进程用于取代Windows的内核服务,它提供一系列和EXE运行息息相关的功能:
等等。所以EXE会频繁的和wineserver通信,减小通信开销就可以提升EXE的运行性能。
目前有两种减小通信开销的方法:
第二种比第一种快,但是要求Linux内核版本 >= 5.16(deepin 的 5.15 内核似乎也可以用)。如果内核不支持 Fsync,默认会使用 Esync。
文件描述符相当于Windows中的“句柄”,记录了程序运行时动态分配的资源。为了防止程序占用大量资源不释放,导致系统卡死,系统对程序允许打开的句柄数进行了限制,这就是“文件描述符上限”。
Esync的每次同步都需要占用一个文件描述符(句柄),所以同一时间可能打开成千上万个文件描述符,可能会超过某些系统的默认上限。虽然如此,但现代计算机并不会因为打开几万个句柄就变卡,所以纯粹是这些系统给的上限太小了。
如果Esync打开的文件描述符已经超过上限,同步就会失败,Wine程序就会卡住,或者崩溃。所以,必须把上限提升到Wine永远用不完的程度才行。
使用 Systemd 240 和更新版本的系统已经与 Esync 兼容。
如果您不确定您的系统是否兼容,请运行 ulimit -Hn
命令,如果打印的值大于或等于 524288,那么您的系统与 Esync 兼容。
如果您的系统与 Esync 不兼容(ulimit -Hn
打印的值低于 524288 ,例如为 4096),您有两种不同的方法来解决此问题。哪种方法可用取决于当前使用的发行版。应用这两种方法应该都没有副作用。
修改 Systemd 配置
此方法适用于 Ubuntu 和其他使用 systemd 的系统。您需要编辑/etc/systemd/system.conf
和/etc/systemd/user.conf
文件(需要root权限/sudo),向其中添加一行DefaultLimitNOFILE=524288
。如果DefaultLimitNOFILE=
已经存在,请把值改为524288
并删除开头的#
号以使其生效(以#
开头的行是注释,不生效)。
编辑文件后,重启计算机以使更改生效。要验证是否生效,请运行 ulimit -Hn
,如果结果变成524288
就生效了。
如果打印的值仍然较小,请尝试下面的 ulimits 方法。
修改 ulimits.conf
在不使用 Systemd 的 Linux 发行版或使用 pam-limits.conf
的发行版(Arch Linux、Fedora、Solus...)上,您需要编辑/etc/security/limits.conf
,新增一行:
用户名 hard nofile 524288
把用户名
替换为您的实际用户名。保存文件后,重启电脑以使更改生效,然后运行 ulimit -Hn
进行验证。
Lutris 从 0.5.9 开始默认启用 Esync,所有当前可用的 lutris
系列 Wine(版本开头是lutris-
的wine)都支持 Esync。
此外,proton
系列、tkg
系列和winehq-staging
系列也支持Esync,但是winehq-devel
等其他系列则不支持。
『回复列表(0|显示机器人聊天)』