O que fazer contra a queda no desempenho do jogo na versão 12.04 ao usar o Unity (3D)?


9

Eu experimentei uma enorme queda no desempenho do jogo desde a minha nova instalação do ubuntu 12.04

Meu PC consiste em uma Nvidia Geforce GTX 460, CPU AMD Phenom II X4 965 e 4 GB de RAM e eu uso o driver proprietário da nvidias.

Eu jogo principalmente Heroes of Newerth usando seu cliente linux. Faço isso desde o ubuntu 9.10 e nunca tive problemas de desempenho ao usar o driver proprietário da nvidia. Meus fps sempre foram atingidos no limite de quadros vsync de 60.

Desde que eu executo o ubuntu 12.04, chego a 30-45 fps e a experiência de jogo em geral é muito lenta. Eu sei que muitas pessoas estão tendo problemas com o driver nvidias 295.40, que infelizmente é instalado por padrão no ubuntu 12.04. Por isso, instalei manualmente a última versão estável 295.49, a última versão beta 302.07 e até a versão antiga 295.33 usada no ubuntu 11.10 (onde nunca tive problemas com o desempenho). Foi uma perda de tempo, pois eu estava enfrentando os mesmos problemas de desempenho nas 4 versões de driver.

Quando uso o Unity 2D, meus fps voltam aos 60 e o desempenho geral do jogo é ótimo. Então, eu só tenho esses problemas ao executar a versão do Unity do ubuntu 12.04.

Também tentei excluir minhas pastas .config e .compiz-1 no diretório inicial, mas o desempenho do jogo ainda é uma bagunça ao usar a unidade.

Não sei o que tentar em seguida ... Alguém sabe como posso depurar ainda mais o problema? Talvez como eu possa fornecer mais dados para analisar melhor o problema? Talvez tente mexer com algumas configurações de compiz?

Essa regressão de desempenho é realmente frustrante e estou pensando em apenas baixar o cliente Windows do Heroes of Newerth e voltar à inicialização dupla, pois isso é simplesmente inaceitável.

Qualquer ajuda apreciada.

Respostas:


3

Não é uma solução real, mas pelo menos pode ser uma solução alternativa (espero) útil (além de simplesmente usar o Unity 2D).

Antes de iniciar um jogo, abra o Nautilus (o gerenciador de arquivos) e vá para /usr/share/application. Abra um terminal, digite metacity --replacee pressione Enter. Não entre em pânico, a interface do Unity desaparecerá, mas essa é minha intenção. Inicie o jogo a partir do gerenciador de arquivos (o iniciador do jogo deve estar na pasta que mencionei). Depois de terminar o jogo, digite unity --replacena janela do terminal e pressione enter. Sua área de trabalho agora está restaurada como estava.
Isso deve funcionar, pois provavelmente o Unity rodando em segundo plano está causando problemas.

Além disso, eu reportaria isso como um bug. Definitivamente, é algo que precisa ser corrigido. Se você enviar um relatório de bug, deixe um link aqui para que outras pessoas que estejam enfrentando esse problema possam marcá-lo como "afetando-o", o que o corrigirá mais rapidamente.


Obrigado por sua resposta. Vou tentar esta solução alternativa e relatar de volta. Claro que não é bonito, mas pelo menos melhor do que sair e voltar com o Unity 2d o tempo todo ... Você pode me ajudar a relatar o bug? Um link para um recurso ou algo em que o processo é explicado já ajudaria bastante. Obrigado.
dong

Obrigado RobinJ pela sua solução alternativa. Está funcionando muito bem e é melhor do que sair e entrar novamente com o unity 2d porque posso manter minha sessão. Abri a pasta com o iniciador do jogo, abri um terminal, digitei metacity --replace &o jogo e tenho o desempenho maravilhoso que espero obter. Quando termino, digito unity --replacee tudo volta ao normal. Agora vou registrar um bug contra a unidade e ver o que ele traz.
dong

@dong Há um guia para reportar bugs na documentação do Ubuntu: help.ubuntu.com/community/ReportingBugs
RobinJ

Não é um bug do Unity por si só, mas sim do Compiz. Jogos nunca correr bem com o Compiz para mim ...
user55822

Tudo bem, um pouco tarde, mas aqui está o relatório de erro: unity bug-998141 . Certifique-se de marcar o bug como afetando você, se você também é afetado por isso. Talvez isso chame a atenção.
dong

1

Você sempre pode atualizar para os drivers 304.22 Nvidia Beta e ver o que acontece. Eu estava tendo grandes problemas de desempenho com o Ubuntu 12.04 LTS e a versão Nvidia 295.59 e a versão 302.07 parecia corrigir algumas coisas menores. A maioria dos problemas foi resolvida com a atualização do driver 304.22 mais recente. Agora, meu desempenho na GeForce finalmente é igual ao Windows XP, mas ainda existem problemas menores em alguns aplicativos, mas a situação realmente melhorou significativamente. Você deve usar os drivers mais recentes da Nvidia o tempo todo, mesmo que estejam em BETA, porque parece que os mais antigos e estáveis ​​não foram testados pela equipe da Nvidia em atualizações mais recentes do Kernel e do Ubuntu, causando problemas e problemas inesperados.

