เพิ่มการตอบสนองบนเดสก์ท็อปบน linux ขณะสลับเปลี่ยน


15

ดิสทริบิวชัน GNU / Linux ทั้งหมดที่ฉันทดสอบมีปัญหาว่าเมื่อใดก็ตามที่หน่วยความจำเต็มและระบบเริ่มทำการแลกเปลี่ยนส่วนติดต่อผู้ใช้แบบเดสก์ท็อปและกราฟิกทั้งหมดไม่ตอบสนองเหมือนนรกจนบางครั้งฉันต้องรอประมาณ 5-10 วินาที ต้องย้ายเมาส์ที่มีอยู่จริงจนกว่าตัวชี้เมาส์จะเคลื่อนไหวจริง

นี่เป็นพฤติกรรมที่น่ารำคาญโดยเฉพาะในระบบที่มี RAM ต่ำ

มีวิธีใดบ้างที่จะให้แอปพลิเคชั่น / งานบางอย่างเช่นสภาพแวดล้อมเดสก์ท็อป ฯลฯ มีความสำคัญสูงกว่าที่จะอยู่ใน RAM มากกว่าแอปพลิเคชันอื่น ๆ ดังนั้นแอปพลิเคชันที่ใช้หน่วยความจำทั้งหมด

แก้ไข: ฉันกำลังพูดถึงกรณีที่มีการใช้ RAM ทั้งหมดดังนั้นมันจะเริ่มการแลกเปลี่ยนหากไม่ได้ปิดใช้งาน (ฉันไม่ต้องการให้กระบวนการถูกสุ่มฆ่า) ฉันมีปัญหานี้ไม่เพียง แต่ในสภาพแวดล้อม ram ต่ำ แต่เช่นกันกับ ram 8GiB บนเครื่องเดสก์ท็อปของฉันส่วนหนึ่งเนื่องจาก VMs จำนวนมากส่วนหนึ่งเนื่องจากหน่วยความจำรั่ว ZRAM ไม่ใช่วิธีการแก้ปัญหาอย่างใดอย่างหนึ่งเนื่องจากเป็นเพียงการหน่วงปัญหา ทางออกเดียวที่ฉันนึกถึงสำหรับปัญหานี้คือยูทิลิตี้ userpace หรือ kernel API ที่อนุญาตให้ป้องกันการสลับงานบางงานหรืออย่างน้อยก็ทำให้เป็นไปได้ยากมาก ไม่มีใครรู้วิธีการแก้ปัญหาอื่นหรือรู้อะไรเกี่ยวกับเครื่องมือหรือ API ดังกล่าวในการดำรงอยู่หรือการวางแผน?

แก้ไขครั้งที่สอง: ulatencydดูเหมือนจะไม่ทำงานกับ systemd รุ่นใหม่กว่าตามhttps://aur.archlinux.org/packages/ulatencyd-git/และhttps://wiki.archlinux.org/index.php/Ulatencyd . อาจเป็นเพราะ systemd เข้าควบคุมกลุ่ม cg อย่างเต็มรูปแบบจากเปอร์สเปคทีฟของผู้ใช้หากฉันเข้าใจอย่างถูกต้อง


3
cgroups ถ้าคุณเปิดใช้งาน cgroup หน่วยความจำและเปิดใช้งานการสลับการบัญชี ( cgroup_enable=memory swapaccount=1บนบรรทัดคำสั่งเคอร์เนลโปรดทราบว่านี่มีต้นทุนประสิทธิภาพเล็กน้อย) ตัวอย่างการดำเนินงาน: ulatencyd
Derobert

@derobert สุดยอดสิ่งนี้ดูเหมือนว่าเป็นสิ่งที่ฉันกำลังมองหา ฉันจะเริ่มทดลองกับสิ่งนี้ทันทีที่ฉันมีเวลา
FSMaxB

เยี่ยมมาก ulatencyd ยังมีแพ็คเกจ AUR ด้วยฉันคิดว่าฉันโชคดีที่ได้เป็นผู้ใช้งาน Archlinux
FSMaxB

มีแม้กระทั่งบทความ wiki wiki.archlinux.org/index.php/Ulatencyd
FSMaxB

