ใช้กรณีที่มีลำดับความสำคัญของกระบวนการที่แตกต่างกันสำหรับ CPU และ IO?


9

กระบวนการลีนุกซ์สามารถมีลำดับความสำคัญของ CPU และ IO ที่แตกต่างกัน (nice and ionice)

เหตุใดจึงต้องมี CPU และ IO ที่ต่างกัน

มีการใช้งานในโลกแห่งความเป็นจริงที่แตกต่างกันหรือไม่?

คุณพบกรณีการใช้งานจริงใดที่ต้องการ CPU และ IO ที่แตกต่างกัน ชอบ CPU ที่สูงกว่าลำดับความสำคัญปกติ แต่ต่ำกว่าลำดับความสำคัญ IO ปกติหรือ viceversa

คำตอบ:


6

พฤติกรรมเริ่มต้นของ 'ดี' คือการปรับระดับความสำคัญของแอพพลิเคชั่น 'io' เมื่อมีการเปลี่ยนแปลงความสวยงาม

ทุกสิ่งที่แน่นอนขึ้นอยู่กับปริมาณของคุณ แต่หนึ่งในด้านที่สำคัญของระบบปฏิบัติการใด ๆ เป็นวิธีการจัดสรรทรัพยากรและวิธีการที่จะจัดการกับความขัดแย้ง

เป็นสิ่งสำคัญที่จะต้องเข้าใจความสวยงามของสิ่งที่ทำเพราะเมื่ออยู่ภายใต้ภาระจากกระบวนการแข่งขันวิธีที่ระบบปฏิบัติการจะมีผลกระทบต่อปริมาณงานที่เหลือของคุณ

การช่วงชิงเป็นตัวชี้วัดว่าแอพพลิเคชั่นต่างกันแย่งชิงทรัพยากรเดียวกัน (เช่น CPU) อย่างไร

การจัดการโหลด

นับตั้งแต่มีการนำเสนอตัวกำหนดตารางเวลาที่สมบูรณ์มาอย่างดี Nice เป็นเพียงส่วนหน้าของประโยค 'น้ำหนัก' ของแต่ละกระบวนการ ซึ่งสามารถดูได้ใน proc

$ cat /proc/self/sched
---------------------------------------------------------
...
se.load.weight                     :                 1024
...

การเปลี่ยนความสวยงามเพียงแค่เปลี่ยนน้ำหนัก:

$ nice -n 5 cat /proc/self/sched 
---------------------------------------------------------
...
se.load.weight                     :                 335
...

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

หากฉันมี 3 แอปพลิเคชันทั้งหมดที่ต้องการใช้เวลา CPU โดยค่าเริ่มต้นพวกเขาจะได้รับ 1024 ตามน้ำหนักปกติ ถ้าฉันมีหนึ่งโพรเซสที่มีค่า +5 ดีกว่าด้านบนน้ำหนักทั้งสามจะรวมกันที่ 2383 กระบวนการที่ผ่านการคัดเลือกจะได้รับประมาณ 15% ของเวลาซีพียูในวินาทีที่กำหนดถ้าทั้ง 3 โพรเซสขอ CPU ในวินาทีนั้น .

เหตุใดจึงต้องมี CPU และ IO ที่ต่างกัน

ความดีจริง ๆ เท่านั้นกำลังเล่นกับสิ่งที่ต้องทำเมื่อระบบอยู่ภายใต้การโหลดนั่นคือ - ระบบปฏิบัติการแบ่งเวลาระหว่างกระบวนการแข่งขันตามที่กำหนดโดยปัจจัยอะไรก็ตามที่จำเป็น

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

ความดีจะทำอะไรบางอย่างเมื่อระบบของคุณโหลดไม่มาก (มีสิ่งที่ต้องการความสนใจมากกว่า CPU หรือดิสก์สามารถจัดการได้) มันแค่สั่งให้เคอร์เนลวิธีจัดสรรทรัพยากรภายใต้สถานการณ์เหล่านั้น

มีการใช้งานในโลกแห่งความเป็นจริงที่แตกต่างกันหรือไม่?

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

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

อาจจำเป็นต้องใช้แอปพลิเคชั่นอื่น ๆ ตัวอย่างเช่นคำขอ Apache จำนวนมากที่จะกล่าวว่าเซิร์ฟเวอร์ SQL เช่น MySQL อาจบล็อกเป็นเวลานานเนื่องจาก SQL ไม่ได้ให้บริการเร็วพอเพราะ - รายงานอื่น ๆ บางรายการกำลังแข่งขันกันสำหรับเวลาของ CPU ดังนั้น SQL ไม่เพียง แต่จะหยุดชะงัก แต่ยังเป็น Apache บางครั้ง SQL อาจทำให้เกิดความเสียหายได้ที่นี่เพราะโดยปกติจะมีเธรดผู้ปฏิบัติงานน้อยกว่าเธรด apache ที่แข่งขันกันเป็นกลุ่มเพื่อให้มีการชั่งน้ำหนักที่ดีกว่าโดยตัวกำหนดตารางเวลา

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

คุณพบกรณีการใช้งานจริงใดที่ต้องการ CPU และ IO ที่แตกต่างกัน

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

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

โดยทั่วไปฉันจะเริ่มต้นด้วยการสร้างข้อกำหนดที่ตกลงร่วมกันเช่น:

  • เว็บแอปพลิเคชันทั้งหมดรับประกันว่าจะเสร็จสิ้นการร้องขอภายใน 0.3 วินาที
  • คำขอ SQL ทั้งหมดในระบบรับประกันว่าจะแล้วเสร็จใน 0.1 วินาที
  • เว็บแอปพลิเคชั่นควรจัดการไม่เกิน 50 IOPS และส่งไฟล์ 1k
  • รอยเท้าหน่วยความจำของเว็บแอปพลิเคชันไม่สูงกว่า 250Mb ทั้งหมด

และดึงความต้องการออกมาตอบสนองเช่น:

  • การร้องขอทางเว็บทั้งหมดควรจะแล้วเสร็จใน 0.05 วินาที
  • คำขอ SQL ทั้งหมดควรเสร็จสมบูรณ์ใน 0.02 วินาที
  • ควรมีหน่วยความจำเพียงพอที่จะจัดการกับคำขอทั้งหมด
  • ควรปฏิบัติตามข้อกำหนดของ IO

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

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

ถ้าเรายกตัวอย่าง CPU และ IO ของคุณ ฉันตั้งค่าขีด จำกัด ที่ตรงตามข้อกำหนดเหล่านี้:

# cd /sys/fs/cgroup/blkio/apache
# echo "253:0 100" >blkio.throttle.read_iops_device 
# echo "253:0 50" >blkio.throttle.write_iops_device 
# echo "253:0 102400" >blkio.throttle.read_bps_device

ดังนั้น 100k ไบต์เพื่ออ่าน 100 iops

# cd /sys/fs/cgroup/cpu/apache
# echo 1000000 >cpu.cfs_period_us
# echo 60000 >cpu.cfs_quota_us 

ในช่วงเวลา 1 วินาทีให้ CPU 0.06 วินาที

# cd /sys/fs/cgroup/cpu/sql
# echo 1000000 >cpu.cfs_period_us
# echo 20000 >cpu.cfs_quota_us

ในช่วงเวลา 1 วินาทีให้ CPU 0.02 วินาที

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

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


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