พารามิเตอร์ vm.swappiness ควบคุมอะไรได้จริง?


36

ตามเอกสารเคอร์เนล:

This control is used to define how aggressive the kernel will swap
memory pages.  Higher values will increase aggressiveness, lower values
decrease the amount of swap.

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

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


1
ใช่ swapiness คือ ;-) คลุมเครือ
ℝaphink

คำตอบ:


27

ตั้งแต่เคอร์เนลเวอร์ชัน 2.6.28, Linux ใช้กลยุทธ์การแทนที่เพจSplit Least Recent Used (LRU) เพจที่มีซอร์สระบบไฟล์เช่นข้อความโปรแกรมหรือไลบรารีที่แบ่งใช้เป็นของแคชไฟล์ เพจที่ไม่มีการสำรองข้อมูลระบบไฟล์เรียกว่าเพจที่ไม่ระบุชื่อและประกอบด้วยข้อมูลรันไทม์เช่นพื้นที่สแต็กที่สงวนไว้สำหรับแอปพลิเคชันเป็นต้นโดยทั่วไปหน้าที่เป็นของแคชไฟล์จะถูกกว่าในการขับออกจากหน่วยความจำ . เนื่องจากเพจที่ไม่ระบุชื่อไม่มีการสำรองระบบไฟล์จึงต้องคงอยู่ในหน่วยความจำตราบใดที่โปรแกรมนั้นต้องการเว้นแต่จะมีพื้นที่สว็อปเพื่อจัดเก็บไว้

vm.swappinessตัวเลือกมาลงเล่นในที่กำหนดไว้ในget_scan_count() พิจารณาว่าควรสแกนรายการ LRU แบบไม่ระบุชื่อและเชิงรุกอย่างจริงจังอย่างไรเมื่อค้นหาหน้าต่างๆ ค่าของแต่ละกรณีถูกกำหนดโดยค่าเฉลี่ยลอยตัวของการหมุนเมื่อเร็ว ๆ นี้และอัตราส่วนการสแกนเมื่อเร็ว ๆ นี้ที่การอ้างอิงล่าสุดมีน้ำหนักมากกว่าน้ำหนักที่เก่ากว่าเพื่อคำนึงถึงภาระงานที่เปลี่ยนแปลงของระบบmm/vmscan.cget_scan_count()

vm.swappinessเป็นตัวปรับแต่งที่มีการเปลี่ยนแปลงความสมดุลระหว่างการสลับหน้าแคชไฟล์ในความโปรดปรานของหน้าเว็บที่ไม่ระบุชื่อ vm.swappinessเป็นค่าลำดับความสำคัญให้กับหน้าเว็บที่ไม่ระบุชื่อโดยค่าเริ่มต้นตั้ง 60 แคชไฟล์จะได้รับค่าลำดับความสำคัญเป็น 200 ซึ่งvm.swappinessตัวดัดแปลงจะถูกหัก ( file_prio=200-anon_prio) ซึ่งหมายความว่าโดยค่าเริ่มต้นน้ำหนักที่มีความสำคัญจะอยู่ในระดับปานกลางในความโปรดปรานของหน้าเว็บที่ไม่ระบุชื่อ ( anon_prio=60, file_prio=200-60=140) อย่างไรก็ตามเมื่อระบบอยู่ใกล้กับเงื่อนไขหน่วยความจำไม่เพียงพอรายการ LRU ทั้งแบบไม่ระบุชื่อและไฟล์จะถูกสแกนอย่างเท่าเทียมกันเว้นแต่vm.swappinessจะถูกตั้งค่าเป็นศูนย์

เมื่อvm.swappinessตั้งค่าเป็น 100 ลำดับความสำคัญจะเท่ากัน ( anon_prio=100, file_prio=200-100=100) การตั้งค่าvm.swappinessเป็นศูนย์จะป้องกันเคอร์เนลจากการลบล้างหน้านิรนามในหน้าของไฟล์แคช


มีวิธีการเปลี่ยน swappiness ของ file_prio หรือไม่? หรือ จำกัด ไว้ในไดเรกทอรีเฉพาะ
CMCDragonkai

13

มีสูตรที่ใช้ในการคำนวณหน้าใดที่จะถูกสลับ ในvmscan.cคุณสามารถดูอัลกอริทึมนี้:

swap trend = mapped_ratio / 2 + distress + vm_swappiness

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


6

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

ในลักษณะที่คล้ายกันความว่องไวมีผลกระทบที่ไม่เกี่ยวข้องกับการควบคุมที่กำหนดไว้อย่างดีของเคอร์เนลภาค ตามที่ระบุไว้โดย@neon_overlord บน askubuntu.com

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

ดังนั้นสิ่งที่ไม่ได้จริงๆควบคุม? หนึ่งคำตอบที่ถูกต้อง - นอกเหนือจากคำตอบที่ได้ให้ไว้แล้ว - คือการปรับเปลี่ยนความคาดหวังของคุณว่าคุณสามารถควบคุมระบบของคุณได้มากขึ้นและการที่ลูกบิดสองปุ่มจะทำให้คุณสามารถควบคุมสิ่งนั้นได้อย่างมีความหมาย

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