Wie Photoshop die Arbeit mit Dateien gelöst hat, die nicht in den Speicher passen

Mit der Webversion der legendären Photoshop-App konnten Nutzer dank Adobe selbst die größten Dateien bearbeiten.

Einleitung

Dieser Artikel ist auch in Form eines Videos verfügbar.

2021 brachte Adobe zusammen mit der Chrome-Entwicklung eine Version von Photoshop im Web auf den Markt. Die Software nutzt WebAssembly auf innovative Weise mit Funktionen wie SIMD, Hochleistungsspeicher im privaten Ursprungsdateisystem, dem P3-Farbraum für Canvas und Webkomponenten mit Lit. In diesem Artikel möchten wir uns darauf konzentrieren, wie die Entwicklung von Adobe Photoshop die Arbeit mit Dateien gelöst hat, die größer sind, als in den Speicher passen. Und im Fall von WebAssembly, wie Photoshop mit Dateien funktioniert, die größer als der 32-Bit-Adressbereich von wasm32 sind

In der Photoshop App wird ein Bild des Project Fugu-Logos bearbeitet.

Das Problem

Das Öffnen einer Datei zur Bearbeitung erfordert viel Arbeitsspeicher, deutlich mehr als das Öffnen einer Datei zum Anzeigen. Die in Photoshop bearbeiteten Dateien erfordern häufig mehr Arbeitsspeicher, als auf dem Gerät verfügbar ist. Dies liegt an den vielen Funktionen der Software, der Art des digitalen Designs und der Bearbeitung, für die sie verwendet werden, und der Funktionen der Nutzergeräte.

Im Photoshop-Dateiformat werden Daten mit einer verlustfreien Komprimierung gespeichert. Beim Lesen einer Datei oder eines Dokuments werden alle Bilddaten dekomprimiert, um eine effizientere Verarbeitung zu ermöglichen. Daher kann der erforderliche Arbeitsspeicher um ein Vielfaches höher sein als der Speicherplatz, den ein Dokument auf der Festplatte oder im Cloud-Speicher belegt.

Photoshop unterstützt einen sehr langen Rückgängig-Verlauf. Viele Vorgänge in Photoshop werden als destruktive Vorgänge bezeichnet. Das heißt, wenn Sie eine Änderung vornehmen, z. B. mit einem Pinsel, erhalten Sie neue Pixeldaten, die genauso groß sein können wie die ursprünglichen Pixeldaten. Wenn Sie diese Bearbeitungen in einer langen Bearbeitungssitzung vornehmen, werden große Mengen an Pixeldaten erzeugt, die aufbewahrt werden müssen, um Rückgängig-Vorgänge zu unterstützen. Somit kann der Verlauf auf mehrere Hundert Megabyte oder viele Gigabyte an Daten anwachsen.

Auf Geräten und Plattformen, ob Desktop-Computer, Mobilgeräte oder Browser, wird der Arbeitsspeicher verwaltet. Einige bieten mehr Speicher für Anwendungen als andere. Die Größe des Arbeitsspeichers variiert auch von Gerät zu Gerät. Dies ist der Fall, wenn Sie einen neuen Computer oder ein neues Gerät bestellen und die gewünschte Größe des Random-Access Memory (RAM) angeben. Viele dieser Plattformen unterstützen auch virtuellen Speicher, sodass eine Anwendung mehr Speicher nutzen kann, als physisch verfügbar ist. Diese Unterstützung variiert je nach Betriebssystem und Laufzeit. Im Fall von WebAssembly ist der Zugriff auf oder die Nutzung durch Anwendungen möglicherweise nicht möglich. Darüber hinaus haben moderne virtuelle Systeme Obergrenzen, die durch die Photoshop-Anforderungen leicht überschritten werden.

Idealerweise belegen Anwendungen so viel Speicher, wie sie benötigen. Auf diese Weise können sie ihren Nutzern die beste Leistung bieten. Wenn sie jedoch zu viel Arbeitsspeicher verbrauchen, können sie von der Laufzeitplattform benachteiligt werden oder zu wenig Arbeitsspeicher führen, was zu Fehlern führt.

Zur Erinnerung: Das ursprüngliche Problem, das Photoshop lösen musste, war das Bearbeiten von Dateien mit Druckauflösung in frühen Versionen von macOS, d. h. nur 1 MB für das Betriebssystem und alle Anwendungen. Ein ganzseitiges Bild mit 300 dpi in CMYK ist in unkomprimiertem Zustand ca. 32 MB groß.

