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

Hier erfährst du, wie Adobe es geschafft hat, Nutzern die Bearbeitung selbst der größten Dateien in der Webversion der kultigen Photoshop App zu ermöglichen.

Nabeel Al-Shamma
Nabeel Al-Shamma

Einführung

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

Im Jahr 2021 brachte Adobe zusammen mit Chrome-Entwicklern eine Version von Photoshop im Web. Die Software nutzt innovative Funktionen von WebAssembly 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 das Adobe Photoshop Engineering-Team das Arbeiten mit Dateien gelöst hat, die größer sind, als in den Speicher passen. Und im Fall von WebAssembly funktioniert Photoshop mit Dateien, die größer sind als der 32-Bit-Adressraum von wasm32.

Die Photoshop App während der Bearbeitung eines Bildes des Project Fugu-Logos

Das Problem

Das Öffnen einer Datei zum Bearbeiten erfordert viel Speicherplatz – deutlich mehr als das Öffnen einer Datei zum Anzeigen. Die in Photoshop bearbeiteten Dateien benötigen häufig mehr Arbeitsspeicher, als der Nutzer auf seinem Gerät zur Verfügung hat. Dies ist an den vielen Funktionen der Software, den Arten des digitalen Designs und der Bearbeitung, für die sie verwendet wird, und den Funktionen der Nutzergeräte geben.

Im Photoshop-Dateiformat werden Daten verlustfrei komprimiert. Beim Lesen einer Datei oder eines Dokuments werden alle Bilddaten für eine effizientere Verarbeitung dekomprimiert. Infolgedessen kann der erforderliche Arbeitsspeicher um ein Vielfaches größer sein als der Speicherplatz, den ein Dokument auf dem Laufwerk oder im Cloud-Speicher belegt.

Photoshop unterstützt einen sehr langen Verlauf der Rückgängigmachungen. Viele Vorgänge in Photoshop sind sogenannte „destruktive Operationen“. 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. Die Durchführung dieser Bearbeitungen in einer langen Bearbeitungssitzung führt zu großen Mengen an Pixeldaten, die gespeichert werden müssen, um Rückgängig-Vorgänge zu unterstützen. Daher kann sich der Datenverlauf auf mehrere Hundert Megabyte oder viele Gigabyte an Daten anwachsen.

Geräte und Plattformen – Desktop-Computer, Mobilgeräte oder Browser – verwalten den Arbeitsspeicher. Einige stellen Anwendungen großzügigeren Speicher als andere zur Verfügung. Die Größe des Arbeitsspeichers variiert auch von Gerät zu Gerät, wie Sie wissen, wenn Sie einen neuen Computer oder ein neues Gerät bestellen und die Größe des gewünschten Random-Access Memorys (RAM) angeben. Viele dieser Plattformen unterstützen auch virtuellen Arbeitsspeicher, sodass eine Anwendung mehr Arbeitsspeicher nutzen kann, als physisch verfügbar ist. Diese Unterstützung variiert je nach Betriebssystem und Laufzeit, da WebAssembly unter Umständen für Anwendungen nicht leicht zugänglich ist oder nicht verwendet werden kann. Hinzu kommt, dass moderne virtuelle Systeme Obergrenzen haben, die von den Photoshop-Anforderungen leicht übertroffen werden können.

Idealerweise nutzen Anwendungen so viel Arbeitsspeicher, wie sie benötigen. So können sie ihren Nutzern in der Regel die bestmögliche Leistung bieten. Wenn sie jedoch zu viel Arbeitsspeicher verwenden, kann sie von der Laufzeitplattform benachteiligt werden oder nicht genügend Arbeitsspeicher zur Folge haben, was zu Fehlern führen kann.

Zur Erinnerung: Das ursprüngliche Problem, das Photoshop lösen musste, war die Bearbeitung von Dateien mit der Druckauflösung in frühen macOS-Versionen. Diese beliefen sich auf nur 1 MB für das Betriebssystem und alle Anwendungen. Ein ganzseitiges 300-dpi-Bild in CMYK hat unkomprimiert ungefähr 32 MB.

