Photoshop, belleğe sığabilecek daha büyük dosyalarla çalışmayı nasıl çözdü?

Adobe'nin, ikonik Photoshop uygulamasının web sürümündeki en büyük dosyaları bile kullanıcıların düzenlemesine nasıl izin verdiğini öğrenin.

Giriş

(Bu makale video biçiminde de sunulmaktadır.)

Adobe, 2021'de Chrome mühendisliğiyle birlikte Photoshop'un bir sürümünü web'e taşıdı. Yazılım; SIMD, kaynak özel dosya sisteminde yüksek performanslı depolama, kanvas için P3 renk alanı ve Lit gibi Web Bileşenleri gibi özelliklerle WebAssembly'yi yenilikçi biçimde kullanır. Bu makalede, Adobe Photoshop mühendisliğinin belleğe sığmayacak kadar büyük dosyalarla çalışmayı nasıl çözdüğünü ele almak istiyoruz. WebAssembly söz konusu olduğunda, Photoshop, wasm32'nin 32 bit adres alanından daha büyük dosyalarla nasıl çalışır?

Project Fugu logosunun resmini düzenlerken Photoshop uygulaması.

Sorun

Bir dosyayı düzenlemek üzere açmak için büyük miktarda bellek gerekir. Bu, bir dosyayı görüntülemek üzere açmaktan çok daha fazladır. Photoshop'ta düzenlenen dosyalar, yazılım tarafından sunulan birçok özellik, kullanılacak dijital tasarım ve düzenleme türleri, kullanıcı cihazlarının özellikleri nedeniyle genellikle kullanıcının cihazında bulunandan daha fazla bellek gerektirir.

Photoshop dosya biçimi, verileri kayıpsız sıkıştırmayla depolar. Bir dosya veya doküman okunurken, daha verimli bir şekilde işlenmesi için tüm resim verileri sıkıştırılır. Sonuç olarak, gereken bellek miktarı, bir belgenin diskte veya bulut depolama alanında kullandığı alandan birkaç kat daha fazla olabilir.

Photoshop, çok büyük bir geri alma geçmişini destekler. Photoshop'taki birçok işlemi, yıkıcı işlemler olarak adlandırıyoruz. Yani, fırçayla boyama gibi bir düzenleme yaptığınızda, orijinal piksel verileri kadar büyük olabilecek yeni piksel verileri ortaya çıkar. Bu düzenlemeleri uzun bir düzenleme oturumunda yapmak, geri alma işlemlerini desteklemek için saklanması gereken büyük miktarda piksel verisi sağlar. Böylece, geçmiş birkaç yüz megabayta veya birçok gigabayta kadar genişleyebilir.

Masaüstü makineler, mobil cihazlar veya tarayıcılar gibi cihaz ve platformların tümü belleği yönetir. Bazıları ise uygulamalara ne kadar bellek ayırdıkları konusunda diğerlerinden daha cömert olabilirler. Yeni bir bilgisayar veya cihaz sipariş ettiğinizde ve istediğiniz Rastgele Erişim Belleği (RAM) miktarını belirttiğinizde, bellek miktarı da cihazdan cihaza değişir. Bu platformların birçoğu, uygulamaların fiziksel olarak kullanılabilir olandan daha fazla bellek kullanmasına olanak tanıyan sanal belleği de desteklemektedir. Bu destek, WebAssembly'de olduğu gibi, işletim sistemine ve çalışma zamanına göre değişiklik gösterir. Uygulamalar tarafından erişilebilir veya kullanılamaz durumda olabilir. Üstelik modern sanal sistemlerin üst sınırları, Photoshop gereksinimleri tarafından kolayca aşılabilir.

İdeal olarak, uygulamalar ihtiyaç duydukları kadar bellek kullanır. Bu genellikle kullanıcılarına en iyi performansı sunmalarına olanak tanır. Bununla birlikte, çok fazla bellek kullanırlarsa çalışma zamanı platformu bu durumdan olumsuz etkilenebilir veya bellek tükenerek hatalara neden olabilir.

Geçmişe ait bir not olarak, Photoshop'un çözmesi gereken asıl sorun, baskı çözünürlüğü dosyalarını macOS'in erken sürümlerinde düzenlemekti. Bu sınır, işletim sistemi ve tüm uygulamalar için 1 MB'tı. CMYK'da 300 dpi tam sayfa resim, sıkıştırılmamış halde yaklaşık 32 MB boyutundadır.

