ผู้ใช้ Linux ถกเถียงประโยชน์ของ Swap Memory ขณะที่แอปพลิเคชันในโลกจริงแสดงการประหยัดต้นทุนอย่างมาก

ทีมชุมชน BigGo
ผู้ใช้ Linux ถกเถียงประโยชน์ของ Swap Memory ขณะที่แอปพลิเคชันในโลกจริงแสดงการประหยัดต้นทุนอย่างมาก

ชุมชน 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 และความต้องการเฉพาะของพวกเขา

อ้างอิง: In defence of swap: common misconceptions