Die Lösung

Um das Problem zu lösen, dass bei einer App der verfügbare RAM-Speicher überschritten wird, implementierte Photoshop ein virtuelles Software-Speichersystem (VM). Photoshop verwendet die VM, um Dokumentdaten, insbesondere Bilddaten, den gesamten Rückgängig-Verlauf und -Zustand sowie den Arbeitsspeicher für den aktuellen Befehl zu verwalten. Es wird auch verwendet, um große Datenblöcke im Cache zu speichern, z. B. Brush-Beschreibungen, sodass sie nur einmal vom Laufwerk serialisiert werden müssen.

Als Beispiel für einen der von der VM verwalteten Aspekte: Bilddaten werden mithilfe einer mipmap-Darstellung gespeichert. Dabei handelt es sich um einen pyramidenförmigen Satz von Kacheln, der Bilddaten mit niedriger bis hoher Auflösung liefert. Auf diese Weise kann Photoshop mit den entsprechenden Auflösungsdaten arbeiten, um beim Heranzoomen oder Betrachten einer Vorschau schneller Ergebnisse zu liefern als herausgezoomt.

Beispiel für die Speicherung von Mipmap-Bildern: Das Hauptbild auf der linken Seite wird von gefilterten Kopien mit verringerter Größe begleitet.

Während der Initialisierung der Anwendung ermittelt Photoshop, wie viel RAM verfügbar ist. Es reserviert einen Teil für die Daten, die in der VM gespeichert werden sollen. Der verbleibende RAM steht für andere Anwendungen über die standardmäßige C++-Laufzeitbibliothek zur Verfügung. Der VM-Arbeitsspeicher ist in Seiten unterteilt. Jede Seite ist in der Regel ein Vielfaches der Hardwareseitengröße für das Gerät. Bei der Verwendung für Bilddaten wird der Speicher als Kacheln bezeichnet. Eine Kachel ist ein quadratischer Bereich mit Pixeln einer einzelnen Ebene mit geometrischen Grenzen. Eine Tile verbraucht eine oder mehrere Seiten.

Photoshop erstellt eine oder mehrere Scratch-Dateien, um VM-Seiten auf Festplatten zu sichern. Diese Scratch-Dateien werden im privaten Ursprungsdateisystem gespeichert. Der Screenshot zeigt eine beispielhafte Dateihierarchie einer solchen Scratch-Datei (gelb hervorgehoben) und anderer Dateien während einer Bildbearbeitungssitzung. Jede Scratch-Datei kann viele VM-Seiten enthalten. Wenn die VM mehr Sicherungen benötigt, werden zusätzliche Scratch-Dateien erstellt. Wenn Seiten freigegeben werden, kann ihr Speicherplatz in einer Scratch-Datei für neue Seiten wiederverwendet werden.

Die Hierarchie der ursprünglichen Dateien des privaten Dateisystems von Photoshop mit der Chrome-Erweiterung „OPFS Explorer“ untersuchen

Bei der Verarbeitung von Bilddaten iteriert Photoshop über die Kacheln und führt Pixelberechnungen durch. Jede Berechnung kann sich auf mehrere Kacheln beziehen. Die VM stellt sicher, dass sich die Quell- und Ziel-Tiles für die aktuelle Iteration im Arbeitsspeicher befinden, indem sie nach Bedarf aus neuen Dateien geladen werden. Gleichzeitig werden Seiten in die Scratch-Dateien geleert, um Speicherplatz freizugeben.

Ergebnisse

Obwohl die konkreten Implementierungsdetails der VM weit über den Rahmen dieses Dokuments hinausgehen würden (und auch proprietär von Adobe sind), haben wir Ihnen dank der allgemeinen Beschreibung der Lösung klar gemacht, wie Photoshop mit großen Dateien umgehen kann. Das private Ursprungsdateisystem mit seinem leistungsstarken Lese- und Schreibzugriff auf Dateien ist eine wichtige Komponente der Lösung.

Danksagungen

Dieser Blogbeitrag wurde von Oliver Unter Ecker und Rachel Andrew gelesen. Besonderer Dank geht an Russell Williams für seine hervorragende Dokumentation auf der Photoshop-VM.