เมื่อเราต้องการติดตั้งระบบ linux มีข้อเสนอแนะทั่วไปในการกำหนดพื้นที่สว็อปสองครั้งใหญ่เท่ากับหน่วยความจำกายภาพของคุณ ฉันต้องการทราบว่าทำไมเราต้องการสิ่งนี้และคำแนะนำนี้เป็นอย่างไร
เมื่อเราต้องการติดตั้งระบบ linux มีข้อเสนอแนะทั่วไปในการกำหนดพื้นที่สว็อปสองครั้งใหญ่เท่ากับหน่วยความจำกายภาพของคุณ ฉันต้องการทราบว่าทำไมเราต้องการสิ่งนี้และคำแนะนำนี้เป็นอย่างไร
คำตอบ:
คำตอบสั้น ๆ คือ "คุณไม่จำเป็นต้อง "
ขึ้นอยู่กับประเภทของเคอร์เนล / ระบบมันอาจจะเหมาะสมกับขนาดพื้นที่สว็อปเช่นนั้นในการปรับจูน FreeBSD (7) manpage เราพบเหตุผลต่อไปนี้หลังขนาดสวอปอย่างน้อย 2x ของขนาดหน่วยความจำกายภาพ:
โดยทั่วไปคุณควรปรับขนาดพื้นที่สว็อปของคุณเป็นหน่วยความจำหลักประมาณ 2 เท่าสำหรับระบบที่มี RAM น้อยกว่า 2GB หรือประมาณ 1x หน่วยความจำหลักถ้าคุณมีมากกว่านั้น หากคุณไม่มี RAM จำนวนมากโดยทั่วไปคุณจะต้องสลับมากขึ้น ไม่แนะนำให้คุณกำหนดค่า swap น้อยกว่า 256M บนระบบและคุณควรคำนึงถึงการขยายหน่วยความจำในอนาคตเมื่อทำการปรับขนาดพาร์ติชัน swap อัลกอริธึมการเพจ VM ของเคอร์เนลได้รับการปรับให้ทำงานได้ดีที่สุดเมื่อมีการสลับอย่างน้อย 2x กับหน่วยความจำหลัก การกำหนดค่า swap น้อยเกินไปอาจนำไปสู่ความไร้ประสิทธิภาพในโค้ดสแกนหน้า VM รวมถึงสร้างปัญหาในภายหลังหากคุณเพิ่มหน่วยความจำเพิ่มเติมในเครื่องของคุณ ในที่สุดสำหรับระบบขนาดใหญ่ที่มีดิสก์ SCSI หลายตัว (หรือดิสก์ IDE หลายตัวที่ทำงานบนคอนโทรลเลอร์ที่แตกต่างกัน) เราขอแนะนำให้คุณกำหนดค่าการสลับในแต่ละไดรฟ์ พาร์ทิชันสลับบนไดรฟ์ควรมีขนาดเท่ากัน เคอร์เนลสามารถจัดการกับขนาดที่กำหนดเองได้ แต่โครงสร้างข้อมูลภายในปรับขยายได้ถึง 4 เท่าของพาร์ติชัน swap ที่ใหญ่ที่สุด การเก็บพาร์ติชั่นการแลกเปลี่ยนไว้ใกล้กับขนาดเดียวกันจะทำให้เคอร์เนลทำการสไทรพ์สเปซสเปซในดิสก์ N ได้อย่างดีที่สุด ไม่ต้องกังวลเกี่ยวกับการทำมากไปหน่อยพื้นที่ swap เป็นข้อดีในการประหยัดของ UNIX และแม้ว่าคุณจะไม่ได้ใช้ swap มากนักก็สามารถทำให้คุณมีเวลามากขึ้นในการกู้คืนจากโปรแกรมรันอะเวย์ก่อนที่จะถูกบังคับให้รีบูต การเก็บพาร์ติชั่นการแลกเปลี่ยนไว้ใกล้กับขนาดเดียวกันจะทำให้เคอร์เนลทำการสไทรพ์สเปซสเปซในดิสก์ N ได้อย่างดีที่สุด ไม่ต้องกังวลเกี่ยวกับการทำมากไปหน่อยพื้นที่ swap เป็นข้อดีในการประหยัดของ UNIX และแม้ว่าคุณจะไม่ได้ใช้ swap มากนักก็สามารถทำให้คุณมีเวลามากขึ้นในการกู้คืนจากโปรแกรมรันอะเวย์ก่อนที่จะถูกบังคับให้รีบูต การเก็บพาร์ติชั่นการแลกเปลี่ยนไว้ใกล้กับขนาดเดียวกันจะทำให้เคอร์เนลทำการสไทรพ์สเปซสเปซในดิสก์ N ได้อย่างดีที่สุด ไม่ต้องกังวลเกี่ยวกับการทำมากไปหน่อยพื้นที่ swap เป็นข้อดีในการประหยัดของ UNIX และแม้ว่าคุณจะไม่ได้ใช้ swap มากนักก็สามารถทำให้คุณมีเวลามากขึ้นในการกู้คืนจากโปรแกรมรันอะเวย์ก่อนที่จะถูกบังคับให้รีบูต
ปัจจัยอื่น ๆ อาจมีความสำคัญเมื่อคุณตัดสินใจว่าจะจัดสรรพื้นที่สว็อปเท่าไหร่ตำแหน่งที่จะจัดสรรและอื่น ๆ ตัวอย่างเช่นหากคุณกำลังติดตั้งเซิร์ฟเวอร์ขนาดใหญ่ที่มีหน่วยความจำกายภาพ 128 GB อาจเป็นความคิดที่ดีที่จะหลีกเลี่ยงการจัดสรรพื้นที่ดิสก์ 256 GB ล่วงหน้าสำหรับการแลกเปลี่ยนที่ไม่มีการใช้งาน
ในทางกลับกันการมีพื้นที่สว็อปบางครั้งมักทำให้เป็นไปได้ที่จะดึงเคอร์เนลทิ้ง (เช่นใน Open-, Net- และ FreeBSD) ดังนั้นจึงเป็นความคิดที่ดีที่จะมีพื้นที่สว็อปอย่างน้อยพอที่จะรับเคอร์เนลดัมพ์แบบเต็มได้
ไม่มีกฎเด็ดขาดที่เหมาะสมกับทุกกรณี คุณต้องอ่านเกี่ยวกับพฤติกรรมของระบบเฉพาะของคุณเรียนรู้วิธีการทำงานคิดเกี่ยวกับการใช้งานระบบและตัดสินใจขนาดพื้นที่สว็อปที่ดีที่สุดที่เหมาะกับความต้องการของคุณ
คุณไม่จำเป็นต้องทำเลย windows รุ่นเก่าจะถือว่าแต่ละหน้าของหน่วยความจำที่จัดสรรเป็นหลัก mmap ในไฟล์ swap ดังนั้นคุณต้องการอย่างน้อยขนาด RAM จริงทั้งหมดของคุณในการแลกเปลี่ยนเพื่อให้มีประโยชน์ - นี่ไม่ใช่กรณีนี้อีกต่อไปและไม่เคยเป็น กรณีใน Linux แต่ข่าวลือยังคงมีอยู่
อย่างไรก็ตามมีกรณีที่มีการสลับอย่างน้อยมากเท่ากับ RAM ที่ต้องการ - ไฮเบอร์เนต เนื่องจาก Linux ใช้ไฟล์ swap สำหรับการจำศีล (aka, suspend-to-disk) คุณจำเป็นต้องสลับเพื่อเก็บข้อมูลทั้งหมดใน RAM รวมทั้งข้อมูลทั้งหมดที่ถูกสลับออกไปแล้ว (ลบแคช RAM) นี่เป็นเพียงกรณีของเครื่องที่จำเป็นต้องจำศีลเช่นแล็ปท็อปแน่นอน
ในที่สุดการแลกเปลี่ยนมากเกินไปอาจเป็นสิ่งที่ไม่ดีแม้ว่าคนอื่นอาจพูดว่า คิดว่า - ถ้าคุณมีหน่วยความจำ 4G และยิ่งไปกว่านั้นต้องมีการแลกเปลี่ยน 8G เพิ่มเติมคุณคิดว่าระบบของคุณจะยังคงใช้งานได้อยู่หากมีการสลับไปยัง / จากดิสก์ทั้งหมด มักจะดีกว่าที่จะฆ่ากระบวนการแฮ็คหน่วยความจำทันทีเมื่อคุณมีหน่วยความจำไม่เพียงพอแทนที่จะทำให้ระบบทั้งระบบช้าลงจนอยู่ในระดับที่ไม่สามารถใช้งานได้เมื่อเริ่มใช้ข้อมูลในการสลับสับเปลี่ยนเวลาเข้าและออก
นานมาแล้วมีตัวแปร unix ทั่วไป (ฉันคิดว่ามันเป็น BSD แต่ฉันไม่สามารถหาข้อมูลอ้างอิงได้ในตอนนี้) ที่จะจัดสรรทุกหน้าหน่วยความจำเสมือนในพื้นที่สว็อป ดังนั้นหากคุณมีการแลกเปลี่ยนมากเท่ากับ RAM ขนาดของหน่วยความจำเสมือนของคุณจะยังคงเท่ากับ RAM ของคุณ คำแนะนำปกติคือให้มีการสลับเป็นสองเท่าของ RAM ซึ่งทำให้หน่วยความจำเสมือนใหญ่เป็นสองเท่าของ RAM
Unices สมัยใหม่ไม่ได้ทำแบบนั้นดังนั้นเหตุผลสำหรับกฎนั้นล้าสมัย (ฉันคิดว่ามันล้าสมัยไปแล้วในปี 1992 ดังนั้นมันจึงไม่เกี่ยวข้องกับ Linux) แต่กฎก็ดีพอที่จะมีชีวิตรอด ถ้าคุณทำตามตอนนี้คุณจะได้รับหน่วยความจำเสมือนที่มี RAM สามเท่าของคุณในขณะที่ความตั้งใจดั้งเดิมคือการได้รับสองเท่า
เพียงเพราะเหตุผลทางประวัติศาสตร์ที่อยู่เบื้องหลังการปกครองไม่ถูกต้องไม่ได้หมายความว่ามันโง่ พื้นที่ดิสก์มีราคาถูกลงดังนั้นจึงควรจัดสรรการแลกเปลี่ยนมากขึ้น คุณควรมี swap เท่าใดขึ้นอยู่กับจำนวน RAM ที่คุณมีและวิธีใช้ คุณสามารถเรียกใช้ระบบโดยไม่ต้องสลับ แต่จากนั้นคุณจะไม่ได้รับโอกาสให้เลือกโปรแกรมที่จะฆ่าถ้า RAM ของคุณเต็มและระบบอาจช้าลง (บางครั้งจะดีกว่าถ้าใช้ RAM สำหรับแคชและสลับหน่วยความจำของโปรแกรม ออก). การจัดสรร swap มากเกินไปทำให้เสียค่าใช้จ่ายจำนวนเล็กน้อยของ RAM (สำหรับโครงสร้างข้อมูลเคอร์เนล) และพื้นที่ว่างบนดิสก์ (แต่ทุกวันนี้มักจะสกปรกราคาถูกยกเว้นใน SSD) มีการสลับที่เพียงพอเพื่อให้พอดีกับหน่วยความจำเสมือนทั้งหมดของคุณเป็นสิ่งจำเป็นหากคุณต้องการไฮเบอร์เนต
คำแนะนำโบราณตามสมมติฐานเกี่ยวกับความจุหน่วยความจำระบบทั่วไปความเร็วบัสหน่วยความจำเทียบกับความเร็วดิสก์และเปอร์เซ็นต์ของเวลาที่กระบวนการใช้ในสถานะรอต่างๆ ฉันสงสัยว่าวันนี้คุณต้องการหน่วยความจำกายภาพมากกว่า 1/2 ในพื้นที่ swap - เพียงพอที่จะป้องกันการฆ่า OOM แบบสุ่มเมื่อคุณทำงานใกล้การใช้งานหน่วยความจำเต็ม แต่ทั้งหมดขึ้นอยู่กับปริมาณงานทั่วไปของคุณ YMMV เป็นต้น