Cách Photoshop giải quyết vấn đề khi xử lý các tệp lớn hơn dung lượng bộ nhớ

Tìm hiểu cách Adobe cho phép người dùng chỉnh sửa ngay cả những tệp lớn nhất trên phiên bản web của ứng dụng Photoshop mang tính biểu tượng.

Giới thiệu

(Bài viết này cũng có dạng video.)

Năm 2021, Adobe cùng với nhóm kỹ sư Chrome đã ra mắt một phiên bản Photoshop trên web. Phần mềm này sử dụng WebAssembly một cách sáng tạo với các tính năng như SIMD, bộ nhớ hiệu suất cao trong hệ thống tệp riêng tư gốc, không gian màu P3 cho canvas và Thành phần web với Lit. Trong bài viết này, chúng tôi muốn tập trung vào cách nhóm kỹ sư Adobe Photoshop giải quyết vấn đề xử lý các tệp lớn hơn dung lượng bộ nhớ. Và trong trường hợp WebAssembly, cách Photoshop hoạt động với các tệp lớn hơn không gian địa chỉ 32 bit của wasm32.

Ứng dụng Photoshop trong khi chỉnh sửa hình ảnh biểu trưng Project Fugu.

Vấn đề

Việc mở tệp để chỉnh sửa cần nhiều bộ nhớ hơn đáng kể so với việc mở tệp để xem. Các tệp được chỉnh sửa trong Photoshop thường yêu cầu nhiều bộ nhớ hơn so với bộ nhớ mà người dùng có trên thiết bị của họ, do nhiều tính năng mà phần mềm cung cấp, các loại thiết kế và chỉnh sửa kỹ thuật số được dùng cho phần mềm này và khả năng của thiết bị của người dùng.

Định dạng tệp Photoshop lưu trữ dữ liệu bằng phương thức nén không suy hao. Khi một tệp hoặc tài liệu được đọc, tất cả dữ liệu hình ảnh sẽ được giải nén để cho phép xử lý hiệu quả hơn. Do đó, dung lượng bộ nhớ cần thiết có thể lớn hơn nhiều lần so với dung lượng mà một tài liệu sử dụng trên ổ đĩa hoặc trong bộ nhớ trên đám mây.

Photoshop hỗ trợ một nhật ký thao tác huỷ rất lớn. Nhiều thao tác trong Photoshop được gọi là thao tác huỷ bỏ. Tức là việc chỉnh sửa, chẳng hạn như vẽ bằng bút vẽ, sẽ dẫn đến dữ liệu pixel mới có thể lớn như dữ liệu pixel ban đầu. Việc chỉnh sửa trong một phiên chỉnh sửa dài sẽ tạo ra một lượng lớn dữ liệu pixel cần được lưu giữ để hỗ trợ các thao tác huỷ. Do đó, nhật ký có thể tăng lên vài trăm megabyte hoặc nhiều gigabyte dữ liệu.

Tất cả thiết bị và nền tảng, cho dù là máy tính để bàn, thiết bị di động hay trình duyệt, đều quản lý bộ nhớ. Một số thiết bị có nhiều bộ nhớ hơn so với các thiết bị khác. Dung lượng bộ nhớ cũng khác nhau tuỳ theo thiết bị, như bạn biết khi đặt hàng máy tính hoặc thiết bị mới và chỉ định dung lượng Bộ nhớ truy cập ngẫu nhiên (RAM) mong muốn. Nhiều nền tảng trong số này cũng hỗ trợ bộ nhớ ảo, cho phép ứng dụng sử dụng nhiều bộ nhớ hơn so với bộ nhớ thực tế có sẵn. Mức độ hỗ trợ này thay đổi tuỳ theo hệ điều hành và thời gian chạy, như trong trường hợp WebAssembly, các ứng dụng có thể không dễ dàng truy cập hoặc sử dụng. Ngoài ra, các hệ thống ảo hiện đại có giới hạn trên dễ dàng vượt quá các yêu cầu của Photoshop.

Lý tưởng nhất là các ứng dụng sẽ sử dụng nhiều bộ nhớ như cần. Nhờ đó, họ thường có thể mang lại hiệu suất tốt nhất cho người dùng. Tuy nhiên, nếu sử dụng quá nhiều bộ nhớ, các vùng nhớ đệm này có thể bị nền tảng thời gian chạy phạt hoặc có thể hết bộ nhớ, dẫn đến lỗi.

Lưu ý về quá trình phát triển: Vấn đề ban đầu mà Photoshop cần giải quyết là chỉnh sửa tệp độ phân giải in trên các phiên bản macOS ban đầu, chỉ có 1 MB cho hệ điều hành và tất cả ứng dụng. Hình ảnh toàn trang có độ phân giải 300 dpi ở định dạng CMYK có kích thước khoảng 32 MB khi chưa nén.

