ใน macOS High Sierra มีฟีเจอร์หนึ่งที่น่าสนใจและถือเป็นการอัพเกรดครั้งใหญ่ที่สุดครั้งหนึ่งในประวัติศาสตร์ Mac นั่นคือระบบ Apple File System (APFS) ในบทความนี้ทีมงาน MacThai จะพาไปรู้จักกับ APFS ในเบื้องหลังว่าทำไมต้องมี และเทคโนโลยีนี้สำคัญอย่างไร

File System คืออะไร

File System หรือแปลเป็นไทยว่า “ระบบไฟล์” นั้นเป็นสิ่งที่จำเป็นบนระบบคอมพิวเตอร์ แต่ก่อนที่จะมีเราคงจะต้องย้อนกลับไปยังสมัยโบราณถึงวิธีการเก็บข้อมูลจนพัฒนามาเป็นระบบไฟล์บนคอมพิวเตอร์

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

IBM 2401 Magnetic Tape Unit ภาพจาก https://www-03.ibm.com/ibm/history/exhibits/storage/storage_PH2401.html

IBM 2401 Magnetic Tape Unit ภาพจาก https://www-03.ibm.com/ibm/history/exhibits/storage/storage_PH2401.html

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

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

ปัจจุบันระบบไฟล์ที่ Mac ใช้กันเรียกว่า Hierarchical File System Plus หรือ HFS+ หรืออาจจะเรียกอีกอย่างว่า Mac OS Extended ใช้มาตั้งแต่ปี 1998 และหากย้อนกลับไปก่อนหน้านี้ ระบบไฟล์นี้ถูกพัฒนาต่อมาจาก Hierarchical File System หรือ HFS หรือเรียกอีกอย่างว่า Mac OS Standard ตั้งแต่ปี 1985 ซึ่งระบบไฟล์ HFS นี้ออกแบบมาเพื่อใช้งานกับ Macintosh รุ่นที่มีฮาร์ดดิสก์รุ่นแรก และ HFS+ นั้นมีการขยายบล็อกจาก 16-bit ของ HFS เป็น 32-bit เพื่อให้ใช้งานกับระบบคอมพิวเตอร์ 32-bit ได้ดียิ่งขึ้น

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

ในยุคปัจจุบันที่พื้นที่เก็บข้อมูลมักถูกแทนที่ด้วย SSD หรือ Flash Storage จึงทำให้ระบบไฟล์แบบเดิมที่ถูกออกแบบมาเพื่อฮาร์ดดิสก์ยุคเก่าไม่สามารถใช้งานกับอุปกรณ์ใหม่ได้อย่างเต็มประสิทธิภาพ ส่วนชิพประมวลผลทุกวันนี้ก็เร็วพอที่จะทำงานในแบบขนาน ประกอบกับปัจจุบันอุปกรณ์พกพาอย่าง iPhone, iPad, Apple Watch เป็นที่นิยมมากขึ้น ทำให้เทคโนโลยีเก่าอย่าง HFS+ ถึงจุดที่เริ่มไปไม่ได้ จึงเป็นที่มาของการออกแบบ APFS ระบบไฟล์ใหม่ ที่ยืดหยุ่นยิ่งกว่าเดิม พร้อมกับการพัฒนาต่อยอดไปอีกไกลในอนาคต

เทคโนโลยีใหม่ของ Apple File System

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

inode pointer structure (Wikipedia) - https://en.wikipedia.org/wiki/Inode_pointer_structure

inode pointer structure (Wikipedia) – https://en.wikipedia.org/wiki/Inode_pointer_structure

ระบบ Apple จะใช้วิธีการอธิบายข้อมูลในแบบ inode เหมือนกับ UNIX ตัวอื่น คือไฟล์จะถูกเก็บไว้ในบล็อกแต่ละบล็อกและ inode จะเป็นบล็อกพิเศษ มีหน้าที่สำหรับการเก็บเมตะดาต้าของไฟล์ (จำพวกเวลา, สิทธิการเข้าถึง และอื่น ๆ) และชี้ไปยังบล็อกของไฟล์ (ซึ่งอาจจะชี้ไปยังบล็อกตรง ๆ หรือชี้ไปยังบล็อกที่มีหน้าที่ชี้ไปยังบล็อกถัดไปก็ได้หากไฟล์มีขนาดใหญ่มาก ๆ)

