Co zrobić, aby wydajność gry spadła w 12.04, gdy korzystasz z Unity (3D)?

9

Doświadczam ogromnego spadku wydajności gry od czasu mojej nowej instalacji Ubuntu 12.04

Mój komputer składa się z procesora Nvidia Geforce GTX 460, procesora AMD Phenom II X4 965 i 4 GB pamięci RAM i korzystam ze sterownika nvidias.

Gram głównie w Heroes of Newerth przy użyciu klienta linux. Robię to od wersji Ubuntu 9.10 i nigdy nie spotkałem się z żadnymi problemami z wydajnością podczas używania zastrzeżonego sterownika NVIDIA. Mój fps był zawsze maksymalny do limitu 60 klatek vsync.

Od czasu uruchomienia Ubuntu 12.04 uzyskuję około 30-45 fps, a gra jest ogólnie bardzo opóźniona. Wiem, że wiele osób ma problemy ze sterownikiem NVIDIA 295.40, który niestety jest domyślnie instalowany w Ubuntu 12.04. Więc ręcznie zainstalowałem najnowszą stabilną wersję 295,49, najnowszą wersję beta 302.07, a nawet starszą wersję 295.33 używaną w Ubuntu 11.10 (gdzie nigdy nie miałem żadnych problemów z wydajnością). To była strata czasu, ponieważ miałem takie same problemy z wydajnością we wszystkich 4 wersjach sterowników.

Kiedy używam Unity 2D, mój fps powraca do 60, a ogólna wydajność gry jest świetna. Mam więc tylko te problemy, gdy uruchamiam wersję Unity Ubuntu 12.04.

Próbowałem również usunąć moje foldery .config i .compiz-1 z katalogu domowego, ale mimo to wydajność gry jest nieprzyjemna.

Nie wiem, co wypróbować dalej ... Czy ktoś wie, jak mogę dalej debugować problem? Może w jaki sposób mogę dostarczyć więcej danych, aby lepiej przeanalizować problem? Może spróbujesz majstrować przy niektórych ustawieniach compiz?

Ta regresja wydajności jest naprawdę frustrująca i mam na myśli po prostu pobranie klienta Windows Heroes of Newerth i powrót do podwójnego rozruchu, ponieważ jest to po prostu niedopuszczalne.

Każda pomoc doceniona.

buc
źródło

Odpowiedzi:

3

To nie jest prawdziwe rozwiązanie, ale przynajmniej może być (miejmy nadzieję) użytecznym obejściem (poza zwykłym użyciem Unity 2D).

Przed uruchomieniem gry otwórz Nautilus (menedżer plików) i przejdź do /usr/share/application. Otwórz terminal, wpisz metacity --replacei naciśnij enter. Nie panikuj, interfejs Unity zniknie, ale taka jest moja intencja. Uruchom grę z menedżera plików (program uruchamiający grę powinien znajdować się w folderze, o którym wspomniałem). Po zakończeniu gry wpisz unity --replacew oknie terminala i naciśnij klawisz enter. Twój pulpit został teraz przywrócony do poprzedniego stanu.
Powinno to działać, ponieważ prawdopodobnie Unity działa w tle, co powoduje problemy.

Również zgłosiłbym to jako błąd. To zdecydowanie coś, co należy naprawić. Jeśli prześlesz raport o błędzie, zostaw link tutaj, aby inni ludzie, którzy doświadczają tego problemu, mogli oznaczyć go jako „wpływający na nich”, co spowoduje, że zostanie on naprawiony wcześniej.