Você pode obtê-los http://www.geforce.com/drivers/beta-legacy

Os drivers 304.22 têm várias correções em grande escala, como:

  • Adicionado suporte para as seguintes GPUs:
    • GeForce GTX 680M
      Quadro K1000M
      Quadro K2000M
  • Aprimorou a funcionalidade da opção IncludeImplicitMetaModes Xconfiguration:
  • MetaModes implícitos serão adicionados ao dispositivo de exibição primário, mesmo se vários dispositivos de exibição estiverem em uso quando o X for inicializado.
  • MetaModes implícitos serão adicionados para resoluções comuns, mesmo se não houver um modo com essa resolução no pool de modos do dispositivo de exibição.
  • Estendeu a sintaxe da opção de configuração IncludeImplicitMetaModes, por exemplo, para controlar qual dispositivo de exibição é
    usado para a criação de MetaModes implícitos.
  • Consulte a descrição da
    opção de configuração IncludeImplicitMetaModes X no README para obter detalhes.

  • Modificado o tratamento das solicitações RandR 1.0 / 1.1 RRGetScreenInfo e RRSetScreenConfig (por exemplo, `xrandr -q --q1` e` xrandr --size ... `e` xrandr --orientation ... `) para que operem em MetaModes. Esse era o comportamento nas versões 295.xx e anterior do driver NVIDIA X, mas as versões 302.xx alteravam o tratamento dessas solicitações do RandR 1.0 / 1.1 para operar nos modos de uma única saída do RandR.
  • Com as alterações acima para o tratamento de IncludeImplicitMetaModes e RandR 1.0 / 1.1, os aplicativos de tela cheia (por exemplo, aplicativos baseados em SDL, Wine) devem ter mais resoluções disponíveis e interagir melhor com várias configurações de monitores.
  • Corrigido um bug que poderia fazer com que as GPUs G8x, G9x e GT2xx exibissem uma tela preta ou corrompida após acordar da suspensão.
  • Corrigidos vários erros que poderiam causar a interrupção de alguns programas OpenGL ao chamar o fork (3).
  • Corrigido um bug nas configurações da nvidia que fazia com que os resultados das consultas ProbeDisplays feitas com a opção --display-device-string fossem formatados incorretamente.
  • Melhorou a capacidade de resposta das atualizações no painel de controle da nvidia-settings quando os monitores são hotplugged.
  • Corrigido um bug que causava corrupção na exibição ao definir algumas transformações, especialmente ao mover uma exibição transformada.
  • Corrigido um bug que fazia com que eventos extras do RandR fossem gerados na primeira vez em que um monitor era hotplugged.
  • Corrigido um erro que fazia com que as modelines X11 com '@' fossem rejeitadas.
  • Adicionado suporte para dispositivos de filial DisplayPort 1.2, que permitem a conexão de vários monitores a um único conector DisplayPort em uma placa gráfica.
  • Corrigido um erro que fazia com que a maioria dos uploads de textura OpenGL fosse lenta quando o contexto era vinculado à renderização em um drawable de sobreposição RGB.
  • Corrigido um erro que fazia com que o áudio através de HDMI não funcionasse após reiniciar o servidor X em algumas GPUs MCP7x (IGP).
  • Atualizada a opção de configuração do X "UseDisplayDevice" para honrar o valor "none" em qualquer GPU.
  • Adicionado suporte para DKMS no nvidia-installer. A instalação do módulo do kernel através do DKMS permite que o módulo seja reconstruído automaticamente ao mudar para um kernel Linux diferente. Veja o texto de ajuda do README e da nvidia-installer ou a opção "--dkms".
  • Adicionadas as propriedades de saída RandR _ConnectorLocation, ConnectorNumber, ConnectorType, EDID, _GUID e SignalFormat. Consulte o README para obter detalhes sobre essas propriedades.
  • Suporte estendido ao Mosaico Base para todas as configurações G80 + SLI com até três monitores.
  • Corrigido um erro que fazia com que alguns monitores deixassem de ativar do modo de suspensão do DPMS quando vários monitores DisplayPort eram conectados a uma GPU.
  • Os controles foram removidos dos atributos XVideo da página "X Server XVideo Settings" do painel de controle nvidia-settings. Os atributos do XVideo podem ser configurados nos aplicativos do XVideo player ou através de utilitários como o xvattr.
  • Corrigido um erro que fazia todas as portas em um adaptador XVideo compartilharem as configurações de correção de cores.
  • Suporte removido para as seguintes opções de configuração do X:
    • SecondMonitorHorizSync
      SecondMonitorVertRefresh
    Controle semelhante está disponível nas opções de configuração do NVIDIA HorizSync e VertRefresh X. Consulte o README do driver NVIDIA para obter detalhes.
  • Corrigido um erro que impedia o NVIDIA 3D Vision Pro de funcionar corretamente ao alternar entre servidores X em diferentes VTs.
  • Adicionado suporte para panning da área de trabalho quando rotação, reflexão ou transformação é aplicada a um dispositivo de exibição (por meio do RandR ou da sintaxe MetaMode); o panning seria anteriormente ignorado nesse caso.

  • Sério, você deve tentar os novos drivers, finalmente o desempenho quase o que está no Windows ...

    Eu normalmente não gosto de usar qualquer coisa que ainda está em fase beta no meu sistema de trabalho muito muito. Dito isto, posso afirmar que os drivers beta mais recentes corrigiram vários problemas que eu estava tendo com os drivers proprietários padrão da nvidia 12.04 precisos. É como se tudo tivesse mudado - os chamados drivers 'estáveis' eram para mim uma experiência beta, os drivers atualizados eram ainda piores (por exemplo, sem interrupção da suspensão) e os drivers beta mais recentes (304.30) estão funcionando perfeitamente longe. +1 de mim por esta resposta útil e elaborada! Muito obrigado!
    FuzzyQ

    Os drivers 304.30 finalmente colocaram meu sistema em quase paridade com os níveis de desempenho do Windows XP e Windows 7 Nvidia. Com Nvidia no Windows e no Linux você precisa manter na borda do sangramento em todos os momentos que parece e sempre obter os drivers diretamente deles para a melhor experiência ... feliz que fixa-lo para você ...

    1

    EDIT: X agora pode ser bloqueado através do xscreensaver

    Oi! tente isso, estou obtendo ótimos resultados, principalmente para jogos! Como não será gerenciado pelo Unity, você também poderá obter ótimos resultados!

    Eu criei esse script que cria uma nova sessão do X e executa um comando ou abre um terminal para que você possa executá-lo lá.

    openNewX.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"&
    

    adicione-o também em: compiz config settings manager -> regras da janela -> janelas não fechadas:

    (class=XTerm) & (title=sudo X :1) & (name=xterm)
    

    Isso impedirá que você feche esse terminal (use ctrl + c para fechar a outra sessão X e também o terminal), porque se você fechar "a janela", ela congelará sua sessão X atual!

    Tem a vantagem de você não ter alt + entrar em problemas de tela cheia, também não há problemas de tela + Alt + TAB; você pode executar com mais estabilidade qualquer jogo 3D, desde o Urban Terror (nativo do linux) até os jogos executados com o Wine! Até alguns navegadores que rodam jogos 3D como o Firefox com Quake!

    Obs .: você pode querer instalar o pacote jwm, não necessário, mas fará a diferença se você precisar fazer algum gerenciamento de janelas lá ..

    PS .: pode ser melhorado, é claro, meu plano é adicionar a configuração do teclado a uma opção, mas faço muito lentamente;), se alguém melhorar / limpar, poste para que eu possa atualizar o meu script :)


    0

    Ao usar o Unity 3D, você tem muitos efeitos 3D e similares ativados? (cubo, animações da área de trabalho, efeitos de menu etc.) Isso pode reduzir o desempenho, mesmo em uma boa máquina.

    Pode valer a pena verificar as configurações da nvidia, basta procurar por 'nvidia' no painel e você a encontrará. Eu sei que eu tive que ajustar as configurações da nvidia um pouco antes de eu não ter nenhum atraso.

    Verifique as configurações do jogo, altere-as um pouco e veja o quanto o seu fps muda.

    Certifique-se de pegar as atualizações mais recentes para o Ubuntu; isso às vezes pode resolver problemas, embora no seu caso, não espero que ajude.


    Obrigado por sua resposta. Como não mudei nenhuma configuração de compiz nesta instalação (nem tenho o ccsm instalado), tudo na minha configuração é o Unity 3D de estoque que você obtém após uma nova instalação. Sem cubos, sem janelas em chamas, nada. Sobre minhas configurações no jogo: Eu sei que tudo estava funcionando perfeitamente no Ubuntu 11.10 (e mais antigo) no Heroes of Newerth com exatamente as mesmas configurações que tenho agora. Meu objetivo é conseguir isso novamente. Como você já imaginou, eu já tenho todas as atualizações mais recentes para o ubuntu instaladas (dos repositórios oficiais; nenhum outro ppas foi adicionado).
    dong

    O que exatamente eu poderia mudar nas configurações da nvidia? Não vejo o que poderia mudar para melhorar o desempenho.
    dong

    Há configurações para vsync, AA e AF e várias outras coisas, há também um controle deslizante desempenho gráfico em uma das área de configurações de, pode valer a pena olhar que @dong
    nisshh
    Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
    Licensed under cc by-sa 3.0 with attribution required.