ทำไมค่าเริ่มต้นความรวดเร็ว 60 จะเกิดอะไรขึ้นถ้าฉันลดค่า swappiness สำหรับพีซีเดสก์ทอปของฉันลง


16

ฉันกำลังอ่านเกี่ยวกับความว่องไวในฟอรัมต่างๆและฉันเห็นวิดีโอบางอย่าง หลายคนกล่าวว่าเป็นสิ่งที่ดีสำหรับผู้ใช้เดสก์ท็อปเพื่อลดค่า swappiness ต่ำกว่า 60 (ซึ่งเป็นค่าเริ่มต้น) บางคนระบุว่า 60 ดีสำหรับเซิร์ฟเวอร์ ทำไมมันจะดีกว่าสำหรับฉันที่จะลดมันและทำไม 60 ดีสำหรับเซิร์ฟเวอร์? ผมพยายามที่จะค้นหาคำตอบ (ผมมองที่นี่ตัวอย่าง) แต่ไม่สามารถเข้าใจ ... กรุณาใช้คำง่าย: D


แก้ไขคำถาม ตอนนี้ดีไหม
Mina Michael

คำตอบ:


22

หลักฐานของคุณผิด ไม่มีค่า swapiness 'ดีสำหรับเซิร์ฟเวอร์'

Swapiness คือจำนวนของการแลกเปลี่ยนที่ทำโดยเฉพาะอย่างยิ่งวิธีการที่คุณสลับอย่างอุกอาจ สำหรับเซิร์ฟเวอร์ของฉันความรวดเร็วอยู่ใกล้กับศูนย์ในขณะที่ฉันทำให้แน่ใจว่าพวกเขามีหน่วยความจำเพียงพอสำหรับทุกสิ่ง ไม่มีค่า 'ดีที่สุดสำหรับเซิร์ฟเวอร์' มี 60 ซึ่งเป็นค่าเริ่มต้นแล้วมี "ค่าของคุณ" ซึ่งขึ้นอยู่กับการใช้งานและหน่วยความจำที่มีอยู่

หากคุณมีเซิร์ฟเวอร์ที่บางครั้งใช้หน่วยความจำจำนวนมากคุณอาจมีเซิร์ฟเวอร์ที่สูงกว่าค่าเริ่มต้น แต่ฉันจะบอกว่าเซิร์ฟเวอร์บางตัว (เซิร์ฟเวอร์ฐานข้อมูล?) อาจต้องการลดระดับให้ต่ำกว่าคอมพิวเตอร์ที่บ้าน


ดีโอเค: DI กำลังติดตามunix.stackexchange.com/questions/88693/นี้ คำตอบที่สอง (หนึ่งในปัจจุบันที่มี 2 upvotes) กล่าวว่า 60 อาจเหมาะที่สุดสำหรับเซิร์ฟเวอร์ ... และให้ฉันได้รับตรงนี้ ฉันควรตั้งค่า swappiness สูงถ้าฉันทำกระบวนการที่ต้องใช้หน่วยความจำขนาดใหญ่และที่ต่ำถ้าฉันทำกระบวนการเล็ก ๆ หลาย ๆ ?
Mina Michael

(และขึ้นอยู่กับข้อกำหนดของคอมพิวเตอร์ของฉัน) ฉันมีcore 2 duo ประมาณ 2.9 GHz กับ Intel รวมกราฟิกโดยวิธี
Mina Michael

