Was tun gegen Leistungseinbußen in 12.04 bei Verwendung von Unity (3D)?

9

Ich habe seit meiner Neuinstallation von Ubuntu 12.04 einen enormen Rückgang der Spieleleistung festgestellt

Mein PC besteht aus einer Nvidia Geforce GTX 460, einer AMD Phenom II X4 965-CPU und 4 GB RAM. Ich verwende einen proprietären nvidias-Treiber.

Ich spiele hauptsächlich Heroes of Newerth mit ihrem Linux-Client. Ich mache das seit Ubuntu 9.10 und hatte noch nie Leistungsprobleme bei der Verwendung des proprietären NVIDIA-Treibers. Meine fps wurden immer auf die vsync Frame Cap von 60 maximiert.

Seit ich Ubuntu 12.04 starte, bekomme ich ungefähr 30-45 fps und die Spielerfahrung ist im Allgemeinen sehr verzögert. Ich weiß, dass es viele Leute gibt, die Probleme mit dem Treiber nvidias 295.40 haben, der leider standardmäßig in Ubuntu 12.04 installiert ist. Also habe ich manuell die neueste stabile Version 295.49, die neueste Beta 302.07 und sogar die ältere Version 295.33 installiert, die in Ubuntu 11.10 verwendet wurde (wo ich nie Probleme mit der Leistung hatte). Es war Zeitverschwendung, da ich bei allen 4 Treiberversionen die gleichen Leistungsprobleme hatte.

Wenn ich Unity 2D verwende, sind meine fps wieder bei 60 und die Gesamtleistung des Spiels ist großartig. Daher habe ich diese Probleme nur, wenn ich die Unity-Version von Ubuntu 12.04 ausführe.

Ich habe auch versucht, meine Ordner .config und .compiz-1 im Home-Verzeichnis zu löschen, aber die Spieleleistung ist bei Verwendung von Unity immer noch ein Chaos.

Ich weiß nicht, was ich als nächstes versuchen soll ... Weiß jemand, wie ich das Problem weiter beheben kann? Vielleicht, wie ich mehr Daten bereitstellen kann, um das Problem besser zu analysieren? Vielleicht versuchen Sie, mit einigen Compiz-Einstellungen herumzuspielen?

Diese Leistungsregression ist wirklich frustrierend und ich denke daran, nur den Windows-Client von Heroes of Newerth herunterzuladen und zum Dual-Boot zurückzukehren, da dies einfach inakzeptabel ist.

Jede Hilfe geschätzt.

dong
quelle

Antworten:

3

Es ist keine echte Lösung, aber zumindest könnte es eine (hoffentlich) nützliche Problemumgehung sein (abgesehen von der einfachen Verwendung von Unity 2D).

Bevor Sie ein Spiel starten, öffnen Sie Nautilus (den Dateimanager) und gehen Sie zu /usr/share/application. Öffnen Sie ein Terminal metacity --replace, geben Sie ein und drücken Sie die Eingabetaste. Keine Panik, die Unity-Oberfläche verschwindet, aber das ist meine Absicht. Starten Sie das Spiel über den Dateimanager (der Launcher für das Spiel sollte sich in dem von mir genannten Ordner befinden). Nachdem Sie Ihr Spiel beendet haben, geben Sie unity --replacedas Terminalfenster ein und drücken Sie die Eingabetaste. Ihr Desktop wird jetzt so wiederhergestellt, wie er war.
Dies sollte funktionieren, da wahrscheinlich Unity im Hintergrund ausgeführt wird und Probleme verursacht.

Außerdem würde ich dies als Fehler melden. Es ist definitiv etwas, das behoben werden muss. Wenn Sie einen Fehlerbericht einreichen, müssen Sie hier einen Link hinterlassen, damit andere Personen, bei denen dieses Problem auftritt, ihn als "Betroffen" markieren können. Dadurch wird er früher behoben.

