ชุมชน Linux กำลังมีการถกเถียงกันอย่างเข้มข้นเกี่ยวกับการใช้งาน swap memory ซึ่งเกิดจากเรื่องราวความสำเร็จในโลกจริงและความเข้าใจผิดที่ยังคงมีอยู่เกี่ยวกับคุณสมบัติพื้นฐานของระบบนี้ แม้ว่านักพัฒนาหลายคนจะมองว่า swap เป็นเทคโนโลยีที่ล้าสมัยหรือเป็นอันตราย แต่การอภิปรายล่าสุดเผยให้เห็นว่าแอปพลิเคชันสมัยใหม่กำลังใช้ประโยชน์จาก swap เพื่อให้ได้การลดต้นทุนและการปรับปรุงประสิทธิภาพอย่างมีนัยสำคัญ
เรื่องราวความสำเร็จในโลกจริงท้าทายมุมมองแบบดั้งเดิม
สมาชิกในชุมชนกำลังแบ่งปันผลลัพธ์ที่น่าประทับใจจากการใช้งาน swap ในสภาพแวดล้อมการผลิต ระบบฐานข้อมูลแบบกระจายหนึ่งแสดงให้เห็นถึงประโยชน์ด้านต้นทุนที่เป็นไปได้โดยการใช้ RAM ขนาด 512GB ร่วมกับที่เก็บข้อมูล NVMe swap ขนาด 3.9TB เพื่อจัดการกับความต้องการหน่วยความจำ 4TB ในระหว่างการคำนวณเมื่อเริ่มต้นระบบ วิธีการนี้ลดต้นทุนของระบบลงได้ 97% เมื่อเปรียบเทียบกับโซลูชันที่ใช้เฉพาะ RAM แม้ว่าเวลาในการคำนวณจะเพิ่มขึ้นประมาณ 25%
ระบบทำงานโดยการอ่านตารางขนาดใหญ่จากที่เก็บข้อมูลบนคลาวด์และคำนวณ materialized views ที่ซับซ้อนซึ่งต้องการการจัดสรรหน่วยความจำจำนวนมากในระหว่างการเริ่มต้น เมื่อเสร็จสิ้น ชุดข้อมูลที่ใช้งานจะลดลงเหลือประมาณ 400GB สำหรับการให้บริการ query นี่เป็นตัวอย่างที่รุนแรงแต่ใช้งานได้จริงของการใช้ที่เก็บข้อมูล NVMe เป็น RAM ราคาถูกสำหรับ workload เฉพาะ
การเปรียบเทียบต้นทุน: การใช้งาน RAM เทียบกับ Swap
การกำหนดค่า | การจัดสรรหน่วยความจำ | ผลกระทบต่อประสิทธิภาพ | การลดต้นทุน |
---|---|---|---|
ใช้ RAM เพียงอย่างเดียว | RAM 4TB | ประสิทธิภาพพื้นฐาน | ต้นทุนพื้นฐาน |
วิธีการแบบผสม | RAM 512GB + NVMe swap 3.9TB | การคำนวณช้าลง 25% | ลดต้นทุนได้ 97% |
การแลกเปลี่ยนระหว่างประสิทธิภาพและความน่าเชื่อถือทำให้ผู้ใช้แบ่งฝ่าย
ชุมชนยังคงแบ่งออกเป็นสองฝ่ายว่า swap ช่วยปรับปรุงหรือขัดขวางประสิทธิภาพของระบบ ผู้สนับสนุนโต้แย้งว่า swap ช่วยให้การจัดการหน่วยความจำดีขึ้นโดยอนุญาตให้ kernel ย้าย anonymous pages ที่ไม่ค่อยได้ใช้ไปยังที่เก็บข้อมูล ทำให้ RAM ว่างสำหรับการดำเนินการ file caching ที่สำคัญกว่า สิ่งนี้สามารถส่งผลให้เกิดการปรับปรุงประสิทธิภาพอย่างมีนัยสำคัญสำหรับแอปพลิเคชันที่มี initialization footprints ขนาดใหญ่หรือหน่วยความจำที่ไม่ได้ใช้งานหลังจากเริ่มต้น
ผู้วิจารณ์ชี้ไปที่พฤติกรรมที่มีปัญหาในระหว่างสถานการณ์ memory pressure ที่ระบบจะไม่ตอบสนองเมื่อโปรแกรมถูก swap ออกอย่างก้าวร้าว ผู้ใช้หลายคนรายงานว่าการกู้คืนหลังจากที่กระบวนการที่ใช้หน่วยความจำมากถูกฆ่าอาจใช้เวลาหลายนาทีหรือหลายชั่วโมง เนื่องจากระบบปฏิบัติการจะโหลด swapped pages กลับเข้าสู่หน่วยความจำเฉพaะเมื่อมีการเข้าถึงโดยเฉพาะ
เมื่อฉันเขียนโปรแกรม แอปพลิเคชันของฉันอาจจัดสรรหน่วยความจำจำนวนมากเนื่องจากบั๊กโง่ๆ บางอย่าง ในกรณีเช่นนี้ ระบบทั้งหมดจะหยุดทำงานจริงๆ - แม้แต่เคอร์เซอร์ของเมาส์ก็ไม่สามารถเคลื่อนที่ได้
การลดลงของประสิทธิภาพเมื่อมีการใช้งาน Swap อย่างแอคทีฟ
- 0.1% ของ working set อยู่ใน swap: ประสิทธิภาพลดลง 2 เท่า
- 1% ของ working set อยู่ใน swap: ประสิทธิภาพลดลง 10 เท่า
- 10% ของ working set อยู่ใน swap: ประสิทธิภาพลดลง 100 เท่า
อิงจากความแตกต่างของ latency ระหว่าง RAM และ SSD storage ที่มากถึง 1000 เท่า
วิธีการปรับแต่งสมัยใหม่และโซลูชันทางเลือก
ผู้ดูแลระบบกำลังพัฒนากลยุทธ์ใหม่สำหรับการกำหนดค่า swap ที่แตกต่างอย่างมีนัยสำคัญจากคำแนะนำแบบดั้งเดิม แทนที่จะใช้กฎเก่าที่ว่าขนาดสองเท่าของ RAM หลายคนตอนนี้ใช้อัตราส่วนระหว่าง 1/8 และ 1/32 ของ RAM ที่มีอยู่ ขึ้นอยู่กับลักษณะของ workload เซิร์ฟเวอร์ฐานข้อมูลที่มี RAM 128GB อาจใช้ swap เพียง 8GB โดยรูปแบบการใช้งานช่วยกำหนดขนาดที่เหมาะสมที่สุด
ผู้ใช้ขั้นสูงกำลังหันไปใช้เครื่องมือเฉพาะทางเช่น earlyoom และ systemd-oomd เพื่อให้การจัดการ out-of-memory ตอบสนองได้ดีขึ้น ยูทิลิตี้เหล่านี้สามารถยุติกระบวนการที่มีปัญหาก่อนที่จะเกิด system-wide thrashing ซึ่งแก้ไขข้อร้องเรียนหลักอย่างหนึ่งเกี่ยวกับพฤติกรรม swap แบบดั้งเดิม
การอภิปรายยังเน้นย้ำถึงความสำคัญของการเข้าใจประเภทหน่วยความจำที่แตกต่างกันและกลยุทธ์การเรียกคืน File-backed pages สามารถถูกทิ้งและโหลดใหม่จากที่เก็บข้อมูล ในขณะที่ anonymous pages ต้องการพื้นที่ swap เพื่อการเรียกคืน หากไม่มี swap, anonymous pages จะถูกล็อกไว้ในหน่วยความจำ ซึ่งอาจป้องกันไม่ให้ข้อมูลที่มีประโยชน์มากกว่าถูกแคช
แนวทางการกำหนดขนาด Swap สมัยใหม่
ประเภทระบบ | กฎเกณฑ์แบบดั้งเดิม | คำแนะนำสมัยใหม่ | ตัวอย่างการกำหนดค่า |
---|---|---|---|
ระบบเก่า | ขนาด 2 เท่าของ RAM | ไม่แนะนำ | - |
เซิร์ฟเวอร์สมัยใหม่ | ขนาด 1 เท่าของ RAM | 1/8 ถึง 1/32 ของ RAM | RAM 128GB → swap 8GB |
ระบบเดสก์ท็อป | แปรผันตามสถานการณ์ | น้อยที่สุดหรือไม่มีเลย | ขึ้นอยู่กับรูปแบบการใช้งาน |
วิวัฒนาการของฮาร์ดแวร์เปลี่ยนสมการ
ที่เก็บข้อมูล NVMe สมัยใหม่ได้เปลี่ยนแปลงลักษณะประสิทธิภาพของ swap เมื่อเปรียบเทียบกับดิสก์แบบหมุนดั้งเดิม ความแตกต่างของ latency ระหว่าง RAM และ SSD ที่เร็ว แม้ว่าจะยังคงมีนัยสำคัญ แต่ก็เล็กกว่าช่วงในอดีตมาก การปรับปรุงนี้ทำให้เกิดกรณีการใช้งานใหม่เช่นตัวอย่างฐานข้อมูล ที่ swap ทำหน้าที่เป็นส่วนขยายของลำดับชั้นหน่วยความจำมากกว่าพื้นที่ overflow ฉุกเฉิน
อย่างไรก็ตาม สมาชิกในชุมชนเตือนเกี่ยวกับการลดลงของประสิทธิภาพแบบเลขชี้กำลังเมื่อ active working sets หลั่งไหลเข้าสู่ swap แม้แต่ memory pressure ที่ใช้งานอยู่จำนวนเล็กน้อยไปยัง swap ก็สามารถทำให้เกิดการชะลอตัวอย่างมาก ทำให้การกำหนดขนาดและการตรวจสอบอย่างระมัดระวังเป็นสิ่งจำเป็นสำหรับระบบการผลิต
การถกเถียงสะท้อนถึงการเปลี่ยนแปลงที่กว้างขึ้นในวิธีที่ระบบ Linux จัดการ memory pressure และการจัดสรรทรัพยากร เมื่อความจุหน่วยความจำของเซิร์ฟเวอร์เพิ่มขึ้นและความเร็วของที่เก็บข้อมูลเพิ่มขึ้น บทบาทดั้งเดิมของ swap ยังคงพัฒนาต่อไป โดยต้องการให้ผู้ดูแลระบบสร้างสมดุลระหว่างต้นทุน ประสิทธิภาพ และความน่าเชื่อถือตาม workloads และความต้องการเฉพาะของพวกเขา