
เมื่อมีการปล่อย OpenZFS เวอร์ชันใหม่ ผู้ดูแลระบบหลายคนมักสงสัยว่าควรจะอัปเดตตอนนี้เลยหรือควรรอให้สถานการณ์คลี่คลายก่อน Openzfs 2.4 คำถามนี้ยิ่งน่าสนใจมากขึ้นไปอีก เพราะว่า มันมาพร้อมกับการเปลี่ยนแปลงครั้งใหญ่ ในด้านประสิทธิภาพ เครื่องมือการจัดการใหม่ และการถกเถียงในชุมชนเกี่ยวกับการนำเวอร์ชันทดลองใช้งานไปใช้ในระบบการผลิต
คุณสมบัติทั่วไปของ OpenZFS 2.4
OpenZFS 2.4 ถูกนำเสนอในฐานะเวอร์ชันหนึ่งของ บุคลิกมั่นคงและค่อนข้างทะเยอทะยาน โครงการนี้ได้รับการออกแบบมาสำหรับทั้งสภาพแวดล้อม Linux และ FreeBSD โดยในขณะที่กำหนดชื่อโครงการอย่างเป็นทางการนั้น โครงการได้เน้นย้ำว่าเป้าหมายคือการส่งเสริมความสมบูรณ์ของระบบไฟล์และตัวจัดการวอลุ่มอย่างต่อเนื่อง พร้อมทั้งรักษาความเข้ากันได้กับเคอร์เนลรุ่นล่าสุดและรับรองความปลอดภัยของข้อมูล
เวอร์ชันนี้ได้รวบรวมคุณสมบัติหลายอย่างที่อยู่ระหว่างการพัฒนามาตั้งแต่ต้น พระราม 2.3 และการแก้ไขเพิ่มเติมในระหว่างนั้น: การปรับปรุงประสิทธิภาพใน ชั้นการเข้ารหัสเครื่องมือการจัดการใหม่ ๆ เช่น การเขียนใหม่ของ ZFSความสามารถในการกำหนดโควต้าที่ยืดหยุ่นมากขึ้น และการเปลี่ยนแปลงภายในที่ออกแบบมาเพื่อลดการแตกกระจายของข้อมูล เพิ่มประสิทธิภาพการลดความซ้ำซ้อน และปรับปรุงแง่มุมที่ซับซ้อน เช่น การจัดการกลุ่มบล็อก หรือพฤติกรรมกับดิสก์ที่มีปัญหา
ชุมชนยังให้ความสนใจเป็นพิเศษกับเรื่องนี้ด้วย การผสานรวมเข้ากับเคอร์เนลสมัยใหม่ใน Linux มีการประกาศรองรับตั้งแต่เวอร์ชัน 4.18 จนถึงเวอร์ชัน LTS ล่าสุด (รวมถึงเคอร์เนล 6.18 ในช่วงเวลาที่เวอร์ชัน 2.4 ออกวางจำหน่ายอย่างเสถียร) ในขณะที่ใน FreeBSD รองรับเวอร์ชันตั้งแต่ 13.3 ขึ้นไป รวมถึงเวอร์ชัน 14.0 และกำลังเตรียมเวอร์ชันใหม่กว่า เช่น 15.0
การรองรับแพลตฟอร์มและความเข้ากันได้ของเคอร์เนลกับ OpenZFS 2.4
หนึ่งในเสาหลักของ OpenZFS 2.4 คือ... ความเข้ากันได้กับแพลตฟอร์มที่หลากหลายสำหรับผู้ดูแลระบบหลายคน นี่เป็นเรื่องสำคัญ เพราะช่วยให้พวกเขาสามารถอัปเกรดเวอร์ชันระบบปฏิบัติการได้โดยไม่สูญเสียคุณสมบัติของ ZFS ที่คาดหวังไว้
ในส่วนของ Linux นั้น OpenZFS 2.4 ระบุว่าสามารถใช้งานร่วมกับเคอร์เนลเวอร์ชันตั้งแต่ 4.18 ขึ้นไปได้ 6.18 เสถียรเนื้อหาครอบคลุมตั้งแต่ระบบปฏิบัติการระดับองค์กรแบบดั้งเดิมไปจนถึงสภาพแวดล้อมที่ทันสมัยที่สุดซึ่งอัปเดตตามเคอร์เนลล่าสุด และระหว่างนั้นก็ครอบคลุมระบบปฏิบัติการทั่วไปหลากหลายรุ่น ได้แก่ เวอร์ชัน LTS ที่ใช้ในเซิร์ฟเวอร์ เคอร์เนลแบบกำหนดเอง และเวอร์ชันที่โครงการต่างๆ เช่น CentOS Stream หรือโครงการที่คล้ายกันนำมาใช้
ใน FreeBSD เวอร์ชันใหม่รองรับตั้งแต่ FreeBSD 13.3 นับจากนี้เป็นต้นไป รวมถึงเวอร์ชัน 14.0 และเวอร์ชันต่อๆ ไปที่กำลังจะออกมา เช่น เวอร์ชัน 15.0 ที่กำลังจะมาถึง ช่วงเวอร์ชันที่กว้างนี้ทำให้มั่นใจได้ว่าทั้งระบบที่ใช้งานอยู่แล้วและระบบที่จะนำไปใช้งานในอนาคตสามารถใช้งาน OpenZFS ได้อย่างต่อเนื่องโดยไม่จำเป็นต้องใช้แพตช์แปลกๆ หรือโซลูชันแบบกำหนดเอง
เบื้องหลังความเข้ากันได้นี้คือความพยายามอย่างต่อเนื่องซึ่งเห็นได้ชัดเจนอยู่แล้วในซีรีส์นี้ OpenZFS 2.3.xการอัปเดตก่อนหน้านี้ เช่น เวอร์ชัน 2.3.4 ได้ขยายการรองรับเคอร์เนลไปจนถึงเวอร์ชัน 6.16 และรวบรวมแพตช์ต่างๆ ที่เริ่มปรากฏในเวอร์ชัน RC ก่อนหน้า OpenZFS 2.4 สานต่อจากจุดนั้นและก้าวไปอีกขั้น โดยปรับให้สอดคล้องกับเคอร์เนลล่าสุดและปรับปรุงประสบการณ์การใช้งานสำหรับผู้ที่อัปเดตระบบพื้นฐานบ่อยครั้ง
โควต้าและความสามารถในการจัดการพื้นที่ใหม่
หนึ่งในคุณสมบัติใหม่ที่ใช้งานได้จริงที่สุดสำหรับผู้ดูแลระบบคือการปรับปรุงระบบต่างๆ โควต้าที่กำหนดไว้ล่วงหน้าOpenZFS 2.4 นำเสนอความสามารถในการกำหนดโควต้าเริ่มต้นสำหรับผู้ใช้ กลุ่ม และโปรเจกต์ เพื่อให้สามารถควบคุมการใช้พื้นที่ได้อย่างสม่ำเสมอมากขึ้น โดยไม่ต้องกำหนดค่าแต่ละกรณีด้วยตนเอง
ฟังก์ชันนี้ช่วยให้สามารถตั้งค่าได้ เช่น การตั้งค่า ค่าธรรมเนียมพื้นฐานสำหรับผู้ใช้ทุกคน ซึ่งสร้างขึ้นในชุดข้อมูลเฉพาะ หรือเพื่อกำหนดขีดจำกัดของโครงการที่จะถูกนำไปใช้โดยอัตโนมัติเมื่อมีการจัดสรรทรัพยากรใหม่ เป็นเครื่องมือที่มีประโยชน์มากในสภาพแวดล้อมที่มีผู้ใช้หลายคน การโฮสติ้ง ห้องปฏิบัติการ และสถานการณ์ใด ๆ ที่คุณต้องการป้องกันไม่ให้ความผิดพลาดทำให้ทรัพยากรทั้งหมดถูกใช้จนหมด
การรองรับโควต้าเริ่มต้นไม่ได้มาแทนที่โควต้าเฉพาะที่มีอยู่เดิม แต่เป็นการเสริมกัน ผู้ดูแลระบบสามารถกำหนดได้ การเมืองโลก จากนั้นจึงปรับแต่งเพิ่มเติมโดยกำหนดข้อยกเว้นสำหรับผู้ใช้หรือกลุ่มเฉพาะที่ต้องการพื้นที่มากขึ้น (หรือน้อยลง) ทั้งหมดนี้จัดการได้ด้วยเครื่องมือ ZFS มาตรฐาน โดยคงรูปแบบคุณสมบัติแบบเดิมที่คุ้นเคยอยู่แล้ว
การอ่านเขียนโดยตรง (Direct I/O), การอ่านเขียนโดยไม่ใช้แคช (Cacheless I/O) และพฤติกรรมการเขียนที่ไม่ตรงแนว (Misaligned Write)
ในแง่ของประสิทธิภาพ OpenZFS 2.4 นำมาซึ่งการเปลี่ยนแปลงที่น่าสนใจอย่างมากในการจัดการ อินพุต/เอาต์พุตโดยตรงจนถึงปัจจุบัน การใช้ I/O โดยตรงในบางสถานการณ์อาจขัดแย้งกับการจัดเรียงการเขียนและส่งผลให้เส้นทางการทำงานของโค้ดไม่เหมาะสม เวอร์ชันใหม่นี้ได้เพิ่มกลไกเพื่อให้เมื่อไม่สามารถใช้งาน I/O โดยตรงได้อย่างเหมาะสม ระบบจะใช้โหมดทางเลือกอื่นแทน IO น้ำหนักเบา ไม่ต้องใช้แคช ออกแบบมาโดยเฉพาะสำหรับสถานการณ์แบบนี้
ในทางปฏิบัติแล้วหมายความว่าอย่างไร? หมายความว่างานเขียนที่ไม่สอดคล้องกับรูปแบบที่คาดหวังไว้จะไม่ใช่กรณีผิดปกติอีกต่อไป แต่จะได้รับการจัดการด้วยวิธีการที่เหมาะสมแทน เส้นทางที่เหมาะสมที่สุด ภายใน ZFS ค่าใช้จ่ายส่วนเกินลดลง หลีกเลี่ยงปัญหาคอขวดบางประการ และทำให้พฤติกรรมคาดเดาได้มากขึ้น โดยเฉพาะในสภาพแวดล้อมที่แอปพลิเคชันที่ใช้ I/O โดยตรงทำงานร่วมกับแอปพลิเคชันอื่นที่ไม่ใช้ I/O โดยตรง
การเปลี่ยนแปลงนี้มีประโยชน์อย่างยิ่งในงานที่ต้องการประสิทธิภาพสูง โดยมีเป้าหมายคือ บีบให้ประสิทธิภาพลดลง OpenZFS เป็นระบบจัดเก็บข้อมูลที่ปลอดภัยโดยไม่ลดทอนการรับประกันความสมบูรณ์ของข้อมูลที่ ZFS มอบให้ ด้วยระบบสำรองข้อมูลที่ออกแบบมาโดยเฉพาะ OpenZFS จึงเหมาะสมกับความเป็นจริงของแอปพลิเคชันจำนวนมากที่ไม่จำเป็นต้องปฏิบัติตามแนวทางการทำงานที่เหมาะสมเสมอไป
การควบคุมการจัดสรรแบบรวมศูนย์และการลดการแตกกระจายใน OpenZFS 2.4
การเปลี่ยนแปลงที่สำคัญอีกประการหนึ่งที่มาพร้อมกับ OpenZFS 2.4 คือการนำอัลกอริทึมใหม่มาใช้ การจำกัดการจัดสรรแบบรวมชื่อนี้มีที่มาที่มุ่งลดการแบ่งส่วนของอุปกรณ์เสมือน (vdevs) และปรับปรุงการกระจายการเขียนข้อมูลเมื่อระบบอยู่ภายใต้แรงกดดัน
จนถึงปัจจุบัน การจัดสรรบล็อกในสถานการณ์ที่มีภาระงานสูงอาจส่งผลให้เกิดรูปแบบการกระจายที่เมื่อเวลาผ่านไปจะเอื้อประโยชน์ต่อฝ่ายใดฝ่ายหนึ่ง การแตกตัวของ vdevอัลกอริทึมแบบรวมนี้มีเป้าหมายเพื่อปรับอัตราการจัดสรรให้สอดคล้องกัน เพื่อให้พูลรักษาสภาพโครงสร้างที่เป็นระเบียบมากขึ้น และลดผลกระทบด้านประสิทธิภาพเมื่อพื้นที่เริ่มเหลือน้อย หรือเมื่อขนาดบล็อกมีความหลากหลายมาก
การเปลี่ยนแปลงประเภทนี้อาจไม่เด่นชัดเท่ากับการเพิ่มคำสั่งใหม่ แต่มีคุณค่าอย่างมากในการใช้งานระยะยาว ซึ่งพูลจะเติบโต มีการปรับสมดุล มีการเพิ่มสภาพแวดล้อมการพัฒนาเสมือน (vdevs) ใหม่ และมีการดำเนินการบำรุงรักษาเป็นเวลาหลายปี การปรับปรุงการควบคุมการจัดสรร OpenZFS 2.4 ช่วยรักษาความต่อเนื่องในการใช้งาน พฤติกรรมที่มีเสถียรภาพมากขึ้นเมื่อเวลาผ่านไปแม้กระทั่งในขณะที่ระบบถูกใช้งานอย่างหนักก็ตาม
การปรับปรุงการเข้ารหัสด้วย AVX2 และ AES-GCM
ในด้านความปลอดภัยและประสิทธิภาพ OpenZFS 2.4 มีการปรับปรุงประสิทธิภาพหลายประการในการใช้งาน AVX2 สำหรับ AES-GCMกล่าวโดยสรุปคือ การเข้ารหัสได้รับการปรับปรุงให้ดียิ่งขึ้นเพื่อใช้ประโยชน์จากความสามารถของโปรเซสเซอร์สมัยใหม่ที่มีคำสั่งเวกเตอร์ขั้นสูงเหล่านี้ได้อย่างเต็มประสิทธิภาพ
ผลลัพธ์ที่ได้คือการเข้ารหัสที่เร็วขึ้นโดยไม่ลดทอนการรับประกันด้านการเข้ารหัส ซึ่งเห็นได้ชัดเจนเป็นพิเศษในระบบที่จัดการข้อมูลที่เข้ารหัสจำนวนมาก หรือในสภาพแวดล้อมที่มีการดำเนินการพร้อมกันหลายอย่างกับชุดข้อมูลที่ได้รับการปกป้อง ลดภาระการทำงานของ CPU การเข้ารหัสช่วยให้สามารถจัดการคำขอได้มากขึ้น หรือสามารถจัดสรรทรัพยากรให้กับงานระบบอื่นๆ ได้มากขึ้น
ในทางปฏิบัติ ผู้ดูแลระบบยังคงสามารถพึ่งพาฟังก์ชันต่างๆ เหล่านี้ได้ต่อไป การเข้ารหัสแบบเนทีฟของ ZFS เพื่อปกป้องข้อมูลที่ละเอียดอ่อนโดยไม่ส่งผลกระทบต่อประสิทธิภาพการทำงานอย่างมากเหมือนในรุ่นก่อนๆ การเข้ารหัสไม่ได้ "ฟรี" แต่จะจัดการได้ง่ายขึ้นภายใต้ภาระงานที่ก่อนหน้านี้เป็นคอขวดอย่างชัดเจน
ZIL ใน vdev พิเศษและการปรับปรุงใน special_small_blocks
OpenZFS 2.4 ยังนำเสนอคุณสมบัติใหม่ ๆ เกี่ยวกับ... vdev พิเศษอุปกรณ์เหล่านั้นได้รับการออกแบบมาเพื่อจัดเก็บข้อมูลบางประเภท (เช่น เมตาเดต้า บล็อกขนาดเล็ก หรือตารางการลดความซ้ำซ้อน) บนสื่อบันทึกข้อมูลที่เร็วกว่า ซึ่งโดยทั่วไปคือ SSD หรือ NVMe
ในอีกด้านหนึ่ง ปัจจุบันสามารถอนุญาตให้ ZIL (ZFS Intent Log) ควรจัดเก็บไฟล์ไว้บน vdev เฉพาะเมื่อมีให้ใช้งาน วิธีนี้จะช่วยให้การเขียนข้อมูลแบบซิงโครนัสกระจุกตัวอยู่บนอุปกรณ์ที่มีความหน่วงต่ำได้ง่ายขึ้น ซึ่งจะช่วยปรับปรุงเวลาตอบสนองของแอปพลิเคชันที่ต้องพึ่งพาการทำงานแบบซิงโครนัสอย่างมาก เช่น ฐานข้อมูลหรือระบบส่งข้อความที่มีการจัดเก็บข้อมูลอย่างถาวร
ในทางกลับกัน พฤติกรรมของคุณสมบัตินั้นก็ขยายออกไป special_small_blocks ดังนั้น งานเขียนของ ZVOL นอกจากนี้ ไฟล์เหล่านั้นยังสามารถจัดเก็บใน vdev พิเศษได้ ไม่ใช่แค่ในบล็อกไฟล์ปกติบางบล็อกเท่านั้น ยิ่งไปกว่านั้น ข้อจำกัดที่ว่าค่าต้องเป็นกำลังของสองนั้นถูกผ่อนปรนลง ทำให้ผู้ดูแลระบบสามารถเลือกขนาดที่ละเอียดขึ้นเพื่อให้เหมาะกับปริมาณงานจริง แทนที่จะถูกจำกัดด้วยตัวเลือกที่ตายตัว
เมื่อรวมกันแล้ว การปรับปรุงเหล่านี้ทำให้สามารถออกแบบสถาปัตยกรรมจัดเก็บข้อมูลได้ โดยที่ ข้อมูลที่สำคัญที่สุด (เมตาเดต้า บล็อกขนาดเล็ก ZIL ตารางลดความซ้ำซ้อน ฯลฯ) จะถูกจัดเก็บไว้บนสื่อบันทึกข้อมูลที่เร็วกว่า ในขณะที่ข้อมูลส่วนใหญ่ยังคงอยู่บนดิสก์ที่มีราคาถูกกว่า ทั้งหมดนี้มาพร้อมกับความยืดหยุ่นที่มากขึ้นในการกำหนดว่าอะไรคือ "ขนาดเล็ก" และอะไรไม่ใช่
zfs rewrite และ zfs rewrite -P: ย้ายข้อมูลอย่างมีประสิทธิภาพ
ซีรีส์ 2.3 ได้นำเสนอคุณสมบัติที่โดดเด่นที่สุดอย่างหนึ่งในยุคปัจจุบัน นั่นคือ ระบบควบคุมย่อย การเขียนใหม่ของ ZFSOpenZFS 2.4 พัฒนาเครื่องมือนี้ไปอีกขั้นด้วยการเพิ่มฟังก์ชันการทำงานแบบใหม่เข้าไป zfs rewrite -Pซึ่งจะเพิ่มความเป็นไปได้ใหม่ๆ ในการย้ายข้อมูลภายในพูล
คำสั่ง zfs rewrite อนุญาตให้ “ที่จะเขียนใหม่"เนื้อหาของไฟล์หรือชุดข้อมูลจะถูกคัดลอกโดยไม่เปลี่ยนแปลงความหมายเชิงตรรกะ แต่จะถูกย้ายไปยังพื้นที่อื่นที่มีคุณสมบัติภายในแตกต่างกัน ซึ่งช่วยให้สามารถแก้ไขเปลี่ยนแปลงต่างๆ เช่น อัลกอริทึมการบีบอัด ประเภทของค่าตรวจสอบความถูกต้อง การใช้งานการลดความซ้ำซ้อน จำนวนสำเนา หรือแม้แต่เลือกอุปกรณ์ที่ต้องการใช้งานได้ โดยไม่จำเป็นต้องคัดลอกข้อมูลไปยังพื้นที่ของผู้ใช้และเขียนทับใหม่"
วิธีนี้มีข้อดีหลายประการอย่างชัดเจน ได้แก่ ลดปริมาณการรับส่งข้อมูล I/O เมื่อเทียบกับวิธี "คัดลอกและเปลี่ยนชื่อ" แบบดั้งเดิม ลดผลกระทบต่อแคชให้น้อยที่สุด และหลีกเลี่ยงช่วงเวลาที่ยาวนานในการย้ายข้อมูลผ่านเครื่องมือภายนอก นอกจากนี้ เนื่องจากไม่มีการเปลี่ยนแปลงเชิงตรรกะของเนื้อหา เวลาแก้ไข (mtime) จะไม่เปลี่ยนแปลง หรือคุณสมบัติอื่นๆ ที่ผู้ใช้มองเห็นได้ ซึ่งหมายความว่าแอปพลิเคชันจำนวนมากไม่รับรู้ถึงการดำเนินการนี้ด้วยซ้ำ
ตัวเลือก zfs rewrite -P เพิ่มความเป็นไปได้ของ รักษาเวลาเกิดตามหลักตรรกะ ควรเก็บรักษาข้อมูลเป็นบล็อกให้คงที่ทุกครั้งที่เป็นไปได้ ซึ่งจะช่วยลดขนาดของกระแสการจำลองแบบเพิ่มทีละน้อย การรักษาข้อมูลนี้ให้คงที่จะช่วยให้การส่ง/รับข้อมูลในครั้งต่อไปสามารถระบุได้ดียิ่งขึ้นว่าอะไรเปลี่ยนแปลงไปและอะไรยังคงเหมือนเดิม ซึ่งจะช่วยลดปริมาณข้อมูลที่ต้องย้ายระหว่างระบบ
ข้อดีที่สำคัญอีกประการหนึ่งคือ กระบวนการเขียนทับได้รับการปกป้องด้วย ล็อคช่วง ปกติแล้ว จึงสามารถทำงานควบคู่ไปกับภาระงานจริงได้โดยไม่ทำให้ระบบติดขัดโดยไม่จำเป็น ในชุดข้อมูลที่มี sync=always ประโยชน์จะยิ่งมากขึ้นไปอีก เพราะการที่ไม่ต้องมีการแก้ไขข้อมูลเชิงตรรกะใดๆ ทำให้ไม่มีการเขียนข้อมูลเพิ่มเติมลงใน ZIL ซึ่งจะช่วยหลีกเลี่ยงค่าใช้จ่ายเพิ่มเติมในการดำเนินการแบบซิงโครนัส
ตัวเลือกการจัดการใหม่ใน OpenZFS 2.4: -a|–all, การคัดกรองช่วง และการดึงข้อมูลล่วงหน้า BRT
OpenZFS 2.4 ยังได้ปรับปรุงและขยายชุดเครื่องมือการจัดการด้วยตัวเลือกที่มีประโยชน์มากมายสำหรับการใช้งานในชีวิตประจำวัน หนึ่งในนั้นคือการเพิ่มตัวเลือก -a|–ทั้งหมด ในคำสั่งที่ดำเนินการบำรุงรักษาพูล เช่น การล้างข้อมูล การตัดแต่ง หรือการเริ่มต้นใช้งาน
ตัวเลือกนี้ทำให้สามารถเริ่มการดำเนินการที่ส่งผลกระทบต่อ... สระว่ายน้ำนำเข้าทั้งหมด ดำเนินการทั้งหมดในคราวเดียว แทนที่จะต้องดำเนินการทีละรายการด้วยตนเอง ซึ่งช่วยลดความซับซ้อนของงานบนเซิร์ฟเวอร์ที่จัดการพูลจำนวนมาก ลดข้อผิดพลาดจากมนุษย์ และช่วยให้การทำงานอัตโนมัติง่ายขึ้น
นอกจากนี้ ยังมีความเป็นไปได้ในการเปิดตัว zpool scrub จำกัดไว้ที่ ช่วงเวลาที่กำหนด ผ่านทางตัวเลือกต่างๆ -S -Eฟังก์ชันนี้มีประโยชน์อย่างมากเมื่อคุณต้องการตรวจสอบเฉพาะช่วงเวลาที่สงสัยว่ามีปัญหา หรือเมื่อคุณต้องการกระจายต้นทุนของการตรวจสอบออกไปในการดำเนินการย่อยหลายครั้ง เพื่อไม่ให้ส่งผลกระทบต่อประสิทธิภาพโดยรวมมากเกินไป
อีกหนึ่งคุณสมบัติใหม่ที่เกี่ยวข้องคือการเพิ่ม zpool prefetch -t brt เพื่อโหลดข้อมูลล่วงหน้าลงในหน่วยความจำ ตารางอ้างอิงบล็อก (ตารางการคัดลอกบล็อก)これによりสามารถใช้ประโยชน์จากฟังก์ชันการโคลนบล็อกที่แนะนำในเวอร์ชันก่อนหน้าได้อย่างมีประสิทธิภาพมากขึ้น ลดความล่าช้าเมื่อเข้าถึงโครงสร้างภายในที่เกี่ยวข้องกับคุณสมบัตินี้
สิทธิ์การเข้าถึง เครื่องมือที่เปลี่ยนชื่อ และการปรับปรุงการลบข้อมูลซ้ำและการโคลนบล็อก
ในบรรดาการปรับปรุงเล็กน้อยแต่สำคัญที่ช่วยยกระดับประสบการณ์การใช้งาน OpenZFS 2.4 ได้เพิ่มสิทธิ์การเข้าถึงแบบใหม่ ส่ง:เข้ารหัสออกแบบมาเพื่อให้สามารถควบคุมได้อย่างละเอียดมากขึ้นว่าใครสามารถส่งข้อมูลที่เข้ารหัสได้ ซึ่งเหมาะสำหรับทีมที่มีการแบ่งแยกความรับผิดชอบระหว่างผู้จัดการสแนปช็อต ผู้จัดการการจำลองข้อมูล และผู้ที่มีสิทธิ์เข้าถึงคีย์การเข้ารหัส
สาธารณูปโภคแบบดั้งเดิมก็ได้รับการเปลี่ยนชื่อเช่นกัน เช่น arc_summary y arcstatซึ่งต่อมาจึงกลายเป็นที่รู้จัก zarcsummary y zarcstatการเปลี่ยนแปลงนี้ช่วยหลีกเลี่ยงความขัดแย้งด้านชื่อ และทำให้ชัดเจนยิ่งขึ้นว่านี่คือเครื่องมือที่เกี่ยวข้องกับ ZFS ซึ่งมีประโยชน์ในระบบที่มีส่วนประกอบหลายอย่างที่แสดงคำสั่งที่คล้ายกัน
ภายในแล้ว ซีรี่ส์ 2.4 จะสะสมพลังงาน การปรับปรุงและแก้ไขข้อบกพร่องใหม่ หลักการนี้ใช้ได้ทั้งกับการลดความซ้ำซ้อนและการโคลนบล็อก โครงสร้างข้อมูลได้รับการปรับปรุง แก้ไขกรณีพิเศษ และแสวงหารูปแบบการเข้าถึงที่ดีขึ้น เพื่อลดผลกระทบต่อหน่วยความจำและ CPU ให้สามารถจัดการได้ง่ายขึ้น การเปลี่ยนแปลงเหล่านี้ผู้ใช้จะมองไม่เห็นโดยตรง แต่ส่งผลให้การทำงานมีเสถียรภาพมากขึ้นและลดปัญหาที่ไม่คาดคิดภายใต้ภาระงานที่ซับซ้อน
บล็อกกลุ่ม, การเลื่อนตำแหน่ง, vdev ย่อยที่ทำงานช้า และโทโพโลยีพิเศษ
OpenZFS 2.4 ยังรวมถึงการปรับปรุงและแก้ไขข้อบกพร่องต่างๆ มากมายเมื่อเทียบกับเวอร์ชันก่อนหน้า บล็อกแก๊งนี่คือคุณสมบัติภายในของระบบที่ออกแบบมาเพื่อจัดการกับบล็อกที่ไม่สามารถวางได้ตามปกติ แม้ว่าผู้ใช้ส่วนใหญ่จะไม่โต้ตอบกับส่วนนี้โดยตรง แต่ความผิดพลาดใดๆ ในส่วนนี้ของโค้ดอาจส่งผลร้ายแรง ดังนั้นการแก้ไขและปรับปรุงประสิทธิภาพต่างๆ ที่รวมอยู่จึงเป็นข่าวดีสำหรับความเสถียรโดยรวมของระบบ
ในขณะเดียวกัน การจัดการของ ชิฟต์พารามิเตอร์ที่กำหนดหน่วยการจัดสรรขั้นต่ำที่สอดคล้องกับขนาดทางกายภาพของเซกเตอร์ของอุปกรณ์ การจัดการพารามิเตอร์การเลื่อนที่ดีขึ้นจะช่วยลดโอกาสในการเขียนข้อมูลเกินความจำเป็นลงในดิสก์ที่มีเซกเตอร์ขนาดใหญ่ และช่วยรักษาประสิทธิภาพในระดับที่ยอมรับได้ตลอดอายุการใช้งานของพูล
อีกหนึ่งคุณสมบัติใหม่ที่น่าสนใจคือ ความสามารถในการทำให้ vdev ย่อยทำงานในลักษณะที่กำหนด ช้าผิดปกติ สามารถ "พักการทำงาน" ชั่วคราวได้ แทนที่จะทำให้ประสิทธิภาพของระบบโดยรวมลดลง ก็สามารถพักการทำงานชั่วคราวได้ ซึ่งมีประโยชน์มากเมื่อดิสก์เริ่มมีปัญหา ไดรฟ์มีปัญหาเป็นระยะ หรือสภาพแวดล้อมมีฮาร์ดแวร์ที่ไม่สอดคล้องกัน
ในที่สุด พวกเขาก็มี ข้อจำกัดทางโทโพโลยีที่ผ่อนคลาย ใน VDEV พิเศษและการลดความซ้ำซ้อน วิธีนี้ช่วยให้มีความยืดหยุ่นมากขึ้นในการออกแบบพูลที่มีการกำหนดค่าขั้นสูง ทำให้สามารถผสานรวมอุปกรณ์ความเร็วสูงสำหรับเมตาเดตา ตารางที่ลดความซ้ำซ้อน ZIL และองค์ประกอบสำคัญอื่นๆ ได้ดียิ่งขึ้น โดยไม่ต้องพบกับข้อจำกัดที่เข้มงวดเกินไปในการกำหนดเค้าโครง
OpenZFS 2.3.4: การบำรุงรักษา การเขียนทับ ZFS ครั้งแรก และการรวมระบบ
เพื่อให้เข้าใจถึงความก้าวหน้าครั้งสำคัญที่เวอร์ชัน 2.4 นำมาซึ่งอย่างแท้จริง เราควรมาดูข้อมูลต่อไปนี้กันสักเล็กน้อย Openzfs 2.3.4ซึ่งเป็นเวอร์ชันสำหรับการบำรุงรักษาที่ปรากฏขึ้นไม่นานก่อนหน้านี้ และวางรากฐานบางส่วนสำหรับสิ่งที่ได้รับการรวมเข้าไว้ในสาขาหลักใหม่ในภายหลัง
เวอร์ชัน 2.3.4 ออกมาสองเดือนหลังจากเวอร์ชัน 2.3.3 โดยเน้นหนักไปที่... ความทนทานและความเข้ากันได้มันได้ขยายการรองรับเคอร์เนล Linux ไปจนถึงเวอร์ชัน 6.16 โดยคงเวอร์ชันขั้นต่ำไว้ที่ 4.18 และยืนยันความเข้ากันได้กับ FreeBSD ตั้งแต่เวอร์ชัน 13.3 ขึ้นไป รวมถึงเวอร์ชัน 15.0 ที่กำลังจะมาถึง กล่าวอีกนัยหนึ่งคือ มันได้เตรียมพื้นฐานสำหรับการทำงานร่วมกับระบบพื้นฐานสมัยใหม่โดยไม่ลดทอนเสถียรภาพ
การตรวจสอบครั้งนี้ถือเป็นการเปิดตัวคำสั่งเวอร์ชันแรก zfs rewriteออกแบบมาอย่างแม่นยำสำหรับ ย้ายข้อมูลโดยไม่เปลี่ยนแปลงเนื้อหาเชิงตรรกะของข้อมูล และโดยไม่ต้องใช้กลยุทธ์ที่ยุ่งยากกว่า เช่น การคัดลอก/เปลี่ยนชื่อ หรือการส่ง/รับพร้อมกับการเปลี่ยนชื่อชุดข้อมูล เป้าหมายคือการนำเสนอเครื่องมือที่สามารถปรับสมดุลพูลหลังจากเพิ่ม vdev ลดการแตกกระจายของไฟล์ที่เขียนแบบสุ่ม หรือใช้คุณสมบัติการจัดเก็บใหม่กับข้อมูลที่มีอยู่
เมื่อเปรียบเทียบกับทางเลือกแบบดั้งเดิม zfs rewrite วิธีนี้เร็วกว่าเพราะหลีกเลี่ยงการส่งข้อมูลไปยังพื้นที่ของผู้ใช้ ในชุดข้อมูลที่มี sync=alwaysยิ่งไปกว่านั้น ยังช่วยเพิ่มประสิทธิภาพการทำงาน เนื่องจากข้อมูลไม่ได้ถูกแก้ไขในเชิงตรรกะ จึงไม่มีการเขียนข้อมูลเพิ่มเติมลงใน ZIL ทั้งหมดนี้โดยไม่ต้องแก้ไขอะไรเลย เวลาแก้ไข หรือข้อมูลเมตาอื่นๆ สามารถมองเห็นได้โดยแอปพลิเคชัน ซึ่งช่วยลดผลกระทบต่อซอฟต์แวร์ที่ทำงานอยู่ด้านบนให้น้อยที่สุด
เวอร์ชัน 2.3.4 ยังมีคุณสมบัติต่างๆ อีกมากมาย การตั้งค่าเฉพาะของ FreeBSDการอัปเดตครั้งนี้ประกอบด้วยการปรับปรุงบรรจุภัณฑ์และการแก้ไขเล็กน้อยหลายจุดเพื่อปรับปรุงโค้ดให้ดียิ่งขึ้น ไม่ได้มีจุดประสงค์เพื่อนำเสนอการเปลี่ยนแปลงที่ส่งผลกระทบอย่างมาก แต่เป็นการปรับปรุงเสถียรภาพก่อนที่จะอัปเกรดเป็นเวอร์ชัน 2.4 ซึ่งมีฟีเจอร์ใหม่มากมาย
OpenZFS 2.4 RC1, RC2, RC4: การทดสอบ ข้อเสนอแนะ และการสนทนาในชุมชน
ก่อนที่เวอร์ชัน 2.4 จะได้รับการประกาศว่าเสถียร โครงการได้ปล่อยเวอร์ชันใหม่ออกมาหลายเวอร์ชัน ปล่อยผู้สมัคร (RC1, RC2, RC4) โดยมีเป้าหมายเพื่อให้ผู้ใช้ขั้นสูงและนักพัฒนาสามารถทดสอบและรายงานปัญหาได้ เวอร์ชันทดสอบเหล่านี้ได้รวมฟีเจอร์เกือบทั้งหมดที่เราได้กล่าวถึงไว้แล้ว เช่น โควต้าเริ่มต้น, การอ่าน/เขียนข้อมูลแบบไม่ใช้แคชเป็นทางเลือกสำรอง, การควบคุมการจัดสรรทรัพยากรแบบรวมศูนย์, การปรับปรุงการเข้ารหัส, ZIL ใน vdev พิเศษ, ส่วนขยาย special_small_blocks, สิทธิ์ใหม่, การเปลี่ยนชื่อเครื่องมือ และอื่นๆ อีกมากมาย
บันทึก RC1 และ RC2 เน้นย้ำถึงความสำคัญของชุมชน จะทำการทดสอบเวอร์ชันต่างๆ และส่งข้อเสนอแนะผ่าน GitHub รวมถึงคำสั่งต่างๆ เพื่อแสดงรายการการเปลี่ยนแปลงที่สัมพันธ์กับสาขาอ้างอิงได้อย่างง่ายดาย (ด้วยการผสมผสานของ git cherry (โดยเปรียบเทียบ zfs-2.3-release กับ RC ต่างๆ) ข้อความนั้นชัดเจน: เป้าหมายคือการทดสอบโค้ดในสภาพแวดล้อมจริงก่อนที่จะติดป้ายกำกับว่า "เสถียร"
อย่างไรก็ตาม การปรากฏตัวของ RC เฉพาะตัวหนึ่ง (ตัวอย่างเช่น 2.4.0 RC4การรวม .NET Framework (RF) ไว้ในเวอร์ชันของ FreeBSD ที่ระบุว่าเป็น RELEASE เช่น 15.0 ทำให้ผู้ใช้บางคนสงสัย และตั้งคำถามว่าทำไมจึงตัดสินใจรวมเฟรมเวิร์กนี้เข้าไปด้วย OpenZFS รุ่นทดลอง โดยเลือกใช้เวอร์ชันที่ถือว่าเสถียรของระบบปฏิบัติการ แทนที่จะใช้เวอร์ชันก่อนหน้าที่มีอยู่แล้ว การเลือกเช่นนี้ทำให้เกิดความไม่พอใจในหมู่ผู้ที่ต้องการให้ระบบไฟล์ที่เก็บข้อมูลของตนนั้นอิงตามเวอร์ชันสุดท้ายอย่างเคร่งครัด
ข้อสงสัยนั้นเกี่ยวข้องกับความยั่งยืนของการตัดสินใจดังกล่าว: หากใครติดตั้ง FreeBSD 15.0 พร้อม OpenZFS 2.4.0-RC4 แล้วไม่ปฏิบัติตามสาขา -CURRENT ก็มีความกังวลว่าจะ "ติดอยู่" กับเวอร์ชันทดลองเป็นเวลาหลายเดือนจนกว่าจะมีการแก้ไขเล็กน้อยหรือเวอร์ชันใหม่ในซีรีส์ออกมา นอกจากนี้ยังมีความกังวลเกี่ยวกับเวอร์ชันในอนาคต เช่น 15.1 จะรวม RC อื่น (เช่น 2.4.1-RC3 ในเชิงสมมติ) แทนที่จะเป็นเวอร์ชันสุดท้าย
เบื้องหลังการถกเถียงนี้ มีวิธีการทำความเข้าใจที่แตกต่างกันออกไปว่า “ปล่อยผู้สมัคร"ในบริบทที่ละเอียดอ่อนอย่างระบบไฟล์ สำหรับบางคน เวอร์ชัน Release Candidate (RC) แทบจะเป็นเวอร์ชันที่เสถียรแล้ว เพียงแค่ต้องการการปรับแต่งเล็กน้อยเท่านั้น แต่สำหรับคนอื่นๆ มันคือโค้ดที่ไม่ควรนำมาใช้เป็นพื้นฐานของระบบที่ระบุว่าเป็นเวอร์ชัน RELEASE และควรสงวนไว้สำหรับผู้ที่ติดตามความคืบหน้าของการพัฒนาอย่างใกล้ชิดเท่านั้น"
อย่างไรก็ตาม กองกำลังสำรองได้ปฏิบัติภารกิจสำเร็จลุล่วงแล้ว สนามทดสอบการปรับปรุงเหล่านี้ทำให้สามารถตรวจจับข้อผิดพลาด ปรับรายละเอียด และทำให้การปล่อยเวอร์ชัน "2.4 เสถียร" เป็นไปอย่างมั่นใจมากขึ้น ผู้ที่ให้ความสำคัญกับความปลอดภัยเหนือสิ่งอื่นใด ยังคงมีตัวเลือกที่จะใช้งานเวอร์ชันก่อนหน้า เช่น 2.3.x ต่อไปจนกว่าจะเห็นว่าเวอร์ชัน 2.4 มีความเสถียรเพียงพอสำหรับการใช้งานจริง
ทุกสิ่งที่ OpenZFS 2.4 นำเสนอล้วนมาจากความแข็งแกร่งที่โครงการได้รับจากซีรีส์ 2.3 และการอัปเดตบำรุงรักษา โดยผสมผสานการปรับปรุงความเข้ากันได้ของเคอร์เนล เครื่องมือใหม่ ๆ เช่น การเขียนใหม่ของ ZFSการอัปเดตนี้รวมถึงการปรับปรุงการลดความซ้ำซ้อนและการโคลนบล็อก การเพิ่มประสิทธิภาพการเข้ารหัส การเปลี่ยนแปลงภายในของบล็อกแบบกลุ่มและ ashift และตัวเลือกการจัดการใหม่ ๆ อีกมากมาย แม้ว่าจะเกิดข้อโต้แย้งบางประการเกี่ยวกับการใช้เวอร์ชันทดลองบนระบบปฏิบัติการบางระบบ แต่เวอร์ชันเสถียร 2.4 นี้ถือเป็นก้าวสำคัญสำหรับผู้ที่ต้องการใช้งาน ZFS บน Linux และ FreeBSD ให้ได้ประโยชน์มากขึ้นโดยไม่ลดทอนความสมบูรณ์และความยืดหยุ่นที่ได้รับการยอมรับอยู่แล้ว