Çözüm

Uygulamanın mevcut RAM miktarını aşması sorununu çözmek için Photoshop, yazılıma ait bir sanal bellek sistemi (VM) kullanıma sunmuştur. Photoshop, belge verilerini (özellikle de görüntü verilerini, tüm geri alma geçmişi ve durumunu) yönetmek ve geçerli komutun çalışan depolama alanını yönetmek için sanal makinesini kullanır. Ayrıca, fırça açıklamaları gibi büyük veri bloklarını önbelleğe almak için de kullanılır. Böylece, bu verilerin diskten yalnızca bir kez serileştirilmesi gerekir.

Sanal makine tarafından yönetilen özelliklerden birine örnek olarak, görüntü verileri mipmap gösterimi kullanılarak depolanır. Bu gösterim, piramit şeklinde bir dizi parçadır ve düşük ile yüksek çözünürlük aralığında resim verileri sağlar. Bu, Photoshop'un yakınlaştırıldığında veya önizlemeye bakarken uzaklaştırmaya göre daha hızlı yanıt almak için uygun çözünürlük verileri üzerinde çalışmasına olanak tanır.

Örnek mipmap resim depolama: Soldaki ana resme, küçültülmüş boyutlu filtrelenmiş kopyalar eşlik ediyor.

Photoshop, uygulamanın başlatılması sırasında ne kadar RAM kullanabileceğini belirler. Verilerin sanal makinede depolanması için bir bölüm ayırır. Kalan RAM, standart C++ çalışma zamanı kitaplığı aracılığıyla diğer uygulama ihtiyaçları için kullanılabilir. Sanal makine belleği sayfalara ayrılır. Her sayfa genellikle cihazın donanım sayfası boyutunun iki katı olur. Resim verileri için kullanıldığında belleğe karo olarak başvurulur. Karo, tek bir katmana ait, geometrik sınırlar da dahil olmak üzere piksellerin kare alanıdır. Bir karo, bir veya daha fazla sayfa tüketir.

Photoshop, sanal makine sayfaları için disk tabanlı yedekleme sağlamak amacıyla bir veya daha fazla çalışma dosyası oluşturur. Bu çalışma dosyaları, kaynak özel dosya sisteminde depolanır. Ekran görüntüsünde, bu tür bir karalama dosyasının (sarı renkle vurgulanmıştır) ve bir resim düzenleme oturumu sırasındaki diğer dosyaların örnek dosya hiyerarşisi gösterilmektedir. Her taslak dosyası birçok sanal makine sayfası içerebilir. Sanal makine daha fazla yedeklemeye ihtiyaç duyduğunda ek çalışma dosyaları oluşturur. Sayfalar boşaltıldıkça, bunların eski dosyadaki alanları yeni sayfalar için yeniden kullanılabilir.

OPFS Gezgini Chrome uzantısıyla Photoshop'un kaynak özel dosya sistemi dosya hiyerarşisini inceleme.

Photoshop, resim verilerini işlerken karolar üzerinde yineleme yaparak piksel hesaplamaları yapar. Her hesaplama birden fazla karoya başvurabilir. Sanal makine, geçerli iterasyon için kaynak ve hedef karoların bellekte bulunduğundan ve gerektiğinde sıfırdan dosyalardan yüklemekten sorumludur. Aynı zamanda, bellekte yer açmak için sayfaları çizim dosyalarına boşaltabilir.

Sonuçlar

Sanal makinenin somut uygulama ayrıntıları bu belgenin kapsamının çok ötesine geçer (ve Adobe'ye de aittir). Çözümün üst düzey açıklamasıyla sizi Photoshop'un büyük dosyalarla nasıl başa çıktığını anlayabileceğiniz bir konuma taşıdık. Dosyalara yüksek performanslı okuma ve yazma erişimi sunan kaynak gizli dosya sistemi, çözümün temel bir bileşenidir.

Teşekkür

Bu blog yayını Oliver Unter Ecker ve Rachel Andrew tarafından incelendi. Photoshop sanal makinesiyle ilgili mükemmel dokümanlar için Russell Williams'a özel teşekkürlerimizi sunuyoruz.