RobinJ
źródło
Dziękuję za odpowiedź. Spróbuję tego obejścia i zgłoś się. Pewnie, że to nie jest ładne, ale przynajmniej lepsze niż wylogowanie się i ponowne logowanie za pomocą Unity 2D ... Czy możesz mi pomóc w zgłoszeniu błędu? Link do zasobu lub czegoś, w którym wyjaśniono ten proces, już bardzo by pomógł. Dzięki.
dong
Dzięki RobinJ za obejście tego problemu. Działa naprawdę dobrze i jest lepsze niż wylogowanie się i zalogowanie w unity 2d, ponieważ mogę kontynuować sesję. Otworzyłem folder za pomocą programu uruchamiającego grę, otworzyłem terminal, napisałem na maszynie metacity --replace &grę i mam cudowną wydajność, jakiej oczekuję. Kiedy skończę, piszę unity --replacei wszystko wraca do normy. Zgłoszę teraz błąd przeciwko jedności i zobaczę, co to przynosi.
dong
@dong W dokumentacji Ubuntu znajduje się przewodnik zgłaszania błędów: help.ubuntu.com/community/ReportingBugs
RobinJ
Nie jest to sam błąd Unity, ale Compiz. Gry nigdy nie działały dobrze z compiz dla mnie ...
user55822
W porządku, trochę za późno, ale oto raport o błędzie: jedność bug-998141 . Pamiętaj, aby oznaczyć błąd jako wpływający na Ciebie, jeśli dotyczy to również Ciebie. Może zyskuje trochę uwagi.
dong
1

Zawsze możesz zaktualizować sterowniki do wersji 30.22 Nvidia Beta i zobaczyć, co się stanie. Miałem ogromne problemy z wydajnością z Ubuntu 12.04 LTS i wersją Nvidia 295.59, a wersja 302.07 wydawała się naprawiać drobne rzeczy. Większość problemów rozwiązano przez zaktualizowanie najnowszego sterownika 304.22. Teraz moja wydajność GeForce jest w końcu równa Windows XP, ale wciąż występują drobne problemy z kilku aplikacji, ale sytuacja naprawdę się poprawiła. Powinieneś zawsze używać najnowszych sterowników Nvidii, nawet jeśli są one w wersji BETA, ponieważ wydaje się, że starsze stabilne nie są testowane przez zespół Nvidii na nowszych aktualizacjach Kernela i Ubuntu, powodując nieoczekiwany problem i problemy.

Możesz je uzyskać http://www.geforce.com/drivers/beta-legacy