RobinJ
quelle
Danke für Ihre Antwort. Ich werde diese Problemumgehung versuchen und zurückmelden. Sicher, es ist nicht schön, aber zumindest besser, als sich die ganze Zeit mit Unity 2d ab- und wieder anzumelden ... Können Sie mir helfen, den Fehler zu melden? Ein Link zu einer Ressource oder etwas, in dem der Prozess erklärt wird, würde bereits viel helfen. Vielen Dank.
Dong
Vielen Dank an RobinJ für Ihre Problemumgehung. Es funktioniert sehr gut und es ist besser, als sich mit Unity 2d ab- und wieder anzumelden, da ich meine Sitzung beibehalten kann. Ich öffnete den Ordner mit dem Game Launcher, öffnete ein Terminal, tippte metacity --replace &das Spiel ein und hatte die wundervolle Leistung, die ich erwarten würde. Wenn ich fertig bin, tippe ich unity --replaceund alles ist wieder normal. Ich werde jetzt einen Fehler gegen die Einheit einreichen und sehen, was es bringt.
Dong
@dong Es gibt eine Anleitung zum Melden von Fehlern in der Ubuntu-Dokumentation: help.ubuntu.com/community/ReportingBugs
RobinJ
Es ist kein Unity-Fehler an sich, sondern ein Compiz-Fehler. Spiele sind mit compiz für mich noch nie gut gelaufen ...
user55822
Okay, ein bisschen spät, aber hier ist der Fehlerbericht: Unity Bug-998141 . Bitte markieren Sie den Fehler als Sie betroffen, wenn Sie ebenfalls davon betroffen sind. Vielleicht bekommt es etwas Aufmerksamkeit.
Dong
1

Sie können jederzeit auf die 304.22 Nvidia Beta-Treiber aktualisieren und sehen, was passiert. Ich hatte große Leistungsprobleme mit Ubuntu 12.04 LTS und der Nvidia 295.59-Version. Die 302.07-Version schien einige kleinere Probleme zu beheben. Die meisten Probleme wurden durch Aktualisierung des neuesten 304.22-Treibers behoben. Jetzt ist meine GeForce-Leistung endlich gleich Windows XP, aber es gibt immer noch kleinere Probleme bei einigen Anwendungen, aber die Situation hat sich wirklich erheblich verbessert. Sie sollten jederzeit die neuesten Nvidia-Treiber verwenden, auch wenn diese in BETA enthalten sind, da die älteren stabilen Treiber anscheinend nicht vom Nvidia-Team auf neueren Kernel- und Ubuntu-Rolling-Updates getestet wurden, was zu unerwarteten Problemen und Problemen führte.

Sie erhalten sie unter http://www.geforce.com/drivers/beta-legacy

