Die Beschleunigung des Viewer-Caches

Eines der Nadelöhre in der Architektur jedes Second Life Viewers ist sein Cache auf der Festplatte. In dem Cache legt der Viewer sowohl die dargestellten Texturen als auch der Objekte einer Sim ab. Klingt erst einmal nicht dramatisch, aber das hat seine Konsequenzen, die in der Natur der Festplatte liegen.

Nun ist es so, dass die meisten Texturen abgelegt auf der Festplatte für sich alleine nicht viel Speicherplatz benötigen. Ein typischer Cache-Ordner besteht aus 10000-30000 Dateien. Es sind eben pro Sim schon sehr viele Texturen, die ihren Weg auf die Festplatte finden, und damit greift dann letzten Endes die Festplatte als Nadelöhr.

Jedes moderne Betriebssystem ist sich der Tatsache, dass der Zugriff auf die Festplatte um Längen langsamer als auf den Hauptspeicher ist, bewusst. Deswegen nutzt jedes Betriebssystem automatisch den nicht durch Programme genutzten Teil des Hauptspeichers als Schreib-Lese-Cache. Das bedeutet, dass Schreibzugriffe auf die Festplatte zeitverzögert stattfinden und vorher noch vom System optimiert werden, sowie oft benötigte Dateien möglichst lange im Hauptspeicher gehalten werden. Fordert ein Programm eine solche Datei an, dann wird erst geschaut, ob sie im Cache vorliegt und wenn ja (das nennt man dann einen Hit), wird sie direkt aus dem Cache geliefert und nicht von der Festplatte gelesen. So weit, so gut.

Was aber passiert, wenn wir den Rechner gerade erst gestartet haben, dabei noch nicht in Second Life waren und einen recht gut gefüllten Viewercache haben? Dann bleibt dem System nichts anderes übrig, als alle diese Texturen nacheinander von der Festplatte zu lesen. Und da dies schon auf einer normalen Sim, auf der man sich bewegt und ein normales Blickfeld hat, durchaus mehrere Hundert Stück sein können, dauert das dann eine Weile.

Wieso kommt dies so? Ganz einfach daher, weil hier nun die mechanischen Beschränkungen einer Festplatte greifen. Die Leistungsfähigkeit einer modernen Festplatte wird an zwei Kennziffern gemessen, nämlich der maximale Schreib-/Lesedurchsatz sowie die Zugriffszeit. Die Zugriffszeit ist dabei der Zeitraum, den die Festplatte im Schnitt benötigt, um den Schreib-Lese-Kopf auf den Anfang der gewünschten Datei zu positionieren. Diesen Vorgang nennt man übrigens auch Seek. Typischerweise wird diese Zeit in Millisekunden gemessen, und eine moderne Festplatte hat eine Zugriffszeit im Bereich von irgendwo 5-10 ms. Dabei gilt natürlich die Devise: je niedriger die Zugriffszeit, desto besser. Eine gewisse Zugriffszeit aber wird man mit Festplatten niemals unterschreiten können.

So. Was bedeutet das? Wenn wir neu einloggen auf irgendeine Sim, dann will der Viewer aus einem gut gefüllten Cache einen Haufen an Texturen von der Festplatte lesen. Das bedeutet, dass es innerhalb kurzer Zeit zu einem Haufen an Seeks kommt, die die Festplatte abarbeiten muss.

Und hier nun eine einfache Rechnung: wieviel Seeks pro Sekunde schafft eine Festplatte maximal? 1 Sekunde sind 1000 Millisekunden, also meinetwegen 1000 ms / 8 ms = 125 Seeks/Sekunde. A-ha, damit kommen wir der Sache dann nämlich schon näher. Und sollte die Festplatte meinetwegen 6 ms Zugriffszeit haben, dann kommen wir da auf 1000 ms / 6 ms = 167 Seeks/Sekunde, was auch nicht wirklich besser ist.

