ใช่.
แน่นอนที่สุดคุณควรเปิดใช้งานการแลกเปลี่ยนเสมอยกเว้นในกรณีที่มีเหตุผลที่น่าสนใจมากห้ามใช้ (เช่นไม่มีดิสก์เลยหรือมีดิสก์เครือข่ายอยู่เท่านั้น) คุณควรสลับตามลำดับขนาดไร้สาระที่มักแนะนำ (เช่นจำนวนแรมสองเท่า) หรือไม่ ดีไม่มี
เหตุผลก็คือการแลกเปลี่ยนนั้นไม่ได้มีประโยชน์เฉพาะเมื่อแอปพลิเคชันของคุณใช้หน่วยความจำมากกว่าที่มีอยู่จริงในหน่วยความจำ (จริง ๆ แล้วในกรณีนี้การแลกเปลี่ยนไม่ได้มีประโยชน์มากเลย แรงจูงใจหลักสำหรับการแลกเปลี่ยนในปัจจุบันเป็นไม่ได้อย่างน่าอัศจรรย์เปิด 16GiB แรม 32 เข้าลิ่ม แต่เพื่อให้การใช้งานมีประสิทธิภาพมากขึ้นของการติดตั้ง RAM ที่มี
บนคอมพิวเตอร์สมัยใหม่ RAM ไม่ได้ใช้งาน RAM ที่ไม่ได้ใช้เป็นสิ่งที่คุณสามารถซื้อและประหยัดเงินได้เช่นกัน ดังนั้นสิ่งที่คุณโหลดหรืออะไรที่เป็นหน่วยความจำที่แมปมิฉะนั้นอะไรที่อาจอาจจะนำกลับมาใช้โดยทุกคนได้ตลอดเวลาต่อมา (จำนวน จำกัด ด้วยข้อ จำกัด ด้านความปลอดภัย) จะถูกเก็บไว้ชั่วคราว เร็ว ๆ นี้หลังจากที่เครื่องได้ booted, RAM ทางกายภาพทั้งหมดจะถูกนำมาใช้สำหรับบางสิ่งบางอย่าง
เมื่อใดก็ตามที่คุณขอหน้าหน่วยความจำใหม่จากระบบปฏิบัติการตัวจัดการหน่วยความจำจะต้องตัดสินใจอย่างมีความรู้:
- ล้างหน้าจากแคชบัฟเฟอร์
- ล้างหน้าจากการแมป (มีประสิทธิภาพเหมือนกับ # 1 ในระบบส่วนใหญ่)
- ย้ายหน้าเว็บที่ไม่ได้เข้าถึงเป็นเวลานาน - ไม่ควรสลับ - (อันที่จริงแล้วอาจเกิดขึ้นได้ในเชิงรุกไม่จำเป็นต้องเป็นช่วงเวลาสุดท้าย)
- ฆ่ากระบวนการของคุณหรือฆ่ากระบวนการแบบสุ่ม (OOM)
- เคอร์เนลตกใจ
ตัวเลือก # 4 และ # 5 ไม่เป็นที่พึงปรารถนาและจะเกิดขึ้นหากระบบปฏิบัติการไม่มีตัวเลือกอื่น ตัวเลือก # 1 และ # 2 หมายความว่าคุณทิ้งบางสิ่งบางอย่างไปซึ่งคุณอาจต้องการอีกครั้งในไม่ช้า สิ่งนี้ส่งผลเสียต่อประสิทธิภาพ
ตัวเลือก # 3 หมายถึงคุณย้ายสิ่งที่คุณ (อาจ) ไม่ต้องการเวลาเร็ว ๆ นี้ไปยังที่จัดเก็บข้อมูลช้า ไม่เป็นไรเพราะตอนนี้บางสิ่งที่คุณต้องการสามารถใช้ RAM เร็ว
โดยการลบตัวเลือก # 3 คุณได้ จำกัด ระบบปฏิบัติการอย่างมีประสิทธิภาพเพื่อทำ # 1 หรือ # 2 การโหลดเพจจากดิสก์เหมือนกับการโหลดซ้ำจาก swap ยกเว้นการโหลดจาก swap มักจะมีโอกาสน้อยกว่า (เนื่องจากการตัดสินใจเลือกเพจที่เหมาะสม)
กล่าวอีกนัยหนึ่งด้วยการปิดใช้งานการสลับคุณจะไม่ได้อะไรเลย แต่คุณ จำกัด จำนวนตัวเลือกที่มีประโยชน์ของระบบปฏิบัติการในการจัดการกับคำขอหน่วยความจำ ซึ่งอาจจะไม่ใช่แต่อาจเป็นข้อเสียอย่างมาก (และจะไม่เป็นประโยชน์)
[แก้ไข]
ผู้อ่านอย่างระมัดระวังของmmap
manpageโดยเฉพาะคำอธิบายMAP_NORESERVE
จะสังเกตเห็นอีกเหตุผลที่ดีว่าทำไมการแลกเปลี่ยนจึงค่อนข้างจำเป็นแม้ในระบบที่มีหน่วยความจำกายภาพ "เพียงพอ":
"เมื่อไม่ได้ทำการสำรองพื้นที่สว็อปหนึ่งอาจได้รับ SIGSEGV เมื่อมีการเขียนหากไม่มีหน่วยความจำกายภาพ"
- เดี๋ยวก่อนนั่นหมายความว่าไง?
หากคุณแมปไฟล์คุณสามารถเข้าถึงเนื้อหาของไฟล์ได้โดยตรงราวกับว่าไฟล์นั้นอยู่ในพื้นที่ที่อยู่ของโปรแกรม สำหรับการเข้าถึงแบบอ่านอย่างเดียวระบบปฏิบัติการต้องการหลักการไม่เกินหน้าเดียวของหน่วยความจำทางกายภาพซึ่งสามารถ repopulate กับข้อมูลที่แตกต่างกันทุกครั้งที่คุณเข้าถึงหน้าเสมือนที่แตกต่างกัน (สำหรับเหตุผลด้านประสิทธิภาพแน่นอนว่าไม่ใช่สิ่งที่ทำ โดยหลักการคุณสามารถเข้าถึงเทราไบต์ของข้อมูลด้วยหน้าหน่วยความจำกายภาพเดียว) ตอนนี้จะเกิดอะไรขึ้นถ้าคุณยังเขียนไปที่การแมปไฟล์? ในกรณีนี้ระบบปฏิบัติการต้องมีฟิสิคัลเพจ - หรือพื้นที่สว็อป - พร้อมสำหรับทุกเพจที่เขียนไป ไม่มีวิธีอื่นในการเก็บข้อมูลไว้รอบ ๆ จนกว่ากระบวนการ writeback หน้าสกปรกจะทำงานของมัน (ซึ่งอาจเป็นเวลาหลายวินาที) ด้วยเหตุผลนี้ OS ขอสงวนพื้นที่สลับ (แต่ไม่จำเป็นต้องผูกมัด) ดังนั้นในกรณีที่คุณเขียนลงในแผนที่ในขณะที่ไม่มีหน้าทางกายภาพที่ไม่ได้ใช้ (เป็นไปได้มากและเป็นสภาพปกติ) คุณ ' อีกครั้งรับประกันว่ามันจะยังคงทำงาน
ตอนนี้จะเกิดอะไรขึ้นถ้าไม่มีการแลกเปลี่ยน? หมายความว่าไม่สามารถสำรอง swap ได้ (duh!) และหมายความว่าทันทีที่ไม่มีหน้าทางกายภาพว่างเหลืออยู่และคุณกำลังเขียนไปยังหน้าเว็บคุณกำลังประหลาดใจในรูปแบบของกระบวนการรับ ความผิดพลาดในการแบ่งส่วนและอาจถูกฆ่า
[/ แก้ไข]
อย่างไรก็ตามข้อเสนอแนะดั้งเดิมของการทำ swap สองเท่าของขนาด RAM นั้นไร้สาระ แม้ว่าพื้นที่ว่างในดิสก์จะถูก แต่ก็ไม่สมเหตุสมผลที่จะกำหนด swap มากขนาดนั้น การสูญเสียบางสิ่งที่มีราคาถูกยังคงสิ้นเปลืองและคุณไม่ต้องการแลกเปลี่ยนและทำงานอย่างต่อเนื่องทำให้มีขนาดหลายร้อยเมกะไบต์ (หรือใหญ่กว่า)
ไม่มีขนาดสลับที่"ถูกต้อง" (มีขนาด "ถูกต้อง" ให้มากที่สุดเท่าที่มีผู้ใช้และความคิดเห็น) ฉันมักจะกำหนด 512MiB คงที่โดยไม่คำนึงถึงขนาด RAM ซึ่งทำงานได้ดีมากสำหรับฉัน เหตุผลที่อยู่เบื้องหลังที่เป็นที่ 512MiB คือสิ่งที่คุณสามารถเสมอจ่ายในปัจจุบันแม้ในดิสก์ขนาดเล็ก ในทางกลับกันการเพิ่ม swap จำนวนหลายกิกะไบต์นั้นไม่ดีไปกว่านี้แล้ว คุณจะไม่ใช้มันยกเว้นว่ามีบางอย่างผิดปกติ
แม้แต่ใน SSD การสลับคือลำดับของขนาดช้ากว่า RAM (เนื่องจากแบนด์วิดท์บัสและเวลาแฝง) และในขณะที่มันเป็นที่ยอมรับมากในการย้ายบางสิ่งเพื่อสลับที่อาจไม่ต้องการอีกครั้ง (เช่นคุณมักจะไม่ การแลกเปลี่ยนมันอีกครั้งเพื่อให้กลุ่มเพจที่มีอยู่ของคุณนั้นขยายได้อย่างมีประสิทธิภาพฟรี) หากคุณต้องการแลกเปลี่ยนจำนวนมาก (นั่นคือคุณมีแอปพลิเคชั่นที่ใช้เช่นชุดข้อมูล 50GiB) คุณสูญเสียไปมากทีเดียว
เมื่อคอมพิวเตอร์ของคุณเริ่มทำการสลับเข้าและออกมูลค่าหน้ากิกะไบต์ทุกอย่างก็จะคลานไป ดังนั้นสำหรับคนส่วนใหญ่ (รวมถึงฉัน) นี่ไม่ใช่ตัวเลือกและการสลับที่มากนั้นจึงไม่สมเหตุสมผล