ถ้าฉันสามารถโหวตได้ Q นี้มากขึ้นฉันจะ! ไม่มีวิธีโดยตรงที่จะบอก GUI และโปรแกรมหลักบางโปรแกรมให้อยู่ใน RAM ดังนั้นมันจึงตอบสนองได้ดี ฉันหมายถึงสถานการณ์กรณีที่แย่กว่านั้นคือการให้ตัวเลือกนี้แก่ผู้ใช้ linux? คอมพิวเตอร์ขัดข้องหรือไม่ ใครที่ไม่ได้ทำมาก่อน :) ฉันหมายถึงบางครั้งฉันตั้งใจเริ่มต้น VMs มากเกินไปเพราะฉันไม่สามารถเพิ่ม (หมายเลข RAM) ได้อย่างถูกต้องและจากนั้นจะใช้เวลาตลอดเวลาเพื่อนำสิ่งต่าง ๆ กลับมาภายใต้การควบคุม การบอก GUI และเทอร์มินัลเพื่อให้อยู่ใน RAM จะแก้ไขใช่มั้ย! ได้โปรดมีคนตอบคำถามนี้!
เดมอน

คำตอบ:


1

เท่าที่ฉันรู้ว่านี่ไม่ใช่ปัญหาเฉพาะกับ Linux เป็นวิธีที่ SWAP (หรือหน่วยความจำเสมือน) ทำงาน หากระบบปฏิบัติการต้องการค้นหาข้อมูลในฮาร์ดไดรฟ์ซึ่งตรงข้ามกับ RAM ระบบจะช้าลง คุณไม่สามารถทำอะไรได้เลยการเข้าถึงดิสก์นั้นช้ากว่าการเข้าถึง RAM

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

ดังนั้นการตั้งค่าลำดับความสำคัญของ CPU ด้วยคำสั่งniceและrenice:

 Renice alters the scheduling priority of one or more running processes.
 The following who parameters are interpreted as process ID's, process
 group ID's, or user names.  Renice'ing a process group causes all pro‐
 cesses in the process group to have their scheduling priority altered.
 Renice'ing a user causes all processes owned by the user to have their
 scheduling priority altered.  By default, the processes to be affected
 are specified by their process ID's.

ลำดับความสำคัญไปจาก -20 (ลำดับความสำคัญสูงสุด) ถึง 20 (ลำดับความสำคัญต่ำสุด) หากต้องการเปลี่ยนลำดับความสำคัญของกระบวนการที่กำลังทำงานอยู่คุณสามารถทำได้:

renice -15 $PID

ที่$PIDเป็นPIDของกระบวนการที่มีความสำคัญที่คุณต้องการที่จะเพิ่มขึ้น คุณสามารถใช้pgrepเพื่อค้นหาสิ่งที่อยู่ ตัวอย่างเช่น:

renice -15 $(pgrep gnome-session)

อีกตัวเลือกหนึ่งคือการตั้งค่า'swappiness'ของระบบซึ่งจะกำหนดว่าเมื่อใดจะเริ่มการแลกเปลี่ยน ค่า swappiness ของ 1 หมายความว่าจะสลับเพื่อหลีกเลี่ยงข้อผิดพลาดของหน่วยความจำไม่เพียงพอ ค่าที่สูงกว่าหมายความว่ามันจะเริ่มทำการแลกเปลี่ยนแม้ว่าจะยังมีหน่วยความจำกายภาพอยู่ก็ตาม คุณสามารถตั้งค่านี้เป็นค่าที่ค่อนข้างต่ำเพื่อให้การสลับระบบของคุณน้อยที่สุด เพิ่มบรรทัดนี้ไปที่/etc/sysctl.conf:

vm.swappiness=1

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


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

@FSMaxB ลำดับความสำคัญของ CPU อาจช่วยได้เนื่องจากมันจะจัดลำดับความสำคัญของ DE มันจะไม่ช่วยถ้า DE ตัวเองกำลังแลกเปลี่ยน แต่จะหากสิ่งอื่นที่ถือ CPU ไว้และทำให้เครื่องช้าลง
terdon

เมื่อ DE ไม่ได้ใช้งานเป็นระยะเวลาหนึ่งจากประสบการณ์ของฉัน DE มักจะถูกสลับเมื่อหน่วยความจำหมด
FSMaxB

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