Giải pháp

Để giải quyết vấn đề ứng dụng vượt quá dung lượng RAM có sẵn, Photoshop đã triển khai một hệ thống bộ nhớ ảo (VM) phần mềm. Photoshop sử dụng máy ảo để quản lý dữ liệu tài liệu, đặc biệt là dữ liệu hình ảnh, tất cả nhật ký và trạng thái huỷ, cũng như bộ nhớ đang hoạt động cho lệnh hiện tại. Lớp này cũng được dùng để lưu các khối dữ liệu lớn vào bộ nhớ đệm, chẳng hạn như nội dung mô tả về bút vẽ, để chỉ cần chuyển đổi tuần tự một lần từ ổ đĩa.

Ví dụ về một trong những khía cạnh do máy ảo quản lý, dữ liệu hình ảnh được lưu trữ bằng cách sử dụng bản trình bày mipmap, đây là một tập hợp các ô hình kim tự tháp, cung cấp dữ liệu hình ảnh ở phạm vi độ phân giải từ thấp đến cao. Điều này cho phép Photoshop hoạt động trên dữ liệu độ phân giải thích hợp để phản hồi nhanh hơn khi phóng to hoặc xem trước, so với khi thu nhỏ.

Ví dụ về cách lưu trữ hình ảnh mipmap: hình ảnh chính ở bên trái đi kèm với các bản sao được lọc có kích thước giảm.

Trong quá trình khởi chạy ứng dụng, Photoshop sẽ xác định dung lượng RAM có sẵn. Phương thức này dành riêng một phần để lưu trữ dữ liệu trong máy ảo. RAM còn lại có sẵn cho các nhu cầu khác của ứng dụng thông qua thư viện thời gian chạy C++ chuẩn. Bộ nhớ máy ảo được chia thành các trang. Mỗi trang thường là bội số của kích thước trang phần cứng cho thiết bị. Khi được dùng cho dữ liệu hình ảnh, bộ nhớ được tham chiếu dưới dạng thẻ thông tin. Thẻ thông tin là một vùng hình vuông gồm các pixel của một lớp, bao gồm cả giới hạn hình học. Thẻ thông tin sử dụng một hoặc nhiều trang.

Photoshop tạo một hoặc nhiều tệp tạm để cung cấp bản sao lưu dựa trên ổ đĩa cho các trang máy ảo. Các tệp nháp này được lưu trữ trong hệ thống tệp riêng tư gốc. Ảnh chụp màn hình cho thấy hệ phân cấp tệp mẫu của một tệp nháp như vậy (được làm nổi bật bằng màu vàng) và các tệp khác trong một phiên chỉnh sửa hình ảnh. Mỗi tệp tạm có thể chứa nhiều trang máy ảo. Khi cần thêm dung lượng sao lưu, máy ảo sẽ tạo thêm các tệp tạm thời. Khi các trang được giải phóng, không gian của các trang đó trong tệp tạm có thể được sử dụng lại cho các trang mới.

Kiểm tra hệ thống phân cấp tệp hệ thống tệp riêng tư gốc của Photoshop bằng tiện ích Chrome Explorer OPFS.

Khi xử lý dữ liệu hình ảnh, Photoshop lặp lại các ô, thực hiện tính toán pixel. Mỗi phép tính có thể tham chiếu đến nhiều thẻ thông tin. Máy ảo chịu trách nhiệm đảm bảo rằng thẻ thông tin nguồn và đích cho lần lặp hiện tại nằm trong bộ nhớ, tải các thẻ thông tin đó từ tệp trống nếu cần. Đồng thời, trình duyệt có thể xoá sạch các trang vào tệp tạm để tạo không gian trong bộ nhớ.

Kết luận

Mặc dù thông tin chi tiết về cách triển khai máy ảo sẽ vượt quá phạm vi của tài liệu này (và cũng là tài sản độc quyền của Adobe), nhưng thông qua nội dung mô tả tổng quan về giải pháp này, chúng tôi đã giúp bạn hiểu được cách Photoshop xử lý các tệp lớn. Hệ thống tệp riêng tư gốc có quyền đọc và ghi tệp hiệu suất cao là một thành phần chính của giải pháp.

Lời cảm ơn

Bài đăng trên blog này do Oliver Unter Ecker và Rachel Andrew xem xét. Cảm ơn đặc biệt Russell Williams vì tài liệu tuyệt vời của anh về máy ảo Photoshop.