เพราะส่วนใหญ่เชื่อว่าการแลกเปลี่ยน = ไม่ดีและถ้าคุณไม่ลดความไม่แน่นอนระบบจะสลับเมื่อไม่จำเป็นต้องใช้จริงๆ ไม่เป็นความจริงเลย ผู้คนเชื่อมโยงการแลกเปลี่ยนกับเวลาที่ระบบของพวกเขาจมลง - แต่ส่วนใหญ่เป็นการแลกเปลี่ยนเพราะระบบกำลังจมลงไม่ใช่ทางอื่น ๆ เมื่อมีการสลับระบบระบบจะทำการประเมินค่าประสิทธิภาพในการตัดสินใจเปลี่ยนและตัดสินใจว่าการไม่ทำเช่นนั้นจะมีโทษโดยรวมที่มากขึ้นเกี่ยวกับประสิทธิภาพของระบบหรือความเสถียร
โดยรวมแล้วการตั้งค่าเริ่มต้นส่งผลให้ประสิทธิภาพโดยรวมและเสถียรภาพที่ดี ฉันขอแนะนำให้ทิ้งไว้เป็นค่าเริ่มต้น มีช่องทางเพิ่มเติมสำหรับ Linux ในการปรับปรุงการจัดการหน่วยความจำเพื่อแก้ไขปัญหาบางกรณี แต่โดยการควบคุม swappiness ที่มีขนาดใหญ่นั้นไม่ใช่วิธีแก้ปัญหาที่ดี - ปรับในทิศทางเดียวและคุณอาจแก้ไขปัญหาหนึ่งและสร้างปัญหาอื่น ๆ หากเป็นไปได้เพียงแค่ติดตั้ง RAM ที่มีอยู่จริง (และปล่อยทิ้งไว้เพียงลำพัง) eclipses การแก้ไขอื่น ๆ ทั้งหมด
Linux ใช้ RAM อย่างไร
แอพพลิเคชั่นใด ๆ ที่ไม่ได้ใช้งานอาจถูกใช้เป็น "แคช" แคชมีความสำคัญต่อระบบการทำงานที่รวดเร็วและราบรื่นการเร่งความเร็วในการอ่านและเขียนข้อมูลบนดิสก์
หากแอปพลิเคชันของคุณเพิ่มการใช้หน่วยความจำจนถึงจุดที่ใช้ RAM เกือบทั้งหมดแคชของคุณจะลดลงและการทำงานของดิสก์โดยเฉลี่ยจะช้าลงตามผลลัพธ์ ไม่เพียงพอที่จะมีแคชเพียงสิบเมกะไบต์หรือน้อยกว่าในปัจจุบัน
หากแอปพลิเคชันเพิ่มการใช้หน่วยความจำมากยิ่งขึ้น - สมมติว่าคุณไม่มีพื้นที่สว็อป - คุณจะไม่เพียง แต่ไม่มีที่ว่างสำหรับแคช แต่ในที่สุดคุณจะมีหน่วยความจำไม่เพียงพอและระบบของคุณจะต้องหยุดกระบวนการทำงาน กระบวนการฆ่านั้นแย่กว่าการชะลอตัวลงเนื่องจากจะทำให้ระบบที่ไม่แน่นอนและไม่แน่นอนคาดเดาได้
Linux ใช้การแลกเปลี่ยนอย่างไร
เพื่อต่อสู้กับปัญหาทั้งสองนี้ระบบของคุณสามารถจัดสรรหน่วยความจำแอพพลิเคชั่นที่ใช้งานไม่ค่อยได้ให้กับพื้นที่สว็อปในดิสก์ของคุณซึ่งเป็นการเพิ่ม RAM แรมเพิ่มเติมสามารถป้องกันกระบวนการที่กำลังจะหมดเนื่องจากหน่วยความจำไม่เพียงพอและสามารถเรียกคืนแคชเล็กน้อยเพื่อให้การทำงานของดิสก์สามารถทำงานได้อย่างราบรื่นมากขึ้น
การจัดสรรใหม่นี้ไม่ได้ดำเนินการตามการตัดที่ชัดเจนว่า คุณไม่สามารถจัดสรรได้ถึงร้อยละที่แน่นอนหลังจากที่ Linux เริ่มทำการแลกเปลี่ยน มันมีอัลกอริทึม "คลุมเครือ" ต้องคำนึงถึงหลายสิ่งหลายอย่างซึ่งสามารถอธิบายได้ดีที่สุดโดย "ความกดดันในการจัดสรรหน่วยความจำ" หากมี "ความกดดัน" จำนวนมากในการจัดสรรหน่วยความจำใหม่มันจะเพิ่มโอกาสที่บางคนจะถูกสลับเพื่อให้มีพื้นที่มากขึ้น หากมี "แรงกดดัน" น้อยลงจะทำให้โอกาสเหล่านี้ลดลง
ระบบของคุณมีการตั้งค่า "swappiness" ซึ่งจะช่วยให้คุณปรับแต่งวิธีคำนวณ "ความดัน" นี้ มันมักจะแสดงอย่างไม่ถูกต้องว่าเป็น "เปอร์เซ็นต์ของ RAM" แต่ไม่ใช่มันเป็นเพียงค่าที่ใช้เป็นส่วนหนึ่งของสูตร ค่าประมาณ 40 ถึง 60 เป็นค่าสติที่แนะนำ 60 เป็นค่าเริ่มต้นในปัจจุบัน
การปล่อยให้ระบบของคุณสลับกันเมื่อสิ่งนั้นเป็นสิ่งที่ดีโดยรวมแม้ว่าคุณจะมี RAM จำนวนมากก็ตาม ปล่อยให้ระบบของคุณสลับหากจำเป็นต้องให้ความอุ่นใจว่าหากคุณเคยประสบกับสถานการณ์ความจำต่ำแม้แต่ชั่วคราว (ในขณะที่ใช้กระบวนการสั้น ๆ ที่ใช้หน่วยความจำจำนวนมาก) ระบบของคุณจะมีโอกาสครั้งที่สองที่ทำให้ทุกอย่างทำงาน หากคุณไปถึงการปิดการแลกเปลี่ยนอย่างสมบูรณ์คุณก็เสี่ยงต่อการถูกฆ่าเนื่องจากไม่สามารถจัดสรรหน่วยความจำได้
เกิดอะไรขึ้นเมื่อระบบจมลงและสลับอย่างหนัก
การสลับเป็นการดำเนินการที่ช้าและมีค่าใช้จ่ายสูงดังนั้นระบบจะหลีกเลี่ยงมันเว้นแต่ว่าจะคำนวณว่าการแลกเปลี่ยนในประสิทธิภาพแคชจะทำขึ้นโดยรวมหรือหากจำเป็นเพื่อหลีกเลี่ยงกระบวนการฆ่า
หลายครั้งที่ผู้คนจะมองไปที่ระบบของพวกเขาที่ฟาดดิสก์อย่างหนักและใช้พื้นที่สว็อปจำนวนมากและตำหนิการแลกเปลี่ยน นั่นเป็นวิธีที่ผิดที่จะทำ หากการแลกเปลี่ยนถึงจุดสูงสุดนี้หมายความว่าการสลับเป็นความพยายามของระบบของคุณในการจัดการกับปัญหาหน่วยความจำเหลือน้อยไม่ใช่สาเหตุของปัญหาและการสลับกระบวนการทำงานของคุณจะไม่เกิดขึ้นแบบสุ่ม
แล้วระบบเดสก์ท็อปล่ะ พวกเขาไม่ต้องการแนวทางอื่นหรือ
ผู้ใช้ระบบเดสก์ท็อปคาดหวังว่าระบบจะ "รู้สึกตอบสนอง" ในการตอบสนองต่อการกระทำที่ผู้ใช้ริเริ่มเช่นการเปิดแอปพลิเคชันซึ่งเป็นประเภทของการกระทำที่บางครั้งสามารถทริกเกอร์การแลกเปลี่ยนได้
วิธีหนึ่งที่บางคนพยายามปรับแต่งสิ่งนี้คือการลดพารามิเตอร์ swappiness ซึ่งสามารถเพิ่มความทนทานของระบบให้กับแอปพลิเคชันโดยใช้หน่วยความจำสูงสุดและใช้พื้นที่แคชน้อย
อย่างไรก็ตามนี่เป็นเพียงการเปลี่ยนเสาประตู แอปพลิเคชันแรกอาจโหลดโดยไม่มีการดำเนินการสลับ แต่จะปล่อยให้หย่อนน้อยลงสำหรับแอปพลิเคชันถัดไปที่โหลด การสลับค่าเดียวกันอาจเกิดขึ้นในภายหลังเมื่อคุณเปิดแอปพลิเคชันครั้งต่อไปแทน ในขณะเดียวกันประสิทธิภาพของระบบโดยรวมลดลงเนื่องจากขนาดแคชที่ลดลง ดังนั้นประโยชน์ใด ๆ จากการตั้งค่า swappiness ที่ลดลงอาจเป็นเรื่องยากที่จะวัดลดการหน่วงเวลาการสลับบางครั้ง แต่ก็ทำให้การทำงานช้าอื่น ๆ ในเวลาอื่น ๆ การลดความว่องไวเล็กน้อยอาจเป็นสิ่งที่สมเหตุสมผลหากคุณรู้ว่าคุณกำลังทำอะไร แต่การลดความมันลงเหลือเพียง 10% สามารถทำให้ระบบยอมให้มีขนาดแคชที่ต่ำมากและทำให้ระบบมีความรับผิดชอบมากขึ้น
ควรหลีกเลี่ยงการปิดใช้งานการแลกเปลี่ยนอย่างสมบูรณ์เนื่องจากคุณสูญเสียการป้องกันเพิ่มเติมจากเงื่อนไขหน่วยความจำไม่เพียงพอซึ่งอาจทำให้กระบวนการขัดข้องหรือถูกฆ่า
การรักษาที่มีประสิทธิภาพมากที่สุดคือการติดตั้ง RAM เพิ่มเติมถ้าคุณสามารถซื้อได้
การสลับสามารถปิดการใช้งานในระบบที่มีแรมเยอะหรือไม่?
หากคุณมี RAM มากกว่าที่คุณต้องการสำหรับแอพพลิเคชั่นคุณจะต้องสลับกันบ่อยครั้ง การปิดใช้งานการสลับอาจจะไม่ทำให้เกิดความแตกต่างได้ แต่ถ้าคุณมี RAM มากมายการเปิดใช้งานการสลับจะไม่ได้รับโทษใด ๆ เพราะระบบไม่สลับเมื่อไม่ต้องการ
สถานการณ์เดียวที่จะสร้างความแตกต่างคือในสถานการณ์ที่ไม่น่าเป็นไปได้ที่ระบบพบว่าตัวเองมีหน่วยความจำไม่เพียงพอและทำให้ระบบแคชได้รับการขัดขวางและอยู่ในสถานการณ์ประเภทนี้ที่คุณต้องการแลกเปลี่ยนมากที่สุด ดังนั้นคุณสามารถปล่อยให้สลับได้อย่างปลอดภัยในการตั้งค่าปกติเพื่อเพิ่มความอุ่นใจโดยไม่ส่งผลเสียเมื่อคุณมีหน่วยความจำมากมาย
แต่การสลับความเร็วของระบบได้อย่างไร ไม่ได้แลกเปลี่ยนสิ่งที่ช้าลงหรือไม่
การถ่ายโอนข้อมูลจาก RAM ไปยัง swap เป็นการทำงานที่ช้า แต่จะใช้ก็ต่อเมื่อเคอร์เนลค่อนข้างแน่ใจว่าประโยชน์โดยรวมซึ่งเป็นผลมาจากการรักษาขนาดแคชที่เหมาะสมจะมีค่ามากกว่านี้
เมื่อข้อมูลอยู่ในการแลกเปลี่ยนข้อมูลจะออกมาอีกเมื่อใด
ส่วนใด ๆ ของหน่วยความจำที่กำหนดไว้จะกลับมาจากการสลับทันทีที่ใช้ - อ่านหรือเขียน อย่างไรก็ตามโดยทั่วไปหน่วยความจำที่เปลี่ยนเป็นหน่วยความจำที่ไม่ได้เข้าถึงในเวลานานและไม่คาดว่าจะต้องใช้ในไม่ช้า
การถ่ายโอนข้อมูลจากการแลกเปลี่ยนนั้นใช้เวลานานพอ ๆ กับการใส่เข้าไปในนั้น เคอร์เนลของคุณจะไม่ลบข้อมูลออกหากไม่จำเป็น แม้ว่าข้อมูลจะอยู่ในการสลับและไม่ได้ใช้งาน แต่จะทำให้มีหน่วยความจำเพิ่มขึ้นสำหรับสิ่งอื่น ๆ ที่กำลังใช้งานอยู่และแคชของระบบมากขึ้น
มีกรณีใดบ้างที่การลดความว่องไวมีความเหมาะสม?
ใช่. หากคุณใช้งานเซิร์ฟเวอร์เฉพาะแอปพลิเคชันเซิร์ฟเวอร์หนึ่งตัวที่ไม่ได้รับประโยชน์จากแคชของระบบ เซิร์ฟเวอร์ฐานข้อมูลบางตัวเช่นเซิร์ฟเวอร์ Oracle, MySQL / MariaDB แนะนำในบางกรณีลดความรวดเร็วลงเหลือ 1 ถึง 10 เนื่องจากเอ็นจิ้นฐานข้อมูลเหล่านี้ใช้แคชของตัวเอง
โปรดทราบว่านี่เป็นความจริงเฉพาะในกรณีที่ระบบของคุณทุ่มเทให้กับงานนั้นและในกรณีของ MySQL / MariaDB เฉพาะในกรณีที่คุณใช้ InnoDB หรือ XtraDB ล้วนๆไม่ใช่ MyISAM หรือ Aria เป็นต้น