การทำระบบไฟล์ให้เร็วขึ้น เป็นสิ่งสำคัญต่อความเร็วโดยรวมของอุปกรณ์เป็นอย่างมาก เนื่องจากการดำเนินงานของระบบปฏิบัติการจะต้องเกี่ยวข้องกับการอ่านและเขียนไฟล์ (I/O) อย่างเลี่ยงไม่ได้ แถมขั้นตอนการอ่านและเขียนไฟล์ใช้เวลานานมาก ระบบต้องมารอในขั้นตอนนี้ การประหยัดเวลาในขั้นตอนนี้ให้มากที่สุดก็ทำให้ระบบโดยรวมเร็วขึ้นได้

  • 64-bit: APFS เป็นระบบไฟล์ใหม่ ดังนั้นตัวระบบไฟล์จึงเป็นแบบ 64-bit เต็มตัว เพื่อให้เข้ากับระบบคอมพิวเตอร์ที่ทุกวันนี้เป็น 64-bit กันแทบทั้งหมดแล้ว ดังนั้นระบบไฟล์ APFS จึงรองรับไฟล์ได้สูงสุด 2^64 ไฟล์ หรือคิดเป็นประมาณ 9 ล้านล้านล้านไฟล์ (ซึ่งจริง ๆ ไฟล์ก็คือ inode) ถ้าถามว่าจริง ๆ แล้วผู้ใช้นั้นจะใช้กันถึงจำนวน 9 ล้านล้านไฟล์หรือไม่ คำตอบก็คงจะเป็น “ไม่” แต่ด้วยระบบการทำงานใหม่ของ APFS ทำให้จำนวนไฟล์ที่ต้องใช้ในระบบสูงขึ้น การขยาย inode ไปเลยตอนออกแบบระบบไฟล์ก็จะเหมาะกว่ามาติดปัญหาแล้วค่อยขยายทีหลัง

apfs_Clone_figure1_2x

  • Clones: APFS ใช้ระบบการโคลนไฟล์ ดังนั้นหากผู้ใช้คัดลอกไฟล์จากที่หนึ่งไปยังอีกที่หนึ่งในดิสก์เดียวกัน ไฟล์นั้นจะไม่ได้ถูกคัดลอกจริง ๆ แต่จะเป็นการโคลนมาแทน ซึ่งข้อดีของการโคลนก็คือเมื่อคัดลอกไฟล์จะไวมาก และไม่ต้องใช้พื้นที่เพิ่มเติม

apfs_Clone_figure2_2x

  • เมื่อมีการแก้ไขไฟล์ใด ๆ ส่วนที่แก้ไขจะถูกบันทึกเป็นส่วนเปลี่ยนแปลง ไม่ใช่บันทึกทับไฟล์ต้นฉบับ ทำให้มีข้อมูลสำหรับการย้อนเวอร์ชันไฟล์กลับไปยังเวอร์ชันที่แก้ไขก่อนหน้าโดยที่ไม่ต้องใช้พื้นที่จำนวนมากในการเก็บข้อมูลส่วนนี้
  • Space Sharing: APFS จะมีการแชร์พื้นที่เหลือภายในดิสก์จริง คือแทนที่จะแบ่งดิสก์ออกเป็นส่วน ๆ แบบคงตัวตั้งแต่ตอนสร้างพาร์ทิชั่น และถ้าจะย่อหรือขยายพาร์ทิชั่น ในหลายครั้งอาจจะต้องมีการย้ายไฟล์ภายในพาร์ทิชั่นไป ๆ มา ๆ จะเปลี่ยนเป็นแต่ละพาร์ทิชั่นสามารถย่อหรือขยายได้อย่างอิสระ และพื้นที่เหลือของแต่ละพาร์ทิชั่นจะถูกรายงานออกมาเป็นพื้นที่เหลือทั้งหมดแทน อย่างเช่น ฮาร์ดดิสก์ 100GB พาร์ทิชั่น A ใช้ไป 10GB พาร์ทิชั่น B ใช้ไป 20GB พื้นที่เหลือจะถูกรายงานเป็น 70GB
  • Quota and Reservation: เป็นฟีเจอร์เพิ่มเติมของ Space Sharing คือแม้ว่าจะย่อขยายพาร์ทิชั่นภายในดิสก์ได้อย่างอิสระ แต่ผู้ใช้สามารถกำหนด Quota คือขนาดสูงสุดของพาร์ทิชั่นได้ และในทางกลับกัน ผู้ใช้สามารถกำหนด Reservation หรือขนาดต่ำสุดของพาร์ทิชั่นได้เช่นกัน ซึ่งส่วนนี้เป็นตัวเลือกเพิ่มเติมที่จะกำหนดหรือไม่ก็ได้
  • Sparse File: ระบบจะจองพื้นที่ให้เฉพาะเมื่อต้องการใช้งานจริงเท่านั้น (ลักษณะเดียวกับ Lazy Initialization ในการเขียนโปรแกรม) ทำให้ไฟล์มีขนาดแบบ logical ใหญ่กว่าขนาดที่เขียนลงบนดิสก์จริง ๆ ได้ โดย API สามารถเรียกข้อมูลได้ทั้งขนาด logical และขนาดจริงสำหรับ sparse file ได้ด้วย และยังสามารถ seek through และ rewind back ไปยังส่วนต้นของ hole และส่วนของข้อมูลได้ โดยระบบนี้จะเป็นการทำให้การใช้งานบล็อกว่างบนดิสก์มีประสิทธิภาพยิ่งกว่าเดิม และลดเวลาการรอเขียนไฟล์ของผู้ใช้ได้ด้วย เพราะว่าไม่จำเป็นต้องจองพื้นที่จำนวนมากและเขียนข้อมูลเปล่า ๆ ลงไป แต่จะใช้วิธีการจองแบบเสมือนและจะเขียนข้อมูลเมื่อไรจึงจะเขียนลงดิสก์เมื่อนั้น

