วิธีที่ Photoshop แก้ปัญหาการทำงานกับไฟล์ที่มีขนาดใหญ่กว่าใส่ลงในหน่วยความจำได้

ดูวิธีที่ Adobe ช่วยให้ผู้ใช้แก้ไขไฟล์ขนาดใหญ่ที่สุดได้บนแอป Photoshop อันโด่งดังเวอร์ชันเว็บ

(บทความนี้มีให้บริการในรูปแบบวิดีโอด้วย)

ในปี 2021 Adobe ร่วมกับทีมวิศวกรของ Chrome ได้นำ Photoshop เวอร์ชันหนึ่งมาสู่เว็บ ซอฟต์แวร์นี้ใช้ WebAssembly อย่างสร้างสรรค์ด้วยฟีเจอร์ต่างๆ เช่น SIMD, พื้นที่เก็บข้อมูลประสิทธิภาพสูงในระบบไฟล์ส่วนตัวต้นทาง, พื้นที่สี P3 สำหรับ Canvas และ Web Components ที่มี Lit ในบทความนี้ เราจะเน้นที่วิธีที่ทีมวิศวกรของ Adobe Photoshop แก้ปัญหาการทำงานกับไฟล์ที่มีขนาดใหญ่เกินกว่าหน่วยความจำจะรองรับ และในกรณีของ WebAssembly วิธีที่ Photoshop ทำงานกับไฟล์ที่มีขนาดใหญ่กว่าพื้นที่ที่อยู่ 32 บิตของ wasm32

แอป Photoshop ขณะแก้ไขรูปภาพโลโก้ Project Fugu

ปัญหา

การเปิดไฟล์เพื่อแก้ไขต้องใช้หน่วยความจำจำนวนมาก ซึ่งมากกว่าการเปิดไฟล์เพื่อดู ไฟล์ที่แก้ไขใน Photoshop มักต้องใช้หน่วยความจำมากกว่าที่ผู้ใช้มีในอุปกรณ์ เนื่องจากซอฟต์แวร์มีฟีเจอร์มากมาย ประเภทการออกแบบและการแก้ไขแบบดิจิทัลที่ใช้ซอฟต์แวร์นี้ และความสามารถของอุปกรณ์ของผู้ใช้

รูปแบบไฟล์ Photoshop จะจัดเก็บข้อมูลด้วยการบีบอัดแบบไม่สูญเสียคุณภาพ เมื่ออ่านไฟล์หรือเอกสาร ระบบจะยกเลิกการบีบอัดข้อมูลรูปภาพทั้งหมดเพื่อให้ประมวลผลได้อย่างมีประสิทธิภาพมากขึ้น ด้วยเหตุนี้ ปริมาณหน่วยความจำที่ต้องการจึงอาจมากกว่าพื้นที่ที่เอกสารใช้บนดิสก์หรือในระบบพื้นที่เก็บข้อมูลระบบคลาวด์หลายเท่า

Photoshop รองรับประวัติการเลิกทำจำนวนมาก การดำเนินการหลายอย่างใน Photoshop เรียกว่าการดำเนินการแบบทำลาย กล่าวคือ การแก้ไข เช่น การวาดด้วยแปรง จะทำให้ข้อมูลพิกเซลใหม่มีขนาดใหญ่เท่ากับข้อมูลพิกเซลเดิม การแก้ไขเหล่านี้ในเซสชันการแก้ไขที่ยาวนานจะทำให้เกิดข้อมูลพิกเซลจำนวนมากที่ต้องเก็บไว้เพื่อรองรับการดำเนินการเลิกทำ ด้วยเหตุนี้ ประวัติจึงอาจมีข้อมูลเพิ่มขึ้นเป็นหลายร้อยเมกะไบต์หรือหลายกิกะไบต์

