วิธีการตั้งค่าดิสก์ IO สำคัญโดยอัตโนมัติ


8

ถ้าฉันใช้แอพพลิเคชั่นที่ใช้ IO มาก (เช่น Virtualbox, การตรวจสอบข้อมูล Steam หรือแม้กระทั่งdd) ระบบของฉันเกือบจะไม่ตอบสนอง แม้จะเริ่มต้นด้วยการให้ความสำคัญตามปกติ แต่ก็ทำให้เดสก์ท็อปช้ามากและชะลอการเริ่มต้นของแอปพลิเคชันอื่น ๆ

ฉันรู้ว่าฉันสามารถใช้บางสิ่งบางอย่างเช่นioniceเปลี่ยนลำดับความสำคัญเป็นไม่ได้ใช้งานได้ แต่ในกรณีของ Virtualbox ที่วางกระบวนการหลายอย่างมันกลายเป็นเรื่องยาก

ฉันสามารถให้คำแนะนำบางประเภทกับระบบได้ดังนั้นเมื่อเปิดแอปพลิเคชั่นที่เฉพาะเจาะจงพวกเขาจะเริ่มด้วย IO ที่มีความสำคัญน้อยที่สุด?


คุณลองโซลูชันของฉันหรือไม่ มันทำงานได้หรือไม่
sm4rk0

คำตอบ:


7

หมายเหตุ: วิธีนี้ใช้ได้กับ cfq scheduler เท่านั้นดังอธิบายในที่นี้ คุณควรตรวจสอบว่าจะใช้อันไหนโดยการออก

cat /sys/block/sda/queue/scheduler

และเปลี่ยนหากจำเป็น

ถ้าฉันเข้าใจถูกต้องคุณต้องใช้ioniceการตั้งค่าบางอย่างทุกครั้งที่คุณเริ่มคำสั่ง คุณสามารถทำได้ด้วยวิธีนี้:

echo 'ionice -c 3 /usr/bin/VirtualBox "$@"' > VirtualBox
chmod a+x VirtualBox
sudo mv VirtualBox /usr/local/bin/

คำสั่งแรกสร้างไฟล์ที่VirtualBoxมีข้อความที่ยกมาเดี่ยวเป็นเนื้อหาของมัน สิ่งนี้ควรมีเส้นทางแบบเต็มไปยังโปรแกรมเพราะถ้ามีเพียงระบุVirtualBoxว่าสามารถแปลมันเป็นไฟล์ที่เราเพิ่งสร้างและสร้าง "วน"

คำสั่งที่สองทำให้สามารถเรียกใช้งานได้และอันดับที่สามย้ายไฟล์ใหม่นี้ในโฟลเดอร์ซึ่งอยู่ด้านหน้าโฟลเดอร์ "bin" bin /usr/binดังนั้นไฟล์ใหม่ของเราจะถูกเรียกใช้งานแทนที่จะเป็นไฟล์ดั้งเดิม ส่วน "$ @" มีอาร์กิวเมนต์ทั้งหมดที่คำสั่งถูกเรียกด้วยดังนั้นพวกเขาจะถูกส่งต่อไปยังคำสั่ง VirtualBox จริง

ตามคำตอบ ("ใช่") สำหรับคำถามผู้ใช้ขั้นสูงเด็ก ๆ จะประมวลผลลำดับความสำคัญของไอนิซจากพ่อแม่หรือไม่? คุณจะตรวจสอบลำดับความสำคัญของ IO ของกระบวนการทำงานได้อย่างไร มันควรจะเพียงพอสำหรับioniceกระบวนการพาเรนต์เช่นนี้:

ionice -c 3 VirtualBox

จากionice man page , การติดตามค่าคลาส I / O การติดตามมีอยู่:

  • 0 ไม่มีเลย
  • 1 สำหรับเรียลไทม์
  • 2 เพื่อความพยายามอย่างดีที่สุด
  • 3 สำหรับว่าง (ใช้ในตัวอย่างด้านบน)

สามารถใช้หมายเลขหรือชื่อคลาสได้

นอกจากนี้ยังมี-n levelตัวเลือกสำหรับคลาสเรียลไทม์และความพยายามที่ดีที่สุดโดยมี 0-7 เป็นข้อมูลที่ถูกต้อง (ระดับความสำคัญ)


1
ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
Lucio

@Lucio ขอบคุณสำหรับคำใบ้ แต่นั่นไม่ใช่ส่วนที่สำคัญ "ควรจะเพียงพอกับioniceกระบวนการของผู้ปกครอง" ใช่หรือไม่
sm4rk0

1
ใช่คุณถูก. แต่ถ้าคุณสามารถใช้เวลาแล้วเพิ่มข้อมูลเพิ่มเติมจากประสบการณ์ของตัวเองเกี่ยวกับขั้นตอนนี้สร้างงานที่ดีคำตอบ :)
Lucio

@Lucio ฉันหวังว่าจะดีพอตอนนี้ ขอบคุณสำหรับการยืนยัน (:
sm4rk0

1
FYI: ioniceสามารถทำงานกับcfqกำหนดการเท่านั้น! สำหรับรายละเอียดเพิ่มเติม: unix.stackexchange.com/questions/136226/…
andras.tim

-1

คุณสามารถใช้คำสั่ง 'renice' เพื่อจัดลำดับความสำคัญของกระบวนการ:

renice -<priority> <application's pid>

อาจเป็นเพราะไดรฟ์ของคุณกำลังหมุนมากเกินไปดังนั้นเมื่อคุณต้องการเริ่มแอปพลิเคชันเช่น Virtualbox ต้องหมุนก่อนที่คุณจะเริ่มทำงาน (อาจใช้เวลาสักครู่)


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

ปกติดีและ renice ไม่ได้จัดลำดับความสำคัญของ IO แยกกัน
Jay _silly_evarlast_ Wren

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