自从我全新安装 ubuntu 12.04 以来,我的游戏性能大幅下降
我的电脑配备 Nvidia Geforce GTX 460、AMD Phenom II X4 965 CPU 和 4GB RAM,我使用 nvidias 专有驱动程序。
我主要使用 Linux 客户端玩 Heroes of Newerth。我从 ubuntu 9.10 开始玩,使用专有 nvidia 驱动程序时从未遇到过任何性能问题。我的 fps 始终达到垂直同步帧上限 60。
由于我运行的是 ubuntu 12.04,因此帧率大约为 30-45 fps,游戏体验总体上非常滞后。我知道很多人在使用 nvidias 295.40 驱动程序时遇到问题,遗憾的是 ubuntu 12.04 默认安装了该驱动程序。因此我手动安装了最新的稳定版 295.49、最新的测试版 302.07,甚至 ubuntu 11.10 中使用的旧版本 295.33(我从未遇到过任何性能问题)。这浪费了我的时间,因为我在使用这 4 个驱动程序版本时都遇到了相同的性能问题。
当我使用 Unity 2D 时,我的 fps 会恢复到 60,并且整体游戏性能非常好。因此,只有在运行 ubuntu 12.04 版本的 Unity 时才会遇到这些问题。
我也尝试删除主目录中的 .config 和 .compiz-1 文件夹,但使用 unity 时游戏性能仍然很差。
我不知道下一步该怎么做...有人知道我该如何进一步调试这个问题吗?也许我可以提供更多数据来更好地分析问题?也许可以尝试摆弄一些 compiz 设置?
这种性能倒退确实令人沮丧,我正在考虑下载《Heroes of Newerth》的 Windows 客户端并回到双启动,因为这简直是不可接受的。
任何帮助均感激不尽。
答案1
这不是一个真正的解决方案,但至少它可能是一个(希望)有用的解决方法(除了简单地使用 Unity 2D)。
在开始游戏之前,打开 Nautilus(文件管理器)并转到/usr/share/application
。打开终端,输入metacity --replace
,然后按回车键。不要惊慌,Unity 界面会消失,但这是我的意图。从文件管理器启动游戏(游戏启动器应该在我提到的文件夹中)。玩完游戏后,在unity --replace
终端窗口中输入,然后按回车键。您的桌面现在已恢复到原来的状态。
这应该可以工作,因为可能是在后台运行的 Unity 导致了问题。
另外,我会将此报告为错误。这肯定是需要修复的问题。如果您提交错误报告,请务必在此处留下链接,以便遇到此问题的其他人可以将其标记为“影响他们”,这样可以更快地修复它。
答案2
您可以随时更新到 304.22 Nvidia Beta 驱动程序,看看会发生什么。我在使用 Ubuntu 12.04 LTS 时遇到了严重的性能问题,Nvidia 295.59 版本和 302.07 版本似乎修复了一些小问题。大多数问题已通过更新最新的 304.22 驱动程序得到解决。现在我的 GeForce 性能终于与 Windows XP 相当,但一些应用程序仍然存在小问题,但情况确实有了显着改善。您应该始终使用最新的 Nvidia 驱动程序,即使它们是 BETA 版本,因为似乎 Nvidia 团队没有在较新的内核和 Ubuntu 滚动更新上测试较旧的稳定版本,从而导致意外的问题和问题。问题是 Nvidia 需要开源他们的驱动程序,以便 Ubuntu 维护者和 Linux 开发人员可以保持一切同步,但这是一个持续的讨论,不会很快得到解决 :-(
您可以获得它们http://www.geforce.com/drivers/beta-legacy
304.22 驱动程序有大量大规模修复,例如:
- GeForce GTX 680M
Quadro K1000M
Quadro K2000M
使用哪个显示设备来创建隐式 MetaModes。
有关详细信息,请参阅 README 中IncludeImplicitMetaModes X 配置选项的描述。
- SecondMonitorHorizSync
SecondMonitorVertRefresh
答案3
编辑:X 现在可以通过 xscreensaver 锁定
嗨!试试这个,我用它取得了很好的效果,主要是用于游戏!因为它不会被 Unity 管理,所以你也可以获得很好的结果!
我创建了这个脚本,它可以创建一个新的 X 会话并运行一个命令或打开一个终端,以便您可以在那里运行它。
打开NewX.sh
#!/bin/bash
function FUNCisX1running {
ps -A -o command |grep -v "grep" |grep -q -x "X :1"
}
useJWM=true
useKbd=true
while [[ ${1:0:2} == "--" ]]; do
if [[ "$1" == "--no-wm" ]]; then #opt SKIP WINDOW MANAGER (run pure X alone)
useJWM=false
shift
elif [[ "$1" == "--no-kbd" ]]; then #opt SKIP Keyboard setup
useKbd=false
shift
elif [[ "$1" == "--isRunning" ]]; then #opt check if new X :1 is already running
if FUNCisX1running; then
exit 0
else
exit 1
fi
elif [[ "$1" == "--help" ]]; then #opt show help info
echo "usage: options runCommand"
# this sed only cleans lines that have extended options with "--" prefixed
sedCleanHelpLine='s"\(.*\"\)\(--.*\)\".*#opt" \2"' #helpskip
grep "#opt" $0 |grep -v "#helpskip" |sed "$sedCleanHelpLine"
exit 0
else
#echoc -p "invalid option $1"
echo "PROBLEM: invalid option $1"
$0 --help
exit 1
fi
done
#echo "going to execute: $@"
#runCmd="$1" #this command must be simple, if need complex put on a script file and call it!
runCmd="$@" #this command must be simple, if need complex put on a script file and call it!
#if ! echoc -q -t 2 "use JWM window manager@Dy"; then
# useJWM=false
#fi
# run in a thread, prevents I from ctrl+c here what breaks THIS X instace and locks keyb
if ! FUNCisX1running; then
xterm -e "\
echo \"INFO: hit CTRL+C to exit the other X session and close this window\";\
echo \"INFO: running in a thread (child proccess) to prevent ctrl+c from freezing this X session and the machine!\";\
echo \"INFO: hit ctrl+alt+f7 to get back to this X session (f7, f8 etc, may vary..)\";\
echo ;\
echo \"Going to execute on another X session: $runCmd\";\
sudo X :1"&
fi
#sudo chvt 8 # this line to force go to X :1 terminal
# wait for X to start
while ! FUNCisX1running; do
sleep 1
done
# run in a thread, prevents I from ctrl+c here what breaks THIS X instace and locks keyb
if $useJWM; then
if [[ ! -f "$HOME/.jwmrc" ]]; then
echo '<?xml version="1.0"?><JWM><Key mask="4" key="L">exec:xscreensaver-command --lock</Key></JWM>' \
>$HOME/.jwmrc
#if ! jwm -p; then
# rm $HOME/.jwmrc
# echo ".jwmrc is invalid"
#else
echo "see http://joewing.net/programs/jwm/config.shtml#keys"
echo "with Super+L you can lock the screen now"
#fi
fi
jwm -display :1&
fi
kbdSetup="echo \"SKIP: kbd setup\""
if $useKbd; then
kbdSetup="setxkbmap -layout us"
fi
sleep 2
xscreensaver -display :1&
# setxkbmap is good for games that have console access!; bash is to keep console open!
# nothing
#xterm -display :1&
# dead keys
#xterm -display :1 -e "setxkbmap -layout us -variant intl; bash"&
# good for games!
xterm -display :1 -e "$kbdSetup; bash -c \"$runCmd\"; bash"&
#xterm -display :1 -e "$kbdSetup; bash -c \"$@\"; bash"&
另外,添加以下位置:compiz 配置设置管理器 -> 窗口规则 -> 不可关闭的窗口:
(class=XTerm) & (title=sudo X :1) & (name=xterm)
这将阻止您关闭该终端(使用 ctrl+c 关闭其他 X 会话以及终端),因为如果您关闭“窗口”,它将冻结您当前的 X 会话!
它的优点是,您不会遇到 alt+enter 全屏问题,也不会遇到 Alt+TAB 全屏问题;您可以更稳定地运行任何 3D 游戏,从 Urban Terror(Linux 原生)到使用 Wine 运行的游戏!甚至一些运行 3D 游戏的浏览器,如 Firefox 和 Quake!
注意:您可能需要安装 jwm 包,这不是必需的,但如果您需要在那里进行任何窗口管理,则会有所不同。
附言:当然可以改进,我的计划是将键盘设置添加到一个选项中,但我做得很慢;),如果有人改进/清理它,请发布以便我可以更新我的脚本:)
答案4
使用 Unity 3D 时,您是否启用了许多 3D 效果等?(立方体、桌面动画、菜单效果等)即使在良好的机器上,这些也会降低性能。
可能需要检查一下您的 nvidia 设置,只需在仪表板中搜索“nvidia”即可找到它。我知道我必须对 nvidia 设置进行大量调整才能避免出现任何延迟。
检查您的游戏设置,稍微改变它们,看看您的 fps 变化了多少。
请务必获取 Ubuntu 的最新更新,这有时可以解决问题,但就您而言,我并不认为它会有所帮助。