如何在 Wine 或 CrossOver 中设置 CPU 亲和性?

如何在 Wine 或 CrossOver 中设置 CPU 亲和性?

有些老游戏不喜欢当今计算机中的多核处理器。我想知道是否有办法在 Wine 或 CrossOver 下将它们的 CPU 亲和性设置为“1”?即在原生 Windows 环境中,您可以在任务管理器中右键单击游戏进程,然后在那里设置亲和性。

我遇到了一个名为 RunFirst.exe 的程序,但不知道如何用一个命令来运行它然后运行游戏。

欢迎提出建议。谢谢!

答案1

运行 Wine 附带的 taskmgr.exe,它允许您像在 Windows 中一样设置亲和性 :)。

但是我不知道如何永久设置它或自动设置它。

Windows 用于此任务的 API 可能与 Wine 中存在的 API 相同,这意味着可以使用 Windows 工具执行该任务。

编辑:

我找到了一个可以做到这一点的工具:

http://retired.beyondlogic.org/solutions/processutil/processutil.htm

Process -a name_of_exe 1将亲和性掩码设置为处理器 0。

Process -a name_of_exe 11将亲和性掩码设置为处理器 0 和 1。

... 等等。

也可以看看:

http://en.wikipedia.org/wiki/Affinity_mask

答案2

不支持在 OS X 上设置处理器亲和性。wine 无法进行这样的系统调用来实现此功能。WineHQ 上与此相关的错误已适当关闭为 WONTFIX (Bug 30480 - 在 Mac 上设置 CPU 亲和性不起作用)。

也可以看看这个相关的 SU 问题:“如何在 OS X 上设置处理器亲和性?”

因此,尽管 Jens 的回答是一次勇敢的努力,但 Wine 会默默地(或者不那么默默地,取决于 WINEDEBUG)丢弃那些在 Mac 上设置亲和性的 API 调用。

常用的解决方法是使用 Xcode 的开发工具之一(如 Instruments)来限制整个系统可用的活动核心总数。虽然不太好,但确实有效。 Instruments.app 偏好设置:常规窗格

答案3

我认为使用taskset命令是可行的。像这样运行wine:

taskset -c 0 wine program_name.exe

摆脱调试消息:

WINEDEBUG=-all taskset -c 0 wine program_name.exe

“-c 0”部分将为核心 1 设置 CPU 亲和性,“-c 1”将为核心 2 设置 CPU 亲和性,等等。请参阅“man tasket”了解更多信息。

相关内容