1
เป็นไปไม่ได้ที่จะพูด ขึ้นอยู่กับหลายสิ่งหลายอย่างตามที่ระบุไว้ในคำตอบนั้น -> ฐานข้อมูลบางอย่างอาจทำการแคชของตัวเอง แต่บางอย่างอาจไม่ ขึ้นอยู่กับโปรแกรมและฮาร์ดแวร์ของคุณ มีค่าเริ่มต้นและสิ่งที่ดีที่สุดที่คุณสามารถทำได้คือทดสอบว่าระบบของคุณทำงานภายใต้สถานการณ์ใด ดังที่ได้กล่าวไว้ฉันได้เพิ่ม mem ให้เพียงพอกับระบบของฉันและฉันรู้ว่าสิ่งที่พวกเขาต้องการดังนั้นฉันสามารถมีความรวดเร็วในการตีที่ 0 แต่สำหรับระบบที่ดีต่อสุขภาพการแลกเปลี่ยนบางอย่างอาจเป็นสิ่งที่ดี ไม่มีคำแนะนำในการตั้งค่า 'พระเจ้าสำหรับทุกคน' ที่นี่อ่านคำตอบที่ดีที่สุด นอกจากนี้: มันบอกว่า "อาจเป็น" ไม่ใช่ "เป็น" ในคำตอบที่ 2
Nanne

(และรายละเอียดของคุณ: สิ่งที่สำคัญที่สุดหากคุณกำลังพูดถึงหน่วยความจำที่คุณมีและคุณ แต่ไม่จำเป็นต้องเพิ่มเฉพาะที่นี่: เราสามารถพูดคุยเกี่ยวกับข้อมูลเฉพาะทุกประเภทเป็นเวลาหลายวันสิ่งที่ดีที่สุดที่จะทำคืออ่าน คำตอบที่สูงที่สุดในลิงก์ยูนิกซ์ที่คุณให้ไว้และดำเนินการทดสอบวิธีการทำงานในสภาพแวดล้อมของคุณต่อไป) '
Nanne

นั่นคือตอนที่ฉันพูดว่าฉันไม่เข้าใจสิ่งที่ฉันอ่าน ฉันค่อนข้างอ่อนแอในความรู้ (และแม้กระทั่งภาษาที่จะซื่อสัตย์ XD) ... ดังนั้นฉันแค่ต้องพยายามต่อไป! โอเคขอบคุณ: D
Mina Michael

8

ค่าความ swappiness ถูกปรับสัดส่วนในแบบที่ทำให้ผู้คนสับสน พวกเขาเห็นว่ามันมีช่วง 0-100 ดังนั้นพวกเขาจึงคิดเป็นเปอร์เซ็นต์เมื่อจริงขั้นต่ำที่มีประสิทธิภาพคือประมาณ 50

ประมาณ 60 หมายถึงไม่ต้องสลับจนกว่าเราจะใช้หน่วยความจำได้ประมาณ 80% ปล่อยแคชไว้ 20% 50 หมายถึงรอจนกว่าเราจะมีหน่วยความจำไม่เพียงพอ ค่าที่ต่ำกว่าหมายถึงสิ่งเดียวกัน แต่ด้วยความก้าวร้าวที่เพิ่มขึ้นในการพยายามเพิ่มหน่วยความจำด้วยวิธีอื่น

อธิบายได้ค่อนข้างดีที่http://lwn.net/Articles/83588/


ค่าที่สูงขึ้นหมายถึงอะไรเช่น 80 หรือ 100
jocull

5

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

ความรวดเร็วในการตั้งค่าเริ่มต้นที่ 60 หรือมากกว่านั้นคือการประนีประนอมที่ดีมากเพื่อให้มั่นใจว่าระบบของคุณมีประสิทธิภาพที่ดีโดยทำให้มั่นใจได้ว่าจะไม่ยากเกินกว่าที่จะจัดสรรหน่วยความจำแคชในขณะที่มีหน่วยความจำของโปรแกรม

โปรดจำไว้ว่าหากคุณมีแรมมากมายสำหรับกระบวนการทั้งหมดรวมถึงแคชซึ่งโดยปกติจะเป็นกรณีที่คุณมี RAM จริงการแลกเปลี่ยนไม่น่าจะเป็นปัญหาสำหรับคุณอยู่ดี วิธีที่ต้องการเพื่อแก้ไขปัญหาการสลับเปลี่ยนมากเกินไปคือการลดการใช้ RAM โดยกระบวนการและ / หรือเพื่อเพิ่ม RAM จริง การลดความ swappiness จะมีผลกระทบถ้าสิ่งที่คุณต้องการจริง ๆ คือแรมมากกว่า

