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 quản lý để người dùng có thể chỉnh sửa cả những tệp lớn nhất trên phiên bản web của ứng dụng Photoshop nổi tiếng.

Khu Nabeel Al-Shamma
Nabeel Al-Shamma

Giới thiệu

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

Vào năm 2021, Adobe cùng với nhóm kỹ thuật của Chrome đã cung cấp một phiên bản Photoshop lê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 có Lit. Trong bài viết này, chúng tôi muốn tập trung vào cách giải quyết vấn đề kỹ thuật của Adobe Photoshop khi xử lý các tệp lớn hơn dung lượng bộ nhớ. Và, trong trường hợp của 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ở một tệp để chỉnh sửa cần một lượng bộ nhớ lớn, nhiều hơn đáng kể so với việc mở tệp để xem. Các tệp được chỉnh sửa bằng Photoshop thường cần nhiều bộ nhớ hơn so với khả năng sử dụng trên thiết bị của người dùng, do phần mềm này có nhiều tính năng được cung cấp, các loại thiết kế kỹ thuật số và chỉnh sửa chúng được sử dụng cũng như các 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 ở chế độ nén không mất dữ liệu. Khi đọc tệp hoặc tài liệu, tất cả dữ liệu hình ảnh sẽ được giải nén để xử lý hiệu quả hơn. Do đó, dung lượng bộ nhớ cần thiết có thể nhiều hơn vài lần so với dung lượng mà một tài liệu dùng trên ổ đĩa hoặc trong bộ nhớ trên đám mây.

Photoshop hỗ trợ lịch sử hoàn tác rất lớn. Nhiều thao tác trong Photoshop được gọi là thao tác phá hoại. Điều này nghĩa là việc thực hiện chỉnh sửa như vẽ bằng bút vẽ sẽ tạo ra dữ liệu pixel mới, có thể lớn bằng dữ liệu pixel gốc. Việc thực hiện những chỉnh sửa này 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 phải được lưu giữ để hỗ trợ các thao tác hoàn tác. Do đó, lịch sử có thể tăng lên vài trăm megabyte hoặc nhiều gigabyte dữ liệu.

Cá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, tất cả đều quản lý bộ nhớ. Một số ứng dụng rộng rãi hơn so với các ứng dụng khác. Dung lượng bộ nhớ cũng thay đổi tuỳ theo thiết bị, như bạn biết khi đặt mua máy tính hoặc thiết bị mới và chỉ định dung lượng Bộ nhớ truy xuất ngẫu nhiên (RAM) mà bạn 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 thực tế. Sự 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 của WebAssembly, có thể không dễ dàng truy cập hoặc sử dụng được bằng các ứng dụng. Ngoài ra, các hệ thống ảo hiện đại có giới hạn trên và có thể 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 nên sử dụng đủ bộ nhớ theo nhu cầu. Điều này thường giúp họ 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 thiết bị đó 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.

Xin lưu ý rằng vấn đề ban đầu mà Photoshop cần giải quyết là chỉnh sửa các tệp có độ phân giải in trên các phiên bản macOS ban đầu, chỉ 1 MB cho hệ điều hành và tất cả các ứng dụng. Hình ảnh trang đầy đủ 300 dpi ở CMYK có kích thước khoảng 32 MB không nén.

Giải pháp

Để giải quyết vấn đề ứng dụng vượt quá dung lượng RAM hiện có, Photoshop đã triển khai một hệ thống bộ nhớ ảo phần mềm (VM). 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, toàn bộ nhật ký và trạng thái huỷ, cũng như bộ nhớ đang hoạt động của lệnh hiện tại. Tệ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ả bút vẽ) để chúng chỉ cần được chuyển đổi tuần tự từ ổ đĩa một lần.

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, là một tập hợp các ô hình chóp, cung cấp dữ liệu hình ảnh ở nhiều độ 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 nhìn vào bản xem trước, thay vì thu nhỏ.

Ví dụ về lưu trữ hình ảnh mipmap: hình ảnh chính bên trái được đ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òn trống. Dịch vụ này dành riêng một phần để lưu trữ dữ liệu trong máy ảo. Dung lượng RAM còn lại dành 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++ tiêu 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 dùng cho dữ liệu hình ảnh, bộ nhớ sẽ đượ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 chứa các pixel của một lớp duy nhất, bao gồm cả các giới hạn hình học. Một 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 bản thảo để cung cấp tính năng sao lưu dựa trên ổ đĩa cho các trang máy ảo. Những tệp bản thảo này được lưu trữ trong hệ thống tệp gốc riêng tư. Ảnh chụp màn hình cho thấy một hệ thống phân cấp tệp mẫu của một tệp cào (được đánh dấu 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 bản thảo có thể chứa nhiều trang máy ảo. Khi cần thêm sao lưu, máy ảo sẽ tạo thêm các tệp bản thảo. Khi các trang được giải phóng, không gian của các trang đó trong một tệp cào 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ư theo nguồn gốc của Photoshop bằng tiện ích OPFS Explorer của Chrome.

Khi xử lý dữ liệu hình ảnh, Photoshop sẽ lặp lại các thẻ thông tin để 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 các ô nguồn và đích của vòng lặp hiện tại đều nằm trong bộ nhớ, tải các ô này từ các tệp đầu vào theo yêu cầu. Đồng thời, công cụ này có thể đẩy dữ liệu các trang sang tệp Scratch để tạo thêm chỗ trống trong bộ nhớ.

Kết luận

Mặc dù thông tin triển khai cụ thể của máy ảo sẽ vượt ra ngoài phạm vi của tài liệu này (và cũng thuộc quyền sở hữu riêng của Adobe), nhưng với phần mô tả tổng quan về giải pháp này, chúng tôi đã đưa bạn vào vị trí mà bạn có thể 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à thành phần quan trọng của giải pháp.

Xác nhận

Bài đăng trên blog này đã được Oliver Unter Ecker và Rachel Andrew đánh giá. Xin đặc biệt cảm ơn Russell Williams vì đã cung cấp tài liệu rất hữu ích trên máy ảo Photoshop.