Wenn wir uns dann noch klar machen, dass die Festplatte meist nicht nur von Second Life alleine benutzt wird, sondern zeitgleich auch andere Programme sie benutzen, dann wird einem klar, dass der Viewer längst nicht immer die theoretisch maximal mögliche Anzahl an Seeks pro Sekunde für sich alleine zur Verfügung haben wird.

Mit anderen Worten: die Festplatte ist in der Regel für den Anwendungsfall gut gefüllter Cache, neu gestartetes System und man loggt mit dem Viewer gerade ein, das Nadelöhr. Der Prozessor könnte mehr leisten, aber er kann es eben nicht, weil er auf die Festplatte warten muss und das ist schlecht.

Wenn man den Viewer-Cache für den obigen Fallo also beschleunigen will, dann muss man dafür sorgen, dass die Anzahl an Seeks pro Sekunde erhöht wird. Klingt einfach und ist es auch eigentlich, denn man könnte ja anstelle einer Festplatte eine billige Solid State Disk (SSD) im Rechner einbauen und den Viewercache darauf speichern. SSDs sind für solche Anwendungsfälle, also Ordnerstrukturen mit tausenden, kleinen Dateien, gerade zu ideal. Eine SSD hat keinerlei bewegliche Teile und ihre Zugriffszeit ist in der Regel um den Faktor 100 besser als einer Festplatte.

Die Zugriffszeit einer SSD beim Lesen liegt so im Bereich von 0,05 bis 0,08 Millisekunden. Einfache Rechnung also: 1000 ms / 0,07 ms = 14285 Seeks/Sekunden. Und selbst günstige SSDs sind nur unwesentlich langsamer. Das bedeutet klar, dass eine SSD ganz einfach das Speichermedium der Wahl für solche Anwendungsfälle ist.

Wenn man aber keine SSD hat oder erwerben will, dann kann man dennoch seinen Rechner beschleunigen. Voraussetzung dafür ist, dass man mindestens zwei Festplatten im Rechner installiert hat. Moderne Betriebssyssteme haben die Möglichkeit, zwei Festplatten oder zwei gleich große Partitionen auf zwei verschiedenen Festplatten zu einem sog. Stripe-Set  zusammenzufassen. Die Anwendung sieht nur ein Laufwerk in der Größe der beiden Partitionen zusammengerechnet, in Wirklichkeit aber handelt es sich dabei um diese beiden Festplatten, die das Betriebssystem als eine ansteuert.

Dabei verteilt das Betriebssystem nun Schreib-/Lesezugriffe möglichst gleich zwischen beiden Festplatten, ebenso die Dateien. Dies hat den Vorteil, dass ein Stripeset umso schneller wird, auf je mehr Festplatten es angelegt ist, denn die Zahl der Seeks pro Festplatte addiert sich (d.h. ein Set auf zwei Platten erreicht theoretisch bei 8 ms Zugriffszeit je Platte eben maximal 125 * 2 = 250 Seeks/s, bei 3 Platten 125 * 3 = 375 Seeks/s usw.), allerdings bietet es absolut keine Sicherheit für die darauf befindlichen Dateien. Geht eine Platte kaputt, dann ist das komplette Set unbrauchbar.

Das aber macht im Falle des Viewercaches absolut nichts aus, da dies ohnehin nur ein temporärer Zwischenspeicher ist, der jederzeit erneuert werden kann. Sollte man also beispielsweise unter Windows mehr als eine Festplatte im Rechner verbaut haben, dann kann sich der Aufbau eines Stripesets für den Viewercache durchaus lohnen, denn es bringt einem ohne Mehrkosten einen spürbaren Leistungsgewinn.

Eine Anleitung, wie man unter Windows 7 solch eine Konfiguration aufbaut, findet sich hier. Dabei ist wie immer zu beachten, dass man besser weiß, was man tut, denn man arbeitet an der Festplattenpartitionierung und ein falscher Handgriff kann da schlimmstenfalls Datenverlust nach sich ziehen. Also Vorsicht.