โปรดดูคำตอบที่ฉันเขียนถึงคำถามที่คล้ายกันมาก:

/ubuntu//a/184221/54256

ข้อความที่ตัดตอนมา:

ทำไมคนส่วนใหญ่แนะนำให้ลดความว่องไวเป็น 10-20

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

...

เมื่อคุณใช้หน่วยความจำเพียงพอที่เหลืออยู่ไม่เพียงพอสำหรับแคชที่รันได้อย่างราบรื่น Linux อาจจัดสรรหน่วยความจำแอปพลิเคชันที่ไม่ได้ใช้อีกครั้งจาก RAM เพื่อสลับ

มันไม่ได้ทำตามคำสั่งที่แน่นอน ไม่ใช่ว่าคุณจะจัดสรรได้ถึงระดับหนึ่งแล้ว Linux ก็เริ่มทำการแลกเปลี่ยน มันมีอัลกอริธึมที่ค่อนข้าง "คลุมเครือ" ต้องคำนึงถึงหลายสิ่งหลายอย่างซึ่งสามารถอธิบายได้ดีที่สุดโดย "ความกดดันในการจัดสรรหน่วยความจำ" หากมี "ความกดดัน" จำนวนมากในการจัดสรรหน่วยความจำใหม่มันจะเพิ่มโอกาสที่บางคนจะถูกสลับเพื่อให้มีพื้นที่มากขึ้น หากมี "แรงกดดัน" น้อยลงจะทำให้โอกาสเหล่านี้ลดลง

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

เกิดอะไรขึ้นเมื่อระบบจมลงและสลับอย่างหนัก

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

เมื่อเลือกสิ่งที่จะสลับไปยังดิสก์ระบบจะพยายามเลือกหน่วยความจำที่ไม่ได้ใช้จริง - อ่านหรือเขียนจาก มันมีอัลกอริธึมที่ค่อนข้างง่ายสำหรับการคำนวณสิ่งนี้ซึ่งเลือกได้เกือบตลอดเวลา

...

แต่การสลับความเร็วของระบบได้อย่างไร ไม่ได้แลกเปลี่ยนสิ่งที่ช้าลงหรือไม่

การถ่ายโอนข้อมูลจาก RAM ไปยัง swap เป็นการทำงานที่ช้า แต่จะใช้ก็ต่อเมื่อเคอร์เนลค่อนข้างมั่นใจว่าประโยชน์โดยรวมจะมีค่ามากกว่านี้ ตัวอย่างเช่นหากหน่วยความจำแอปพลิเคชันของคุณเพิ่มขึ้นจนถึงจุดที่คุณไม่มีแคชเหลืออยู่และ I / O ของคุณไม่มีประสิทธิภาพเนื่องจากสิ่งนี้คุณสามารถเพิ่มความเร็วได้มากขึ้นจากระบบของคุณโดยการเพิ่มหน่วยความจำ หลังจากค่าใช้จ่ายเริ่มต้นของการแลกเปลี่ยนข้อมูลเพื่อให้มันเป็นอิสระ

สามารถอ่านโพสต์ทั้งหมดได้ที่/ubuntu//a/184221/54256


0

Swappiness ขัดแย้งกับคำตอบทั้งหมดเหล่านี้อย่างสมบูรณ์

การทำงานอย่างแท้จริงของ swappiness อธิบายไว้ในบทความ: https://gokulvasanblog.wordpress.com/2016/11/14/empathising-mammoths-mentality-a-study-on-linux-memory-management/

ความคลุมเครือนั้นได้รับการยืนยันโดยคำแถลงของ Andrew Morton: https://lwn.net/Articles/83593/

ฉันจะเอานิ้วติดหูแล้วร้องเพลง "la la la" จนกว่าผู้คนจะบอกฉันว่า "ฉันตั้งเสียงแหบแห้งให้เป็นศูนย์และมันก็ไม่ได้ทำในสิ่งที่ฉันอยากให้ทำ"

หวังว่ามันจะมีประโยชน์


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