อุปกรณ์และแพลตฟอร์มทั้งหมด ไม่ว่าจะเป็นเครื่องเดสก์ท็อป อุปกรณ์เคลื่อนที่ หรือเบราว์เซอร์ ต่างก็จัดการหน่วยความจำ บางรุ่นให้หน่วยความจำแก่แอปพลิเคชันมากกว่ารุ่นอื่นๆ ปริมาณหน่วยความจำจะแตกต่างกันไปในแต่ละอุปกรณ์ ดังที่คุณทราบเมื่อสั่งซื้อคอมพิวเตอร์หรืออุปกรณ์ใหม่และระบุปริมาณหน่วยความจำเข้าถึงแบบสุ่ม (RAM) ที่ต้องการ แพลตฟอร์มเหล่านี้จำนวนมากยังรองรับหน่วยความจำเสมือนด้วย ซึ่งช่วยให้แอปพลิเคชันใช้หน่วยความจําได้มากกว่าที่มีจริง การรองรับนี้แตกต่างกันไปตามระบบปฏิบัติการและรันไทม์ เช่น ในกรณีของ WebAssembly แอปพลิเคชันอาจเข้าถึงหรือใช้งานไม่ได้ในทันที นอกจากนี้ ระบบเสมือนสมัยใหม่ยังมีขีดจำกัดสูงสุดที่เกินข้อกำหนดของ Photoshop ได้โดยง่าย

โดยหลักการแล้ว แอปพลิเคชันจะใช้หน่วยความจำเท่าที่จำเป็น ซึ่งโดยทั่วไปจะช่วยให้สามารถมอบประสิทธิภาพที่ดีที่สุดแก่ผู้ใช้ อย่างไรก็ตาม หากใช้หน่วยความจํามากเกินไป แพลตฟอร์มรันไทม์อาจลงโทษหรือหน่วยความจําอาจหมดลง ซึ่งส่งผลให้เกิดความล้มเหลว

ข้อมูลย้อนหลังคือปัญหาเดิมที่ Photoshop ต้องแก้ไขคือการแก้ไขไฟล์ความละเอียดระดับสิ่งพิมพ์ใน macOS เวอร์ชันแรกๆ ซึ่งมีขนาดเพียง 1 MB สำหรับระบบปฏิบัติการและแอปพลิเคชันทั้งหมด รูปภาพขนาดเต็ม 300 dpi ใน CMYK จะมีขนาดประมาณ 32 MB เมื่อไม่ได้บีบอัด

การแก้ปัญหา

Photoshop ใช้ระบบหน่วยความจำเสมือน (VM) ของซอฟต์แวร์เพื่อแก้ปัญหาแอปใช้ RAM เกินจำนวนที่มี Photoshop ใช้ VM เพื่อจัดการข้อมูลเอกสาร โดยเฉพาะข้อมูลรูปภาพ ประวัติการเลิกทำและสถานะทั้งหมด รวมถึงพื้นที่เก็บข้อมูลสำหรับคำสั่งปัจจุบัน นอกจากนี้ยังใช้แคชข้อมูลขนาดใหญ่ เช่น คำอธิบายแปรง เพื่อให้ต้องจัดเรียงจากดิสก์เพียงครั้งเดียว

ตัวอย่างหนึ่งของแง่มุมที่ VM จัดการคือ ข้อมูลรูปภาพจะจัดเก็บโดยใช้การแสดงผล mipmap ซึ่งเป็นชุดไทล์รูปปิรามิดที่ให้ข้อมูลรูปภาพในระดับความละเอียดต่ำไปจนถึงสูง ซึ่งจะช่วยให้ Photoshop ทำงานกับข้อมูลความละเอียดที่เหมาะสมเพื่อให้ตอบสนองได้เร็วขึ้นเมื่อซูมเข้าหรือดูตัวอย่าง เมื่อเทียบกับการซูมออก

ตัวอย่างพื้นที่เก็บข้อมูลรูปภาพ mipmap: รูปภาพหลักทางด้านซ้ายมีสำเนาที่กรองแล้วซึ่งปรับขนาดให้เล็กลง

