ฉันเข้าใจว่าสิ่งนี้มาพร้อมกับความเสี่ยงที่ข้อมูลจะสูญหายหากไดรฟ์ล้มเหลว
หรือไฟฟ้าดับ สิ่งนี้เป็นที่ยอมรับได้เนื่องจากฉันเก็บไฟล์ไว้ใน
เครื่องต้นทางนานพอที่จะถ่ายโอนซ้ำในกรณีของข้อมูลระยะใกล้
การสูญเสีย
หากคุณสามารถทนต่อการสูญเสียการเขียนได้ถึง 5 วินาที คุณสามารถกำหนดค่า ZFS เป็น ไม่สนใจ ซิงค์คำขอด้วยคำสั่ง zfs set sync=ปิดการใช้งานถัง
การบังคับให้เขียนทั้งหมดผ่าน SLOG แม้จะเขียนเร็วมากก็ตาม ไม่เคย เร็วกว่าการข้ามคำขอซิงค์ SLOG ไม่ใช่แคชการเขียนย้อนกลับแบบคลาสสิก ซึ่งจะดูดซับการเขียนเพื่อยกเลิกการจัดเตรียมไปยังระดับที่ช้าลง แต่เป็นวิธีที่ช่วยให้มีเวลาแฝงต่ำโดยการจัดเก็บการเขียนซิงค์ไว้ชั่วคราว (และ เท่านั้น พวกเขา) ในการจัดเก็บอย่างรวดเร็วระดับกลาง หลังจากนั้นไม่กี่วินาที การเขียนเดียวกันจะถูกถ่ายโอนจากหน่วยความจำหลักไปยังพูลหลัก SLOG จะไม่ถูกอ่านจนกว่าจะเกิดข้อขัดข้อง (และกู้คืน)
ที่กล่าวว่าด้วย vdev ที่ใช้ HDD เพียงตัวเดียว คุณจะไม่สามารถทำให้ลิงก์ 10 Gbs อิ่มตัวได้ สำหรับการเขียนอย่างต่อเนื่องที่ความเร็ว ~1 GB/s คุณต้องมี อย่างน้อย 10 HDD ใน Raidz2 หรือ 12+ HDD ใน Mirror+Striping หรือที่ดีไปกว่านั้น คุณต้องมีพูล SSD ทั้งหมด นี้ก่อนที่จะพิจารณาสิ่งที่เป็น บันทึกขนาด
, การบีบอัด
ฯลฯ
แก้ไขเพื่อชี้แจงงาน SLOG:
เพื่อลดเวลาแฝงสำหรับการเขียนข้อมูลให้ตรงกัน ZFS ใช้สิ่งที่เรียกว่า ZFS Intent Log (ZIL) พูดโดยย่อ: ทุกครั้งที่ซิงค์เขียนมาถึง ZFS จะเขียนลงบนพื้นที่พูลชั่วคราวที่เรียกว่า ZIL ทันที การดำเนินการนี้ทำให้เขียนเพื่อส่งกลับทันที ทำให้แอปพลิเคชันการโทรดำเนินต่อไปได้ หลังจากผ่านไปไม่กี่วินาที ที่การทำธุรกรรม บันทึกใด ๆ ที่เขียนไปยัง ZIL จะได้รับการตอบกลับไปยังกลุ่มหลัก สิ่งนี้ไม่ ไม่ หมายความว่า ZIL ถูกอ่านในแต่ละคอมมิท แต่ข้อมูลที่เขียนมาจากแคช DRAM ARC หลัก กล่าวอีกนัยหนึ่ง ZIL คือประเภทของ "บันทึกล่วงหน้า" ซึ่งรับประกันการคงอยู่ของข้อมูลอย่างรวดเร็วสำหรับข้อมูลการซิงค์ที่ต้องเขียน
นี่หมายความว่าการเขียนแบบซิงโครไนซ์นั้นซ้ำกัน: พวกมันถูกเขียน ทั้งสอง ถึง ZIL และพูลหลัก เข้าสู่ SLOG (อุปกรณ์บันทึกแยกต่างหาก): อุปกรณ์ที่ทุ่มเทให้กับ ซิงค์เขียนเท่านั้น - เช่น: ปลดปล่อยพูลหลักจากทราฟฟิก ZIL SSD SLOG ที่รวดเร็วมีความสำคัญเนื่องจาก HDD ช้ามากสำหรับการเขียนซิงค์ SLOG ไม่ใช่แคชการเขียนย้อนกลับแบบคลาสสิกของคุณเนื่องจาก:
- มันดูดซับเฉพาะการเขียนแบบซิงค์โดยไม่สนใจการเขียนปกติโดยสิ้นเชิง
- มันทำซ้ำเฉพาะข้อมูลที่เป็น แคชไว้แล้วใน ARC.
ทั้งสองจุดรวมกันหมายความว่า SLOG ขนาดใหญ่โดยพื้นฐานแล้วสิ้นเปลือง เพราะต้องการเพียง 3 เท่าของขนาดสูงสุดของธุรกรรม ZFS กล่าวอีกนัยหนึ่ง SLOG ขนาด 2-4 GB ก็เพียงพอสำหรับกรณีส่วนใหญ่ โดย SLOG ที่ใหญ่กว่าจะมีประโยชน์ในการตั้งค่าเฉพาะเท่านั้น
SLOG ดังกล่าวเป็นกุญแจสำคัญในการให้เวลาแฝงที่ต่ำกว่าสำหรับการเขียนซิงค์แบบสุ่ม แต่ในขณะที่สามารถดูดซับการเขียนซิงค์ตามลำดับที่เพิ่มขึ้นเล็กน้อย แต่นี่ไม่ใช่หน้าที่หลัก กล่าวอีกนัยหนึ่ง คุณสามารถดู ZIL/SLOG เป็นส่วนถาวรของ ARC ข้อพิสูจน์คือคุณไม่สามารถคาดหวังที่จะเขียนข้อมูลเป็นสิบ GB และซ่อนความเร็วพูลหลักที่ช้าผ่าน SLOG เพราะนั่นหมายความว่าคุณมีข้อมูลสกปรกหลายสิบ GB อยู่แล้ว ภายใน ARC ที่ใช้ RAM ของคุณ
การตั้งค่า ซิงค์=ปิดใช้งาน
สั่งให้ ZFS คุกคามการเขียนทั้งหมด แม้กระทั่งการซิงค์ เช่นเดียวกับการเขียนแบบ async ปกติ สิ่งนี้จะข้ามข้อมูล ZIL/SLOG และ หากคุณสามารถยอมรับหน้าต่างดาต้าลอส 5 วินาทีได้ มันคือการตั้งค่าที่เร็วกว่าที่คุณเคยทำได้ - แม้จะเทียบกับ SLOG ที่เร็วมากอย่าง Optane หรือ RAMdrive ก็ตาม สิ่งที่ดีเกี่ยวกับ ซิงค์=ปิดใช้งาน
คือมันไม่ได้ปิดใช้งานการเขียนซิงค์สำหรับข้อมูลเมตาของ ZFS ดังนั้นจึงไม่ทำให้ระบบไฟล์ของคุณตกอยู่ในความเสี่ยง นี่ไม่ได้หมายความว่าคุณสามารถใช้งานได้เพียงเล็กน้อย: ตามที่ระบุไว้หลายครั้ง คุณควรแน่ใจว่าเข้าใจความหมายของมัน (คุณอาจสูญเสียวินาทีสุดท้ายของข้อมูลที่ไม่ได้ซิงก์ในกรณีที่เกิดการขัดข้อง/ไฟฟ้าดับ)
ในทางกลับกัน แคชการเขียนกลับที่ใช้ SSD แบบคลาสสิกเป็น lvmcache
และ แคช
สามารถ (มากหรือน้อย) ใช้แคช SSD หลายร้อย GB เพื่อปกปิดเวลาแฝง / ทรูพุตของพูลหลักได้อย่างมีประสิทธิภาพ - โดยเฉพาะเพราะพวกเขา เป็น แคชเขียนกลับเต็มเปี่ยมซึ่งไม่จำเป็นต้องมีข้อมูลอยู่ภายในหน่วยความจำหลัก (ตรงกันข้ามกับหน่วยความจำหลัก ล้างออกเอง ผ่านแคช SSD เหล่านี้)
เหตุผลเบื้องหลัง ZFS คือหน่วยความจำระบบหลัก (ขนาดใหญ่) คือแคชการอ่าน/เขียนจริงของคุณ โดย SLOG เป็นวิธีที่ทำให้มีเวลาแฝงต่ำกว่าสำหรับการเขียนซิงค์แบบสุ่ม