หน่วยความจำที่เหลืออยู่ของ vm.overcommit_ratio จะไปไหน


10

ถ้าฉัน overcommit หน่วยความจำปิดการใช้งานโดยการตั้งค่าvm.overcommit_memoryที่จะ2ตามค่าเริ่มต้นระบบจะอนุญาตให้มีการจัดสรรหน่วยความจำได้ถึงมิติของการแลกเปลี่ยน + 50% ของหน่วยความจำกายภาพตามที่อธิบายไว้ที่นี่

ฉันสามารถเปลี่ยนอัตราส่วนโดยการแก้ไขvm.overcommit_ratioพารามิเตอร์ สมมติว่าฉันตั้งไว้ที่ 80% ดังนั้นอาจใช้หน่วยความจำกายภาพ 80%

คำถามของฉันคือ:

  • ระบบจะทำอะไรกับส่วนที่เหลืออีก 20%
  • ทำไมพารามิเตอร์นี้จำเป็นต้องมีในตอนแรก
  • ทำไมฉันไม่ควรตั้งไว้ที่ 100% เสมอ

คำตอบ:


6

ระบบจะทำอะไรกับส่วนที่เหลืออีก 20%

เคอร์เนลจะใช้หน่วยความจำกายภาพที่เหลืออยู่เพื่อวัตถุประสงค์ของตัวเอง (โครงสร้างภายในตารางบัฟเฟอร์แคชอะไรก็ตาม) การตั้งค่าหน่วยความจำ overcommitment จัดการกับการจองหน่วยความจำเสมือนจริงของผู้ใช้แอปพลิเคชันเคอร์เนลไม่ได้ใช้หน่วยความจำเสมือน แต่เป็นหน่วยความจำจริง

ทำไมพารามิเตอร์นี้จำเป็นต้องมีตั้งแต่แรก?

overcommit_ratioพารามิเตอร์เป็นทางเลือกการดำเนินการออกแบบมาเพื่อป้องกันการใช้งานสำรองหน่วยความจำเสมือนมากกว่าสิ่งที่สมควรจะสามารถใช้ได้สำหรับพวกเขาในอนาคตคือเมื่อพวกเขาจริงเข้าถึงหน่วยความจำ (หรืออย่างน้อยลอง)

การตั้งค่าovercommit_ratioเป็น 50% ถือเป็นค่าเริ่มต้นที่เหมาะสมโดยนักพัฒนาเคอร์เนล Linux จะถือว่าเคอร์เนลไม่จำเป็นต้องใช้ RAM มากกว่า 50% จริง ๆ ระยะทางของคุณอาจแตกต่างกันไปสาเหตุที่ทำให้สามารถปรับได้

ทำไมฉันไม่ควรตั้งไว้ที่ 100% เสมอ?

การตั้งค่าเป็น 100% (หรือค่า "สูงเกินไป") ไม่ได้ปิดการใช้งานการทับได้อย่างน่าเชื่อถือเนื่องจากคุณไม่สามารถถือว่าเคอร์เนลจะใช้ RAM 0% (หรือน้อยเกินไป)

มันจะไม่ป้องกันแอปพลิเคชันที่จะทำงานล้มเหลวเนื่องจากเคอร์เนลอาจครอบครองหน่วยความจำกายภาพทั้งหมดที่ต้องการ


หากเคอร์เนลสามารถใช้หน่วยความจำทั้งหมดที่ต้องการได้แล้วอะไรคือจุดของการเปิดเผยพารามิเตอร์นี้ (หรือแม้แต่การสร้าง)
Dan Tumaykin

มีเอกสารอย่างเป็นทางการใดบ้างที่อธิบายรายละเอียดพารามิเตอร์เหล่านั้น นอกจากkernel.org/doc/Documentation/vm/overcommit-accounting - การอ้างอิงใด ๆ ไปยังหน่วยความจำเคอร์เนลหายไปที่นั่น
Dan Tumaykin

1
ฉันยังไม่พบเอกสารอธิบายรายละเอียดเพียงพอสิ่งที่นำมาพิจารณาอย่างถูกต้องเมื่ออ้างถึง "การยอมรับพื้นที่ทั้งหมด" ข้อเท็จจริงที่ว่าเอกสารที่คุณให้ลิงก์ไปยังสถานะ "ในสถานการณ์ส่วนใหญ่หมายความว่ากระบวนการจะไม่ถูกฆ่า ... " ก็เพียงพอแล้วที่จะยืนยันหน่วยความจำบางส่วนที่สามารถใช้ได้ในที่อื่นและผู้บริโภคที่ชัดเจนสำหรับหน่วยความจำนี้คือเคอร์เนล
jlliagre

2

การตั้งค่าอัตราส่วนเป็น 100% จะไม่สงวนพื้นที่ใด ๆ สำหรับเพจที่มีไฟล์สำรองหรือการจัดสรรในเคอร์เนลเช่นรหัสเคอร์เนลบัฟเฟอร์เครือข่ายเป็นต้น

โครงสร้างในเคอร์เนลจะถูกจัดสรรโดยไม่คำนึงถึงทำให้เกิด overcommit โดยทั่วไปจะมีข้อ จำกัด เป็นรายบุคคล (เช่นมีการตั้งค่าสำหรับบัฟเฟอร์เครือข่าย) ฉันไม่คิดว่าจะมีขีด จำกัด โดยรวมอยู่ที่ 50% แม้ว่าข้อ จำกัด โดยรวมจะเป็นสิ่งที่ดำเนินการเพื่อวัตถุประสงค์ในการโฮสต์ตู้คอนเทนเนอร์

เพจที่มีการสำรองไฟล์เป็นที่ที่คุณมักจะเรียกใช้รหัสผู้ใช้จากดังนั้นคุณต้องการพื้นที่สำหรับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.