ในระหว่างการเริ่มต้นแอปพลิเคชัน Photoshop จะกำหนดปริมาณ RAM ที่ใช้ได้ โดยระบบจะจัดสรรพื้นที่ส่วนหนึ่งสำหรับจัดเก็บข้อมูลใน VM RAM ที่เหลือจะพร้อมใช้งานสำหรับแอปพลิเคชันอื่นๆ ผ่านไลบรารีรันไทม์ C++ มาตรฐาน หน่วยความจําของ VM จะแบ่งออกเป็นหน้า โดยปกติแล้วแต่ละหน้าจะเป็นจำนวนที่คูณกับขนาดหน้าฮาร์ดแวร์ของอุปกรณ์ เมื่อใช้กับข้อมูลรูปภาพ ระบบจะอ้างอิงหน่วยความจำเป็นไทล์ ไทล์คือพื้นที่สี่เหลี่ยมจัตุรัสของพิกเซลในเลเยอร์เดียว ซึ่งรวมถึงขอบเขตของรูปทรงเรขาคณิต ไทล์ใช้หน้าเว็บอย่างน้อย 1 หน้า

Photoshop จะสร้างไฟล์พักชั่วคราวอย่างน้อย 1 ไฟล์เพื่อให้การสำรองข้อมูลแบบดิสก์สำหรับหน้า VM ไฟล์ขยะเหล่านี้จะจัดเก็บไว้ในระบบไฟล์ส่วนตัวต้นทาง ภาพหน้าจอแสดงลําดับชั้นไฟล์ตัวอย่างของไฟล์ร่างดังกล่าว (ไฮไลต์ด้วยสีเหลือง) และไฟล์อื่นๆ ระหว่างเซสชันการแก้ไขรูปภาพ ไฟล์ทดสอบแต่ละไฟล์อาจมีหน้า VM หลายหน้า เมื่อ VM ต้องการพื้นที่สำรองเพิ่มเติม ระบบจะสร้างไฟล์สแครชเพิ่มเติม เมื่อมีการลบหน้าเว็บออก ระบบจะนำพื้นที่ว่างในไฟล์ขยะมาใช้กับหน้าเว็บใหม่ได้

การตรวจสอบลําดับชั้นไฟล์ของระบบไฟล์ส่วนตัวต้นทางของ Photoshop ด้วยส่วนขยาย OPFS Explorer ของ Chrome

เมื่อประมวลผลข้อมูลรูปภาพ Photoshop จะวนซ้ำผ่านไทล์ต่างๆ เพื่อคำนวณพิกเซล การคํานวณแต่ละรายการจะอ้างอิงข้อมูลหลายรายการในการ์ดได้ VM มีหน้าที่ตรวจสอบว่าการ์ดต้นทางและปลายทางสำหรับการวนซ้ำปัจจุบันอยู่ในหน่วยความจำ โดยโหลดการ์ดจากไฟล์เริ่มต้นตามที่จำเป็น ในขณะเดียวกันก็สามารถล้างหน้าเว็บไปยังไฟล์พักชั่วคราวเพื่อเพิ่มพื้นที่ในหน่วยความจำ

สรุป

แม้ว่ารายละเอียดการใช้งานจริงของ VM จะนอกเหนือขอบเขตของเอกสารนี้ (และยังเป็นกรรมสิทธิ์ของ Adobe ด้วย) แต่คำอธิบายระดับสูงของโซลูชันนี้จะช่วยให้คุณเข้าใจวิธีที่ Photoshop จัดการกับไฟล์ขนาดใหญ่ ระบบไฟล์ส่วนตัวต้นทางที่มีสิทธิ์อ่านและเขียนไฟล์ที่มีประสิทธิภาพสูงเป็นองค์ประกอบหลักของโซลูชัน

ขอขอบคุณ

บล็อกโพสต์นี้ได้รับการตรวจสอบโดย Oliver Unter Ecker และ Rachel Andrew ขอขอบคุณ Russell Williams เป็นอย่างยิ่งสำหรับเอกสารประกอบที่ยอดเยี่ยมเกี่ยวกับ VM ของ Photoshop