Weil es nur eine Frage der Zeit ist bis das hier Allgemeinwissen wird, schließlich habe ich mich mit dem Problem schon ein paar Tage beschäftigt, wollte ich damit verantwortungsvoll umgehen weil ich in diesem Themengebiet sehr versiert bin.
Bekommst du Abstürze durch unzureichenden Grafik-Speicher?
Was ist mit wiederholten Abstürzen zum Desktop nachdem sich zuvor alles verlangsamt hat und träge angefühlt hat?Das sind offensichtliche Zeichen, dass dir der Virtuelle Adressspeicher ausgeht.
Das kann sogar nach einigen Schlachten passieren oder einfach wiederholt weil dir dieser Speicher ausgeht.
Ich werde diesen Artikel in ganz einfachen Worten verfassen mit ein wenig Erklärung, ihr könntet anfangen über dieses Thema zu recherchieren und würdet wohl eine Woche brauchen um ein tieferes Verständnis für die Sache zu bekommen, ich werde die Sache also möglichst einfach machen schließlich habe ich ja die Arbeit für euch getan .
Hintergrund (erklärt das Problem)Was ist Virtual Addressing?Virtueller Adresspeicher ist eine Menge numerischer Addressen die Windows benutzt um die Speichernutzung zu protokollieren. Es hat nichts damit zu tun wie viel RAM oder Virtuellen Speicher du besitzt. Es gibt schlicht und ergreifend nur eine bestimmte Anzahl von Addressen die für 32-bit Anwendungen wie Empire [oder Shogun 2 Anm. des Übersetzers] verfügbar sind, und das ist 2GB. Dieser Speicher für die Anwendungen wird nicht davon beeinflusst ob du ein 32 oder 64-bit Betriebssystem hast. Ein 32-bit Betriebssystem hat 2GB “Benutzer” Adresspeicher, dazu kommen 2GB die normalerweise „Kernel“ Addressspeicher genannt werden. Hinzu kommt und unabhängig hiervon, das eine 32-bit Anwendung auf 2GB des Adressspeichers beschränkt ist, wegen der Festlegung durch den „Binary Header“(das gilt für 32-bit und 64-bit Betriebssysteme gleichermaßen). Man kann die Auslastung dieses Speichers nicht mit Programmen wie Task Manager verfolgen.
Warum ist der eine betroffen und der andere nicht?Jeder Computer braucht unterschiedliche Mengen an virtuellem Adressspeicher beim Start. Das wird von vielen Dingen beeinflusst. Große Beeinflussung der Tatsache wie viel Speicher belegt wird, der dadurch nicht für andere Anwendungen verfügbar ist, üben Sachen wie Vista, viel Grafikkarten-Speicher, mehrere Geräte deren Treiber Addressen reservieren, etc aus. Diese reservierten Addressen können in dem jeweiligen Geräte-Manager eingesehen werden.
Warum ist Empire [od. Shogun 2, Anm.] davon betroffen?Relativ einfach: Empire nutzt viel Speicher und wir leben immer noch in einer Welt die von 32-bit Anwendungen dominiert wird. Addressen sind limitiert und Vista oder Grafikkarten mit viel Speicher machen den Addressspeicher rar. CA wandte weder 64-bit Coding Praktiken an noch ünterstützen sie 64-bit von Anfang an, deswegen sind 64-bit Betriebssysteme auch betroffen.
Das ist hauptsächlich ein 32-bit Problem, weil die Daten der Spiele wachsen und damit auch die Fußstapfen die die Spiele in dem Speicher hinterlassen. Desweiteren haben Personen mit viel Video-Speicher (>768) meistens keine Idee, dass sie ihren verfügbaren Addressspeicher verringern. Das ist auch der Grund warum 1GB Video-RAM Grafikkarten weniger gewöhnlich sind als man vielleicht denkt, schließlich können Entwickler den ganzen Videospeicher gar nicht vollständig nutzen denn das System kann nur mit einer bestimmten Menge davon umgehen.
Diese Serie aus drei Teilen: "Messy Transition" bei Anandtech wurde ins leben gerufen von einer Studie über einen Addressspeicher Workaround den ich für Supreme Commadner gemacht habe. Dieser ist sehr änhlich zu dem den ich hier machen will und es ist eine großartige Serie für jedermann bei der viel ans Tageslicht kam um das Problem zu erklären.
Part 1 -
http://www.anandtech.com/gadgets/showdoc.aspx?i=3034Part 2 -
http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=3044Part 3 -
http://www.anandtech.com/systems/showdoc.aspx?i=3060Was kann der Entwickler tun?Zwei Sachen, hauptsächlich. Den Speicher den das Programm benötigt verringern, das ist warscheinlich das erste Ziel, aber das könnte noch nicht genug sein für Leute der Computer viel Speicher am Start für die Grafikkarte verbrauchen. Zweitens, sie könnten eine 64-bit Version des Spiels machen, das würde 64-bit Betriebssystem Nutzern erlauben das Problem zu umgehen. 32-bit Betriebssystem-Nutzer können ihren virtuellen Addressspeicher erweitern, warscheinlich nicht der beste Weg, aber der beste bis die Entwickler den Speicher- verbrauch des Spiels drastisch reduzieren. Das der Code des Programms auf 64-bit umgeschrieben wird ist unwarscheinlich weil das sehr viel Arbeit für die Entwickler bedeutet und viel einfacher und sauberer aufzuabauen wäre wenn es von Beginn an unterstützt würde. CA hat viele Bugs die sie beheben müssen die auch Geld und Ressourcen kosten, deswegen bezweifle ich letztere [die 64-bit Version, Anm.] Option. In näherer Zukunft wird das Workaround helfen bis wirklicher Fortschritt gemacht wird, denn das 32-bit Limit auszureizen ist nicht schwer und viele Spiele tun dies.
EDIT: Mit dem Patch am 29.04.2009 kam eine 64-bit Version der Empire.exe [nicht Shogun 2!, Anm.].
DAS WORKAROUND (Details)Ich stelle ein ganz ähnliches Workaround zur Verfügung wie schon für Supreme Commader.
[Referenz]Was macht das Workaround?Es macht zwei Sachen die einander brauchen um zu funktionieren. Für ein 32-bit Betriebssystem müssen wir diesem sagen das es meher Adressspeicher verwenden kann, 2.5GB werden es sein, dabei bleiben 1.5 GB für den „Kernel“ übrig. Außerdem müssen wir der Empire.exe sagen, dass sie mehr Speicher verwenden kann als 2GB [Anm: Das ist bei Shogun 2 nicht nötig!]. Nutzer eines 64-bit Betriebssystems müssen nichts machen.
Wobei hilft es?Es ist nicht die Lösung für alle Abstürze. Es beschäftigt sich hauptsächlich mit dem Absturz zum Desktop der von zu wenig virtuellem Adressspeicher verursacht wird. Weil die Addressen auf jedem Computer anders zusammengestellt warden dieser Absturz an verschiedenen Orten und Zeiten im Spiel passieren. Es kann passieren wenn du eine Karte lädst, im Menü bist oder auf einen Zug der KI wartest. Wenn du diesen Fix ausprobierst folge den Anweisungen genau, er wird nicht helfen wenn dein Programm wegen etwas anderem chrasht.
Wie mache ich es?Folge den Anweisungen genau. Ich habe bemerkt das Leute manche Schritte überspringen oder einfach nicht genau lessen, dann wird es nicht funktionieren! Es ist gar nicht so kompliziert wie es klingt, ich bringe euch da schon durch.
DEN WORKAROUND VORNEHMENVorraussetzungenDie einzige wirkliche Vorraussetzung: Du must mindestens 2GB RAM haben. Du brauchst nicht mehr als das, auch wenn wir den Computer erlauben bis zu 2.5 GB Addressspeicher zu verwenden. Folgt einfach den folgenden Anweisungen, ein bisschen Vertrautheit mit dem Arbeiten in Windows-Dateien ist vonnöten. Versichere dich dass du mindesten Vista SP1 verwendest. Wenn nicht, du brauchst diesen Hotfix der einige Probleme mit dem Adressspeicher in Vista behebt -
http://support.microsoft.com/kb/940105Das ist es bis hier hin, nun folge den Schritten 1-3.
1) Ermögliche dem Betriebssystem mehr als 2 GB Adressspeicher zu nutzen, und zwar eine userva von 2.5 GB (das brauchen nur 32.bit Betriebssystem Nutzer zu machen): Ich nutze absichtlich nur 2500 userva aus einem bestimmten Grund, nämlich das der „Kernel“ noch jede Menge Platz hat und mehr als 2.5 GB wird auch gar nicht benötigt.
Alle 64-bit Betriebssysteme:
Nichts zu tun. Fahre bei Schritt zwei fort. 64-bit Betriebssysteme welche 32-bit Anwendungen steuern geben diesen auch nur 2GB Speicher.
XP 32-bit* Finde Boot.ini , meistens zu finden in C: .
Wenn du es nicht sehen kannst hast du warscheinlich die Windows System Dateien versteckt
* Rechtsklicke auf boot.ini und wähle [Eigenschaften]. Demarkiere “nur lesen”
* Öffne boot.ini durch Doppelklick.
* Unter dem Abschnitt [operating systems]([Betriebssystem]) finde eine Zeile sie sagt: "multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP Professional...". Deine sieht warscheinlich ein wenig anders aus. Mache ein Backup der Zeile, so dass du für den Fall das du einen Fehler machst dein System nicht davon abhälst zu starten. Ziehe deine Maus über die gesamte Zeile, dann Rechtsklick, wähle [Kopieren]. Direkt unter der Zeile die du gerade kopiert hast: mache einen Rechtsklick und wähle [Einfügen]. Du solltest nun zwei Zeilen haben die exakt gleich aussehen.
* Verändere die gerade kopierte (die untere der beiden) Zeile an ihrem Ende mit folgendem. Mache ein Leerzeichen am Ende der Linie und dann gib das ein, ohne die Anführungszeichen
"/3GB /USERVA=2500"
* In dem unteren Start-Eintrag den du gerade gemacht hast, finde den Namen des Betriebssystem und verändere ihn in so etwas wie "Windows XP 3GB", dadurch kannst du beim Start auswählen was du starten möchtest.
* Schließe und speichere die boot.ini.
* Rechtsklicke auf boot.ini, klicke [Eigenschaften], markiere nur lesen (read only).
Vista 32-bit, Win 7 32-bit* In Vista gehe ins Start-Menü. Gehe zu Extras. Finde das Symbol für den Windows Befehlsinterpret [Anm. des Übersetzers: Andere Möglichkeit (v.a. bei Windows 7) wäre: Ausführen//Suchen cmd.exe]. Rechtsklicke auf das Symbol und wähle als Administrator ausführen.
* In diesem Fenster schreibe genaus das: bcdedit /set increaseuserva 2500. Dann drücke [Enter].
* Vergewissere dich das du eine Nachricht bekommst die bestätigt das die Veränderung gemacht wurde. Um dich zu versichern kannst du auch einfach nochmal bcdedit eingeben, du solltest den gerade gemachten Eintrag dort aufgeführt finden[Anm. Dann kommt eine lange Liste, ganz unten sollte stehen „increaseuserva 2500“].
* Schließe das Programm. Du hast Vista/Win7 gerade angewiesen den virtuellen Adressspeicher auf 2500 MB anzuheben.
* Veränderung treten erst in Kraft mit einem Neustart, aber neustarte noch nicht.
ZUSAMMENFASSUNGWir haben den vituellen Addressspeicher in XP/Vista/Win7 auf 2500 MB erweitert, deswegen können Anwendungen nun bis zu 2,5 GB verwenden wenn sie als „Large Address Aware“ gesetzt sind. Manche 32-bit Spiele sind so gesetzt, Empire ist es nicht.
2) Neustarte deinen Computer jetzt, damit Windows den userva auf 2500 setzen kann, das passiert nur nach einem (Neu-)Start.
Wenn du einen Schritt übersprungen hast dann wird es nicht funktionieren. Hast du deinen PC neugestartet bist du fertig zum loslegen, starte das Spiel also auf dem normalen Weg!
UM DIE ÄNDERUNGEN RÜCKGÄNGIG ZU MACHENFür XP 32-bit lösche einfach die Zeile aus deiner boot.ini.
Für Visat/Win7 benutze wieder das Windows Befehlszeilenprogramm und gib ein:
bcdedit /deletevalue increaseuserva. Das löscht den Eintrag.
Neustarte dann und alles ist wieder normal.
DAS IST KEIN FIXIst es einfach nicht. Wir sollten weiter Druck auf die Entwickler machen damit sie dieses Problem in den Griff kriegen. Das ist die schlechte Seite von Workarounds aus der Community, auch wenn sie Leuten helfen das Spiel zu spielen (was natürlich wichtig ist), das Problem ist das die Entwickler dann aufhören von dem Problem zu hören und somit denken das Problem ist nicht so groß. Fahrt fort mit dem beschreiben der Probleme und CTD's die du hast in den Offiziellen Foren. Ein solcher Thread existiert in den Offiziellen Foren hier:
http://shoguntotalwar.yuku.com/topic/49357MÖGLICH PROBLEME MIT DEM WORKAROUNDEs gibt zwei Nebeneffekte auf die man achten sollte.
1) Ein sehr geringer Anteil an Computern könnte nach dem Workaround Probleme haben zu starten wegen irgendwelcher schlecht geschriebener Treiber, die höhere Addressen als 2GB verwenden. Um das Problem zu lösen habt ihr bei XP die zweite Start-Option die erscheint. Mit Vista/Win7 starte im Abgesicherten Modus und folge den Schritten oben um den Eintrag zu löschen. Dieses Workaround wird nicht funktionieren wenn du einen schlechten Treiber hast der den Windows Start behindert.
ANDERE REFERENZEN (für den Fall diese Wall of Text war nicht genug)
Windows Speicher Limits in 32-bit und 64-bit:
http://msdn.microsoft.com/en-us/library/aa366778.aspxEin wenig über “Memory Addressing” und 3GB Switch:
http://www.microsoft.com/whdc/system/pl ... AEmem.mspxDanke and TheSpaceHamster/TheCookieMonster für das testen und das starten eines Threads in den Offiziellen technischen Support Foren der meine Aufmerksamkeit erregte.