Sterowniki 304,22 mają mnóstwo poprawek na dużą skalę, takich jak:

  • Dodano obsługę następujących układów GPU:
    • GeForce GTX 680M
      Quadro K1000M
      Quadro K2000M
  • Ulepszono funkcjonalność opcji konfiguracji IncludeImplicitMetaModes X:
  • Ujawnione MetaMody zostaną dodane dla podstawowego urządzenia wyświetlającego, nawet jeśli podczas inicjowania X używanych jest wiele urządzeń wyświetlających.
  • Ujawnione MetaMody zostaną dodane dla typowych rozdzielczości, nawet jeśli nie ma trybu z tą rozdzielczością w puli trybów urządzenia wyświetlającego.
  • Rozszerzono składnię opcji konfiguracji IncludeImplicitMetaModes, np. Aby kontrolować, które urządzenie wyświetlające jest
    używane do tworzenia niejawnych MetaModes.
  • Szczegółowe informacje można znaleźć w opisie
    opcji konfiguracji IncludeImplicitMetaModes X w README.

  • Zmodyfikowano obsługę żądań RandR 1.0 / 1.1 RRGetScreenInfo i RRSetScreenConfig (np. `Xrandr -q --q1` i` xrandr --size ... `i` xrandr --orientation ... `), tak aby działały na MetaMody. Takie zachowanie występowało w sterownikach NVIDIA X w wersji 295.xx i wcześniejszych, ale wersje 302.xx zmieniły obsługę tych żądań RandR 1.0 / 1.1, aby działały w trybach pojedynczego wyjścia RandR.
  • Dzięki powyższym zmianom w obsłudze IncludeImplicitMetaModes i RandR 1.0 / 1.1, aplikacje pełnoekranowe (np. Aplikacje oparte na SDL, Wine) powinny mieć dla nich więcej rozdzielczości i lepiej współpracować z konfiguracjami wielu monitorów.
  • Naprawiono błąd, który mógł powodować, że procesory graficzne G8x, G9x i GT2xx wyświetlały czarny ekran lub powodowały uszkodzenie po przebudzeniu z trybu zawieszenia.
  • Naprawiono kilka błędów, które mogły powodować zawieszanie się niektórych programów OpenGL podczas wywoływania fork (3).
  • Naprawiono błąd ustawień nvidia, który powodował nieprawidłowe formatowanie wyników zapytań ProbeDisplays wykonanych za pomocą opcji --display-device-string.
  • Poprawiono czas reakcji aktualizacji panelu sterowania ustawień NVIDIA, gdy wyświetlacze są podłączone w trybie hotplugged.
  • Naprawiono błąd, który powodował uszkodzenie ekranu podczas ustawiania niektórych transformacji, szczególnie podczas przesuwania transformowanego ekranu.
  • Naprawiono błąd, który powodował generowanie dodatkowych zdarzeń RandR przy pierwszym podłączeniu wyświetlacza.
  • Naprawiono błąd, który powodował odrzucenie modelin X11 z „@” w ich nazwach.
  • Dodano obsługę urządzeń oddziałowych DisplayPort 1.2, które umożliwiają podłączenie wielu wyświetlaczy do jednego złącza DisplayPort na karcie graficznej.
  • Naprawiono błąd, który powodował powolne przesyłanie większości tekstur OpenGL, gdy kontekst był powiązany z renderowaniem nakładki RGB.
  • Naprawiono błąd, który powodował, że dźwięk przez HDMI nie działał po ponownym uruchomieniu serwera X na niektórych procesorach graficznych MCP7x (IGP).
  • Zaktualizowano opcję konfiguracji X „UseDisplayDevice”, aby honorować wartość „none” na dowolnym GPU.
  • Dodano obsługę DKMS w instalatorze nvidia. Zainstalowanie modułu jądra za pomocą DKMS umożliwia automatyczną przebudowę modułu przy zmianie na inne jądro Linuksa. Zobacz tekst pomocy README i nvidia-installer lub opcję „--dkms”.
  • Dodano właściwości wyjściowe RandR _ConnectorLocation, ConnectorNumber, ConnectorType, EDID, _GUID i SignalFormat. Zobacz plik README, aby uzyskać szczegółowe informacje na temat tych właściwości.
  • Rozszerzona obsługa podstawowej mozaiki dla wszystkich konfiguracji G80 + SLI z maksymalnie trzema wyświetlaczami.
  • Naprawiono błąd, który powodował, że niektóre monitory nie mogły wybudzić się z trybu zawieszenia DPMS, gdy do jednego GPU podłączono wiele monitorów DisplayPort.
  • Usunięto sterowanie atrybutami XVideo ze strony „Ustawienia X serwera XVideo” panelu sterowania nvidia-settings. Atrybuty XVideo można skonfigurować w aplikacjach odtwarzacza XVideo lub za pomocą narzędzi takich jak xvattr.
  • Naprawiono błąd, który powodował, że wszystkie porty adaptera XVideo współużytkowały ustawienia korekcji kolorów.
  • Usunięto obsługę następujących opcji konfiguracji X:
    • SecondMonitorHorizSync
      SecondMonitorVertRefresh
    Podobna kontrola jest dostępna poprzez opcje konfiguracji NVIDIA HorizSync i VertRefresh X. Szczegółowe informacje można znaleźć w pliku README sterownika NVIDIA.
  • Naprawiono błąd, który uniemożliwiał prawidłowe działanie NVIDIA 3D Vision Pro podczas przełączania między serwerami X na różnych VT.
  • Dodano obsługę przesuwania pulpitu po zastosowaniu obrotu, odbicia lub transformacji do urządzenia wyświetlającego (przez RandR lub przez składnię MetaMode); w takim przypadku panoramowanie byłoby wcześniej ignorowane.

  • źródło
    Poważnie, powinieneś wypróbować nowe sterowniki, w końcu uzyskałem wydajność prawie taką, jaka jest w systemie Windows ...
    I zazwyczaj nie lubią za pomocą czegoś, co jest jeszcze w fazie beta na moim systemie pracuje bardzo dużo. Biorąc to pod uwagę, mogę potwierdzić, że najnowsze sterowniki beta naprawiły sporo problemów, które miałem z domyślnymi precyzyjnymi sterownikami NVIDIA 12.04. To tak, jakby wszystko się zmieniło - tak zwane „stabilne” sterowniki były dla mnie jak wersja beta, zaktualizowane sterowniki były jeszcze gorsze (np. Brak wybudzenia z zawieszenia), a najnowsze sterowniki beta (304.30) działają bezbłędnie, więc daleko. +1 ode mnie za tę pomocną i misterną odpowiedź! Dziękuję bardzo!
    FuzzyQ,
    Sterowniki 304,30 w końcu sprawiły, że mój system był prawie równy z poziomami wydajności Windows XP i Windows 7 Nvidia. Z Nvidią zarówno w Windowsie, jak i Linuksie, musisz być zawsze na bieżąco z najnowszymi osiągnięciami i zawsze otrzymywać bezpośrednio od nich sterowniki, aby uzyskać jak najlepsze wrażenia ... cieszę się, że to naprawił dla ciebie ...
    1

    EDYCJA: X jest teraz blokowany przez xscreensaver

    cześć! spróbuj tego, mam świetne wyniki, używając go, głównie do gier! Ponieważ nie będzie zarządzany przez Unity, możesz mieć świetne wyniki!

    Stworzyłem ten skrypt, który tworzy nową sesję X i uruchamia polecenie lub otwieram terminal, abyś mógł go tam uruchomić.

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

    dodaj także: menedżer ustawień konfiguracji compiz -> reguły okien -> nie zamykane okna:

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

    Zapobiegnie to zamknięciu tego terminala (użyj kombinacji klawiszy Ctrl + c, aby zamknąć drugą sesję X, a także terminal), ponieważ zamknięcie „okna” spowoduje zawieszenie bieżącej sesji X!

    Ma tę zaletę, że nie masz problemów z alt + enter na pełnym ekranie, a także problemów z pełnoekranowym Alt + TAB; możesz uruchomić z większą stabilnością dowolną grę 3D, od Urban Terror (rodzimy Linux) do gier uruchamianych z Wine! Nawet niektóre przeglądarki obsługujące gry 3D, takie jak Firefox z Quake!

    Obs .: możesz zainstalować pakiet jwm, nie jest to wymagane, ale zrobi to różnicę, jeśli będziesz musiał tam zarządzać oknami.

    PS .: można to oczywiście ulepszyć, moim planem jest dodanie konfiguracji klawiatury do opcji, ale robię to bardzo powoli;), jeśli ktoś poprawi / wyczyści to, opublikuj, żebym mógł zaktualizować mój skrypt :)

    Moc Wodnika
    źródło
    0

    Czy podczas korzystania z Unity 3D masz włączonych wiele efektów 3D i tym podobnych? (kostka, animacje pulpitu, efekty menu itp.) Mogą one obniżyć wydajność, nawet na dobrym komputerze.

    Może warto sprawdzić ustawienia nvidii, po prostu wyszukaj „nvidia” w desce rozdzielczej, a znajdziesz ją. Wiem, że musiałem trochę poprawić ustawienia NVIDII, zanim nie dostałem żadnego opóźnienia.

    Sprawdź ustawienia gry, zmień je nieco i zobacz, jak bardzo zmienia się twój fps.

    Pamiętaj, aby pobrać najnowsze aktualizacje dla Ubuntu, może to czasem rozwiązać problemy, chociaż w twoim przypadku nie oczekuję, że to pomoże.

    nisshh
    źródło
    Dziękuję za odpowiedź. Nie zmieniłem żadnych ustawień kompizowania w tej instalacji (nawet nie zainstalowałem ccsm), więc wszystko w mojej konfiguracji to standardowa Unity 3D, którą otrzymujesz po nowej instalacji. Bez kostek, bez płonących okien, nic. O moich ustawieniach w grze: wiem, że wszystko działało płynnie w Ubuntu 11.10 (i starszych) w Heroes of Newerth z dokładnie tymi samymi ustawieniami, które mam teraz. Moim celem jest osiągnięcie tego ponownie. Jak już sobie wyobrażałeś, mam już zainstalowane wszystkie najnowsze aktualizacje dla Ubuntu (z oficjalnych repozytoriów; nie dodano żadnych innych ppas).
    dong
    Co dokładnie mogę zmienić w ustawieniach NVIDIA? Nie widzę, co mógłbym zmienić, aby poprawić wydajność.
    dong
    Istnieją ustawienia dla vsync, AA i AF i różnych innych rzeczy, jest też suwak wydajności grafiki pod jednym z obszarów ustawień, warto przyjrzeć się temu @dong
    nisshh