Die 304.22-Treiber haben Tonnen von groß angelegten Korrekturen wie:

  • Unterstützung für die folgenden GPUs hinzugefügt:
    • GeForce GTX 680M
      Quadro K1000M
      Quadro K2000M
  • Die Funktionalität der Option IncludeImplicitMetaModes Xconfiguration wurde erweitert:
  • Implizite MetaModes werden für das primäre Anzeigegerät hinzugefügt, auch wenn bei der Initialisierung von X mehrere Anzeigegeräte verwendet werden.
  • Implizite MetaModes werden für allgemeine Auflösungen hinzugefügt, auch wenn im Moduspool des Anzeigegeräts kein Modus mit dieser Auflösung vorhanden ist.
  • Die Syntax der Konfigurationsoption IncludeImplicitMetaModes wurde erweitert, um beispielsweise zu steuern, welches Anzeigegerät
    zum Erstellen impliziter MetaModes verwendet wird.
  • Weitere Informationen finden Sie in der Beschreibung der Konfigurationsoption IncludeImplicitMetaModes X
    in der README- Datei .

  • Die Behandlung der RandR 1.0 / 1.1-Anforderungen RRGetScreenInfo und RRSetScreenConfig (z. B. "xrandr -q --q1" und "xrandr --size ..." und "xrandr --orientation ...") wurde so geändert, dass sie ausgeführt werden MetaModes. Dies war das Verhalten in NVIDIA X-Treiberversionen 295.xx und früheren Versionen, aber 302.xx-Versionen haben die Behandlung dieser RandR 1.0 / 1.1-Anforderungen geändert, um mit den Modi eines einzelnen RandR-Ausgangs zu arbeiten.
  • Mit den oben genannten Änderungen an der Behandlung von IncludeImplicitMetaModes und RandR 1.0 / 1.1 sollten Vollbildanwendungen (z. B. SDL-basierte Anwendungen, Wine) über mehr Auflösungen verfügen und besser mit mehreren Monitorkonfigurationen interagieren.
  • Es wurde ein Fehler behoben, der dazu führen konnte, dass G8x-, G9x- und GT2xx-GPUs nach dem Aufwachen aus dem Suspend einen schwarzen Bildschirm oder eine Beschädigung anzeigen.
  • Es wurden mehrere Fehler behoben, die dazu führen konnten, dass einige OpenGL-Programme beim Aufrufen von fork (3) hängen blieben.
  • Es wurde ein Fehler bei den nvidia-Einstellungen behoben, der dazu führte, dass die Ergebnisse von ProbeDisplays-Abfragen, die mit der Option --display-device-string durchgeführt wurden, falsch formatiert wurden.
  • Verbesserte Reaktionsfähigkeit von Aktualisierungen des Kontrollfelds für nvidia-Einstellungen, wenn Displays im laufenden Betrieb angeschlossen sind.
  • Es wurde ein Fehler behoben, der beim Festlegen einiger Transformationen zu einer Beschädigung der Anzeige führte, insbesondere beim Schwenken einer transformierten Anzeige.
  • Es wurde ein Fehler behoben, der dazu führte, dass beim ersten Hotplugged einer Anzeige zusätzliche RandR-Ereignisse generiert wurden.
  • Es wurde ein Fehler behoben, der dazu führte, dass X11-Modelle mit '@' in ihren Namen abgelehnt wurden.
  • Unterstützung für DisplayPort 1.2-Zweiggeräte hinzugefügt, mit denen mehrere Displays an einen einzelnen DisplayPort-Anschluss auf einer Grafikkarte angeschlossen werden können.
  • Es wurde ein Fehler behoben, der dazu führte, dass die meisten OpenGL-Textur-Uploads langsam waren, wenn der Kontext beim Rendern an ein RGB-Overlay zum Zeichnen gebunden war.
  • Es wurde ein Fehler behoben, der dazu führte, dass Audio über HDMI nach dem Neustart des X-Servers auf einigen IGP-GPUs (MCP7x) nicht funktionierte.
  • Die X-Konfigurationsoption "UseDisplayDevice" wurde aktualisiert, um den Wert "none" auf einer GPU zu berücksichtigen.
  • Unterstützung für DKMS im nvidia-Installationsprogramm hinzugefügt. Durch die Installation des Kernelmoduls über DKMS kann das Modul automatisch neu erstellt werden, wenn auf einen anderen Linux-Kernel gewechselt wird. Siehe den Hilfetext zu README und nvidia-installer oder die Option "--dkms".
  • RandR-Ausgabeeigenschaften _ConnectorLocation, ConnectorNumber, ConnectorType, EDID, _GUID und SignalFormat hinzugefügt. Weitere Informationen zu diesen Eigenschaften finden Sie in der README-Datei.
  • Erweiterte Unterstützung für Base Mosaic für alle G80 + SLI-Konfigurationen mit bis zu drei Displays.
  • Es wurde ein Fehler behoben, der dazu führte, dass einige Monitore nicht aus dem DPMS-Suspend-Modus geweckt wurden, wenn mehrere DisplayPort-Monitore an eine GPU angeschlossen waren.
  • Steuerelemente für XVideo-Attribute wurden von der Seite "X Server XVideo-Einstellungen" der Systemsteuerung für nvidia-Einstellungen entfernt. XVideo-Attribute können in XVideo-Player-Anwendungen oder über Dienstprogramme wie xvattr konfiguriert werden.
  • Es wurde ein Fehler behoben, durch den alle Ports eines XVideo-Adapters die Farbkorrektureinstellungen gemeinsam nutzten.
  • Die Unterstützung für die folgenden X-Konfigurationsoptionen wurde entfernt:
    • SecondMonitorHorizSync
      SecondMonitorVertRefresh
    Eine ähnliche Steuerung ist über die Konfigurationsoptionen NVIDIA HorizSync und VertRefresh X verfügbar. Weitere Informationen finden Sie in der README-Datei des NVIDIA-Treibers.
  • Es wurde ein Fehler behoben, der verhinderte, dass NVIDIA 3D Vision Pro beim Wechsel zwischen X-Servern auf verschiedenen VTs ordnungsgemäß funktionierte.
  • Unterstützung für Desktop-Panning hinzugefügt, wenn Rotation, Reflektion oder Transformation auf ein Anzeigegerät angewendet wird (entweder über RandR oder über die MetaMode-Syntax); In diesem Fall wurde das Schwenken zuvor ignoriert.

  • quelle
    Im Ernst, Sie sollten die neuen Treiber ausprobieren, haben endlich die Leistung fast so, wie sie in Windows ist ...
    Ich mag nicht in der Regel etwas verwenden , das auf meinem Arbeitssystem noch in der Beta - Phase ist sehr viel. Abgesehen davon kann ich bestätigen, dass die neuesten Beta-Treiber eine ganze Reihe von Problemen behoben haben, die ich mit standardmäßigen präzisen 12.04-proprietären NVIDIA-Treibern hatte. Es ist, als hätte sich das Ganze umgedreht - die sogenannten "stabilen" Treiber waren für mich wie Beta-Erfahrung, die aktualisierten Treiber waren noch schlechter (z. B. kein Wake-from-Suspend) und die neuesten Beta-Treiber (304.30) funktionieren einwandfrei weit. +1 von mir für diese hilfreiche und ausführliche Antwort! Vielen Dank!
    FuzzyQ
    Die 304.30-Treiber haben mein System endlich auf eine nahezu enge Parität mit den Leistungsstufen von Windows XP und Windows 7 Nvidia gebracht. Mit Nvidia unter Windows und Linux müssen Sie immer auf dem
    1

    BEARBEITEN: X ist jetzt über xscreensaver abschließbar

    Hallo! Versuchen Sie dies, ich habe großartige Ergebnisse damit, hauptsächlich für Spiele! Da es nicht von Unity verwaltet wird, können Sie auch großartige Ergebnisse erzielen!

    Ich habe dieses Skript erstellt, das eine neue X-Sitzung erstellt und einen Befehl ausführt oder ein Terminal öffnet, damit Sie es dort ausführen können.

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

    Fügen Sie dies außerdem hinzu unter: compiz config settings manager -> Fensterregeln -> nicht schließbare Fenster:

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

    Dies verhindert, dass Sie dieses Terminal schließen (verwenden Sie Strg + C, um die andere X-Sitzung und auch das Terminal zu schließen), denn wenn Sie "das Fenster" schließen, wird Ihre aktuelle X-Sitzung eingefroren!

    Es hat den Vorteil, dass Sie keine Alt + Eingabe von Vollbildproblemen haben, auch keine Alt + TAB-Vollbildprobleme; Sie können jedes 3D-Spiel mit mehr Stabilität ausführen, von Urban Terror (Linux native) bis zu Spielen mit Wine! Sogar einige Browser, die 3D-Spiele wie Firefox mit Quake ausführen!

    Hinweis: Möglicherweise möchten Sie das JWM-Paket installieren, das nicht erforderlich ist, aber einen Unterschied macht, wenn Sie dort eine Fensterverwaltung durchführen müssen.

    PS.: Es kann natürlich verbessert werden, mein Plan ist es, das Tastatur-Setup zu einer Option hinzuzufügen, aber ich mache es sehr langsam;), wenn jemand es verbessert / bereinigt, poste, damit ich mein Skript aktualisieren kann :)

    Wassermann-Kraft
    quelle
    0

    Haben Sie bei Verwendung von Unity 3D viele 3D-Effekte und ähnliches aktiviert? (Cube, Desktop-Animationen, Menüeffekte usw.) Diese können die Leistung selbst auf einem guten Computer verringern.

    Es kann sich lohnen, Ihre nvidia-Einstellungen zu überprüfen. Suchen Sie einfach im Dash nach 'nvidia' und Sie werden es finden. Ich weiß, dass ich die NVIDIA-Einstellungen ziemlich anpassen musste, bevor ich keine Verzögerung bekam.

    Überprüfen Sie Ihre Einstellungen im Spiel, ändern Sie sie ein wenig und sehen Sie, wie stark sich Ihre FPS ändern.

    Stellen Sie sicher, dass Sie die neuesten Updates für Ubuntu herunterladen. Dies kann manchmal Probleme lösen, obwohl ich in Ihrem Fall nicht erwarte, dass dies helfen würde.

    nisshh
    quelle
    Danke für Ihre Antwort. Ich habe bei dieser Installation keine Compiz-Einstellungen geändert (ich habe noch nicht einmal ccsm installiert), sodass alles an meinem Setup Unity 3D ist, das Sie nach einer Neuinstallation erhalten. Keine Würfel, keine brennenden Fenster, nichts. Über meine Ingame-Einstellungen: Ich weiß, dass in Ubuntu 11.10 (und älter) in Heroes of Newerth mit genau den gleichen Einstellungen, die ich jetzt habe, alles reibungslos lief. Mein Ziel ist es, dies wieder zu erreichen. Wie Sie sich bereits vorgestellt haben, habe ich bereits die neuesten Updates für Ubuntu installiert (aus den offiziellen Repositories; keine weiteren ppas hinzugefügt).
    Dong
    Was genau könnte ich in den NVIDIA-Einstellungen ändern? Ich sehe nicht, was ich ändern könnte, um die Leistung zu verbessern.
    Dong
    Es gibt Einstellungen für Vsync, AA und AF und verschiedene andere Dinge, gibt es auch eine Grafikleistung Schieberegler unter einem der Einstellungen Bereich, im Wert zu dieser @dong sucht sein kann
    nisshh