iphone-passcode

  • Encryption: APFS รองรับระบบเข้ารหัสไฟล์บนดิสก์เต็มรูปแบบ โดยรองรับโมเดลการเข้ารหัสสามแบบ คือ
    • ไม่เข้ารหัส
    • เข้ารหัสด้วยกุญแจเดียว
    • เข้ารหัสหลายกุญแจ แยกกุญแจเป็นต่อไฟล์และมีกุญแจแยกสำหรับเมตะดาต้าที่สำคัญ

    การเข้ารหัสหลายกุญแจเป็นการยกระดับความครบถ้วนสมบูรณ์ของข้อมูลผู้ใช้ คือถ้ามีใครสักคนที่สามารถทำลายความปลอดภัยในด้านกายภาพได้ และได้รับกุญแจของอุปกรณ์มาแล้ว ก็จะยังไม่สามารถถอดรหัสไฟล์ของผู้ใช้ได้ ทั้งนี้ Apple จะเลือกใช้ระบบการเข้ารหัสแบบ AES-XTS หรือ AES-CBC โดยขึ้นกับอุปกรณ์

  • Crash Protection: APFS ใช้ระบบ copy-on-write metadata scheme แบบใหม่ เพื่อให้ความมั่นใจว่าการอัพเดตไฟล์ต่าง ๆ จะสามารถป้องกันการแครชได้และไม่ก่อให้เกิดความเสียหายแก่ไฟล์ โดยไม่ต้องมีการเขียนแบบสองครั้งเหมือนกับระบบ Journaling เดิม วิธีทำงานคือ ระบบ copy-on-write จะเลือกพื้นที่ว่างขึ้นมา เพื่อเขียนการเปลี่ยนแปลงทั้งหมดจนกว่าจะเสร็จ เมื่อมั่นใจว่าระบบเขียนจนเสร็จแล้วและไม่มีปัญหาใด ๆ ไฟล์ก็จะอัพเดตโดยเพิ่มการชี้มายังพื้นที่ใหม่ที่เขียนลงไป ในขณะที่หากมีปัญหาเกิดขึ้น ระบบไฟล์จะทิ้งส่วนที่เขียนไป ซึ่งจะไม่เป็นการรบกวนไฟล์ต้นฉบับ ในขณะที่ Journaling ที่ใช้มาแต่เดิมจะมีการเขียนสองครั้ง คือเขียนลงในส่วนพิเศษที่เรียกว่า Journal ก่อน จากนั้นจึงจะเขียนทับไฟล์ต้นฉบับ
  • Atomic Safe-Save: ระบบป้องกันการกระทำไม่สำเร็จ อย่างเช่น การบันทึก, คัดลอก, ย้ายไฟล์ ระบบจะไม่เขียนการเปลี่ยนแปลงลงในข้อมูลจริง จนกว่าจะมั่นใจว่าการกระทำนั้นเสร็จสิ้นเรียบร้อยแล้วจึงจะบันทึกลงไป
  • Fast Directory Sizing: APFS สามารถคำนวณพื้นที่ทั้งหมดที่ใช้โดยลำดับชั้นของไดเรกทอรี่ได้อย่างว่องไว และอัพเดตข้อมูลได้เมื่อลำดับชั้นเปลี่ยนแปลงไป ระบบนี้จะทำงานโดย precomputing ขนาดของไดเรกทอรี่ตอนที่เพิ่มหรือลดคอนเทนต์ภายใน ซึ่งระบบนี้จะเหมาะมากสำหรับไดเรกทอรี่ที่เก็บไฟล์จำนวนมากและมีการเปลี่ยนแปลงน้อย เช่น Documents จะเหมาะกับระบบนี้ ส่วน /tmp ซึ่งมีการเปลี่ยนแปลง เพิ่มข้อมูลเข้า ๆ ออก ๆ บ่อยจะไม่เหมาะนัก ระบบนี้ APFS จะเปิดใช้งานกับไดเรกทอรี่ว่างเปล่า แต่ไม่สามารถเปิดระบบนี้กับไดเรกทอรี่ที่มีไฟล์หรือไดเรกทอรี่อื่นได้โดยตรง ต้องสร้างไดเรกทอรี่ใหม่ขึ้นมาและเปิดใช้งาน (โดยวิธีเปิดใช้งานจะต้องทำผ่าน API ของ APFS)

