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