Die Lösung

Um das Problem zu lösen, dass Apps den verfügbaren Arbeitsspeicher überschreiten, implementierte Photoshop ein virtuelles Software-Speichersystem (VM). Photoshop verwendet seine VM, um Dokumentdaten, insbesondere Bilddaten, den Verlauf und Status der Rückgängigmachung sowie den Arbeitsspeicher für den aktuellen Befehl zu verwalten. Es wird auch verwendet, um große Datenblöcke wie Pinselbeschreibungen im Cache zu speichern, sodass sie nur einmal von der Festplatte serialisiert werden müssen.

Als Beispiel für einen von der VM verwalteten Aspekt werden Bilddaten mithilfe einer mipmap-Darstellung gespeichert. Dabei handelt es sich um eine Pyramidengruppe, die Bilddaten in einem Bereich von niedrigen bis hohen Auflösungen liefert. So kann Photoshop mit den Daten der entsprechenden Auflösung arbeiten, um beim Heranzoomen oder Betrachten einer Vorschau eine schnellere Reaktion statt zum Verkleinern zu erhalten.

Beispiel für Mipmap-Bildspeicher: Das Hauptbild auf der linken Seite enthält gefilterte Kopien mit reduzierter Größe.

Während der Initialisierung der Anwendung ermittelt Photoshop, wie viel RAM verfügbar ist. Es reserviert einen Teil für Daten, die in der VM gespeichert werden sollen. Der verbleibende RAM steht über die C++-Standardlaufzeitbibliothek für andere Anwendungen zur Verfügung. Der VM-Arbeitsspeicher ist in Seiten unterteilt. Normalerweise ist jede Seite ein Vielfaches der Hardwareseitengröße des Geräts. Bei der Verwendung für Bilddaten wird der Speicher als Kacheln bezeichnet. Eine Kachel ist eine quadratische Fläche von Pixeln einer einzelnen Ebene, einschließlich geometrischer Grenzen. Eine Kachel umfasst eine oder mehrere Seiten.

Photoshop erstellt eine oder mehrere Scratch-Dateien, um eine laufwerkbasierte Sicherung für VM-Seiten zu bieten. Diese Scratch-Dateien werden im Origin Private File System gespeichert. Der Screenshot zeigt eine beispielhafte Dateihierarchie einer solchen Scratch-Datei (gelb markiert) und anderer Dateien während einer Bildbearbeitungssitzung. Jede Scratch-Datei kann viele VM-Seiten enthalten. Wenn die VM mehr Sicherung benötigt, erstellt sie zusätzliche Scratch-Dateien. Wenn Seiten freigegeben werden, kann ihr Platz in einer Scratch-Datei für neue Seiten wiederverwendet werden.

Untersuchung der ursprünglichen privaten Dateisystem-Dateisystemhierarchie von Photoshop mit der Chrome-Erweiterung OPFS Explorer.

Bei der Verarbeitung von Bilddaten iteriert Photoshop über Kacheln und führt Pixelberechnungen durch. Jede Berechnung kann sich auf mehrere Kacheln beziehen. Die VM stellt sicher, dass sich die Quell- und Zielkacheln für die aktuelle Iteration im Arbeitsspeicher befinden, und lädt sie nach Bedarf von Grund auf neu. Gleichzeitig können Seiten in die Scratch-Dateien geleert werden, um Platz im Speicher zu schaffen.

Ergebnisse

Während die konkreten Implementierungsdetails der VM weit über den Umfang dieses Dokuments hinausgehen und auch Adobe gehören, haben wir Ihnen mit der allgemeinen Beschreibung der Lösung die Möglichkeit gegeben, zu verstehen, 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 Blogpost wurde von Oliver Unter Ecker und Rachel Andrew geprüft. Unser besonderer Dank geht an Russell Williams für seine hervorragende Dokumentation über die Photoshop-VM.