time-machine

  • Snapshot: APFS จะเก็บ snapshot หรืออธิบายง่าย ๆ คือเป็น “ข้อมูลในแต่ละช่วงเวลา” ของดิสก์ ไว้ในรูปแบบอ่านอย่างเดียว ซึ่งจะทำให้ระบบแบคอัพไฟล์สามารถทำงานได้ดีขึ้น และย้อนกลับการเปลี่ยนแปลงไปยังเวลาต่าง ๆ ได้ เนื่องจากระบบ APFS นั้นถูกออกแบบมาให้เขียนเฉพาะส่วนที่เปลี่ยนแปลงอยู่แล้ว จึงทำให้ snapshot สามารถทำงานได้ทันที
  • Process-level file system write locks: การล็อกพื้นที่ฮาร์ดดิสก์ไว้ให้โปรเซสเขียนนั้นถือเป็นสิ่งสำคัญ เพราะว่าจะได้ไม่มีโปรเซสอื่นมากวนพื้นที่ในขณะที่โปรเซสหนึ่งกำลังใช้งานพื้นที่นั้น ๆ อยู่ และเมื่อใช้งานเสร็จก็จะปลดล็อกคืนให้ระบบ ซึ่ง HFS+ จะใช้การล็อกทั้งดิสก์ คืออนุญาตให้โปรเซสเดียวเท่านั้นที่สามารถใช้งานเขียนดิสก์ได้ แต่ APFS จะล็อกแยกโปรเซสและส่วนของดิสก์ได้ คือให้โปรเซสหนึ่งเขียนเฉพาะส่วนของดิสก์ในส่วนหนึ่งที่ล็อกไว้เท่านั้น ไม่จำเป็นต้องล็อกทีเดียวทั้งดิสก์เพื่อให้โปรเซสเดียวเขียน ซึ่งแน่นอนว่าผลลัพธ์ที่ได้คือการเขียนไฟล์จะไวขึ้น
  • Write Coalescing: ปกติแล้วการเขียนไฟล์ลงฮาร์ดดิสก์ อาจจะมีการเขียนย่อย ๆ เป็นจำนวนหลาย ๆ ครั้ง และนี่คือปัญหาสำคัญอย่างหนึ่งเพราะการส่งข้อมูลไปเขียน จะต้องรอเวลานานมาก เพราะตัวเครื่องต้องปลุกอุปกรณ์และสั่งการเขียน ซึ่งถ้าเราทำหลาย ๆ ครั้งก็ทำให้ระบบช้าลงได้อย่างไม่ต้องสงสัย ดังนั้น APFS อาจจะมีการรวมไฟล์ไว้จำนวนมากในระดับหนึ่งก่อนแล้วค่อยเขียนลงดิสก์ทีเดียว เพื่อลดระยะเวลาการรอของระบบลง
  • Nanosecond Timestamp: ระบบจะบันทึกเวลาในระดับนาโนวินาที ละเอียดกว่า HFS+ ที่บันทึกระดับวินาที และขยาย timestamp ไปถึง 64-bit ฟีเจอร์นี้อาจไม่ได้เห็นผลมากนักในระดับการใช้งาน แต่ระดับระบบ ฟีเจอร์ต่าง ๆ ใน APFS จะได้ใช้ประโยชน์จากฟีเจอร์นี้

ข้อมูลฟีเจอร์ทั้งหมดของระบบไฟล์นี้ จริง ๆ แล้วอยู่เบื้องหลัง (แต่สำคัญกับนักพัฒนาโปรแกรมพอสมควร) ส่วนผลลัพธ์ที่แสดงออกมาคือผู้ใช้จะได้เห็นผลการทำงานที่ระบบไฟล์ทำให้ระบบโดยรวมเร็วขึ้น ฝั่งอุปกรณ์พกพาได้ใช้ไปตั้งแต่ iOS 10.3, watchOS 3.2 และ tvOS 10.2 เมื่อปีที่แล้ว ส่วน Mac เพิ่งจะได้ใช้ใน macOS 10.13 นี้ โดยชิพทุกวันนี้ที่เป็น 64-bit และมีการประมวลผลแบบขนานจำนวนมาก การปรับปรุงระบบไฟล์ให้ดีขึ้นจะทำให้ระบบสามารถใช้งานอุปกรณ์เก็บข้อมูลได้อย่างเต็มประสิทธิภาพ

Apple ได้เปิด API ของ APFS สำหรับให้นักพัฒนาได้ใช้งานด้วย รายละเอียดเพิ่มเติมให้ดูที่ Apple Developer

ข้อมูลบางส่วนจาก