Bagaimana Photoshop menyelesaikan bekerja dengan file yang lebih besar dari yang dapat masuk ke dalam memori

Pelajari cara Adobe memungkinkan pengguna mengedit file terbesar sekalipun di versi web aplikasi Photoshop ikoniknya.

Pengantar

(Artikel ini juga tersedia dalam bentuk video.)

Pada tahun 2021, Adobe, bersama dengan engineer Chrome, mempersembahkan versi Photoshop ke web. Software ini menggunakan WebAssembly secara inovatif dengan fitur seperti SIMD, penyimpanan berperforma tinggi di sistem file pribadi origin, ruang warna P3 untuk kanvas, dan Komponen Web dengan Lit. Dalam artikel ini, kita ingin berfokus pada cara engineer Adobe Photoshop menyelesaikan masalah saat bekerja dengan file yang lebih besar dari yang dapat dimuat ke dalam memori. Selain itu, dalam kasus WebAssembly, cara kerja Photoshop dengan file yang lebih besar dari ruang alamat 32-bit wasm32.

Aplikasi Photoshop saat mengedit gambar logo Project Fugu.

Permasalahan

Membuka file untuk diedit memerlukan memori dalam jumlah besar, jauh lebih banyak daripada membuka file untuk dilihat. File yang diedit di Photoshop sering kali memerlukan lebih banyak memori daripada yang tersedia di perangkat pengguna, karena banyaknya fitur yang ditawarkan oleh software, jenis desain dan pengeditan digital yang digunakan, serta kemampuan perangkat pengguna.

Format file Photoshop menyimpan data dengan kompresi lossless. Saat file atau dokumen dibaca, semua data gambar didekompresi untuk memungkinkan pemrosesan yang lebih efisien. Akibatnya, jumlah memori yang diperlukan bisa beberapa kali lebih besar dari jumlah ruang yang digunakan dokumen di disk atau di penyimpanan cloud.

Photoshop mendukung histori urungkan yang sangat besar. Banyak operasi di Photoshop yang disebut operasi destruktif. Artinya, melakukan pengeditan seperti melukis dengan kuas akan menghasilkan data piksel baru yang dapat sama besarnya dengan data piksel asli. Melakukan pengeditan ini dalam sesi pengeditan yang lama akan menghasilkan data piksel dalam jumlah besar yang harus disimpan untuk mendukung operasi undo. Dengan demikian, histori dapat bertambah hingga beberapa ratus megabyte atau beberapa gigabyte data.

Perangkat dan platform, baik mesin desktop, perangkat seluler, maupun browser, semuanya mengelola memori. Beberapa lebih banyak menyediakan memori untuk aplikasi daripada yang lain. Jumlah memori juga bervariasi dari perangkat ke perangkat, seperti yang Anda ketahui saat memesan komputer atau perangkat baru dan menentukan jumlah Random-Access Memory (RAM) yang diinginkan. Banyak platform ini juga mendukung memori virtual, yang memungkinkan aplikasi menggunakan lebih banyak memori daripada yang tersedia secara fisik. Dukungan ini bervariasi menurut sistem operasi dan runtime, seperti dalam kasus WebAssembly, mungkin tidak mudah diakses atau digunakan oleh aplikasi. Selain itu, sistem virtual modern memiliki batas atas yang mudah terlampaui oleh persyaratan Photoshop.

Idealnya, aplikasi akan menggunakan memori sebanyak yang diperlukan. Hal ini umumnya memungkinkan mereka memberikan performa terbaik kepada pengguna. Namun, jika menggunakan terlalu banyak memori, kode tersebut dapat dihukum oleh platform runtime atau kehabisan memori, sehingga menyebabkan kegagalan.

Sebagai catatan historis, masalah awal yang perlu dipecahkan Photoshop adalah mengedit file resolusi cetak pada versi awal macOS, serendah 1 MB untuk OS dan semua aplikasi. Gambar halaman penuh 300 dpi dalam CMYK berukuran sekitar 32 MB tanpa kompresi.

Solusi

Untuk mengatasi masalah aplikasi yang melebihi jumlah RAM yang tersedia, Photoshop menerapkan sistem memori virtual (VM) software. Photoshop menggunakan VM-nya untuk mengelola data dokumen, terutama data gambar, semua histori dan status undo, serta penyimpanan yang berfungsi untuk perintah saat ini. Ini juga digunakan untuk meng-cache blok data besar seperti deskripsi kuas sehingga hanya perlu diserialisasi dari disk sekali.

Sebagai contoh salah satu aspek yang dikelola oleh VM, data gambar disimpan menggunakan representasi mipmap, yang merupakan kumpulan ubin piramida, yang menyediakan data gambar pada rentang resolusi rendah hingga tinggi. Hal ini memungkinkan Photoshop beroperasi pada data resolusi yang sesuai untuk respons yang lebih cepat saat diperbesar atau melihat pratinjau, dibandingkan diperkecil.

Contoh penyimpanan gambar mipmap: gambar utama di sebelah kiri disertai dengan salinan yang difilter dengan ukuran yang dikurangi.

Selama inisialisasi aplikasi, Photoshop menentukan jumlah RAM yang tersedia. Fitur ini menyisihkan satu bagian untuk data yang akan disimpan di VM. RAM yang tersisa tersedia untuk kebutuhan aplikasi lainnya melalui library runtime C++ standar. Memori VM dibagi menjadi sejumlah halaman. Setiap halaman biasanya merupakan kelipatan ukuran halaman hardware untuk perangkat. Saat digunakan untuk data gambar, memori dirujuk sebagai ubin. Kartu adalah area persegi piksel dari satu lapisan termasuk batas geometri. Kartu menggunakan satu atau beberapa halaman.

Photoshop membuat satu atau beberapa file awal untuk menyediakan dukungan berbasis disk untuk halaman VM. File awal ini disimpan di sistem file pribadi asal. Screenshot menunjukkan contoh hierarki file dari file awal tersebut (ditandai dengan warna kuning) dan file lainnya selama sesi pengeditan gambar. Setiap file awal dapat berisi banyak halaman VM. Jika VM memerlukan lebih banyak dukungan, VM akan membuat file awal tambahan. Saat halaman dibebaskan, ruangnya dalam file awal dapat digunakan kembali untuk halaman baru.

Memeriksa hierarki file sistem file pribadi asal Photoshop dengan ekstensi Chrome OPFS Explorer.

Saat memproses data gambar, Photoshop melakukan iterasi pada ubin, yang melakukan penghitungan piksel. Setiap penghitungan dapat mereferensikan beberapa kartu. VM bertanggung jawab untuk memastikan bahwa ubin sumber dan tujuan untuk iterasi saat ini ada dalam memori, dengan memuat ubin dari file awal sesuai kebutuhan. Pada saat yang sama, proses ini dapat menghapus halaman ke file awal untuk mengosongkan ruang memori.

Kesimpulan

Meskipun detail penerapan VM yang konkret akan jauh melampaui cakupan dokumen ini (dan juga merupakan hak eksklusif Adobe), dengan deskripsi solusi tingkat tinggi, kami telah menempatkan Anda dalam posisi yang dapat memahami cara Photoshop menangani file berukuran besar. Sistem file pribadi asal dengan akses baca dan tulis berperforma tinggi ke file adalah komponen utama solusi ini.

Ucapan terima kasih

Postingan blog ini ditinjau oleh Oliver Unter Ecker dan Rachel Andrew. Terima kasih khusus kepada Russell Williams atas dokumentasi yang luar biasa tentang VM Photoshop.