ทำไมค่าเฉลี่ยเคลื่อนที่ 1/5/15 นาทีที่ไม่ตรงไปตรงมาจึงใช้ในการคำนวณโหลด Linux


28

จนกระทั่งเมื่อเร็ว ๆ นี้ฉันคิดว่าค่าเฉลี่ยการโหลด (ดังที่แสดงไว้ด้านบน) เป็นค่าเฉลี่ยเคลื่อนที่ในค่าสุดท้ายของจำนวนกระบวนการในสถานะ "runnable" หรือ "กำลังทำงาน" และ n จะถูกกำหนดโดย "ความยาว" ของค่าเฉลี่ยเคลื่อนที่: เนื่องจากอัลกอริทึมในการคำนวณค่าเฉลี่ยภาระดูเหมือนว่าจะเรียกใช้ทุก ๆ 5 วินาที, n จะเท่ากับ 12 สำหรับค่าเฉลี่ยการโหลด 1 นาที, 12x5 สำหรับค่าเฉลี่ยโหลด 5 นาทีและ 12x15 สำหรับค่าเฉลี่ยการโหลด 15 นาที

แต่แล้วผมอ่านบทความนี้: http://www.linuxjournal.com/article/9001 บทความนี้ค่อนข้างเก่า แต่มีการใช้งานอัลกอริทึมแบบเดียวกันในเคอร์เนล Linux วันนี้ ค่าเฉลี่ยการโหลดไม่ใช่ค่าเฉลี่ยเคลื่อนที่ แต่อัลกอริทึมที่ฉันไม่รู้จักชื่อ อย่างไรก็ตามฉันทำการเปรียบเทียบระหว่างอัลกอริทึมเคอร์เนล Linux และค่าเฉลี่ยเคลื่อนที่สำหรับการโหลดเป็นระยะตามจินตนาการ:

กราฟโหลด.

มีความแตกต่างอย่างมาก

ในที่สุดคำถามของฉันคือ:

  • ทำไมการดำเนินการนี้ได้รับเลือกเมื่อเปรียบเทียบกับค่าเฉลี่ยเคลื่อนที่ที่แท้จริงซึ่งมีความหมายที่แท้จริงสำหรับทุกคน?
  • ทำไมทุกคนพูดถึง "1min load average" เนื่องจากอัลกอริทึมมากกว่านาทีสุดท้ายถูกนำมาพิจารณา (ในทางคณิตศาสตร์การวัดทั้งหมดนับตั้งแต่การบู๊ตในทางปฏิบัติโดยคำนึงถึงข้อผิดพลาดในการปัดเศษ - ยังคงมีมาตรการอีกมาก)

5
มันเป็นค่าเฉลี่ยเคลื่อนที่ชี้แจง (EMA) เช่นใช้ในด้านการเงิน (การวิเคราะห์ทางเทคนิค) ข้อได้เปรียบมีแนวโน้มเหมือนกัน - EMA สามารถคำนวณได้จากเพียงแค่ค่าก่อนหน้าและปัจจุบันและค่าล่าสุดจะได้รับน้ำหนักมากกว่าค่าที่เก่ากว่า ในแมสซาชูเซตมาตรฐานค่าที่เก่าที่สุดมีส่วนช่วยมากพอ ๆ กับค่าเฉลี่ยล่าสุดและบางครั้งเราคิดว่าค่าที่มากกว่านี้มีความสำคัญมากกว่า
jg-faustus

คำตอบ:


24

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

โปรดจำไว้ว่าอัลกอริทึมนั้นใกล้เคียงกับความจริงเล็กน้อยเมื่อคอมพิวเตอร์ความเร็วและรอบสัญญาณนาฬิกาที่สอดคล้องกันนั้นวัดเป็นสิบ MHz แทน GHz มีเวลามากขึ้นสำหรับความคลาดเคลื่อนที่จะคืบคลานในวันนี้


2
ตกลงนั่นอธิบายถึงทางเลือกของการนำไปใช้ คุณรู้หรือไม่ว่าเหตุใดผู้คนจำนวนมากคิดว่าค่าเฉลี่ยโหลดสามตัวคำนวณในช่วง 1 นาที / 5 นาที / 15 นาทีล่าสุด ฉันคิดว่ามันผิดขั้นตอนวิธีคำนวณค่าเฉลี่ยมากกว่าค่าสุดท้ายทั้งหมด ฉันเข้าใจว่าค่าเก่ามีความสำคัญน้อยกว่าค่าใหม่ แต่อย่างไรก็ตามค่าที่เก่ากว่า 1 นาทียังคงมีอิทธิพลที่ไม่สำคัญในค่าเฉลี่ยการโหลด 1 นาที ดังนั้นในความคิดของฉัน "1 นาที / 5 นาที / 15 นาที" ไม่มีเหตุผล แต่ฉันอาจจะผิด (?)
user368507

5
เพราะนั่นคือเอกสารและทุกโปรแกรมที่รายงานพวกเขาเริ่มต้นด้วย BSD ดั้งเดิมuptimeและwอ้างสิทธิ์ คุณต้องดูที่แหล่งเคอร์เนลเพื่อตรวจสอบว่ามันไม่จริง
geekosaur

1
นั่นน่าเสียดายจริงๆ
368507

3
@ user5528 ครั้งที่1min/5min/15min จะมีความรู้สึก พวกเขากำหนดเวลาหลังจากที่อิทธิพลของการโหลดปัจจุบันลดลงตามปัจจัยบางอย่างคงที่ (อาจ e = 2.71 .. หรืออาจ 2) ลองใช้ดู
maaartinus

2
@maaartinus ใช่ 1 นาที / 5 นาที / 15 นาทีกำหนดเวลาหลังจากที่มาตรการเก่ามีน้ำหนักน้อยกว่าหรือเท่ากับ 1 / e ในการคำนวณ EMA ความแม่นยำนี้จะไม่ปรากฏในuptime คนหรือคนด้านบน
user368507
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.