Mengapa rata-rata bergerak 1/5/15 menit tidak digunakan dalam perhitungan beban Linux?

28

Sampai baru-baru ini saya pikir rata-rata beban (seperti yang ditunjukkan misalnya di atas) adalah rata-rata bergerak pada n nilai terakhir dari jumlah proses dalam keadaan "runnable" atau "running". Dan n akan ditentukan oleh "panjang" rata-rata bergerak: karena algoritma untuk menghitung rata-rata beban tampaknya memicu setiap 5 detik, n akan menjadi 12 untuk rata-rata beban 1 menit, 12x5 untuk rata-rata beban 5 menit dan 12x15 untuk rata-rata muatan 15 menit.

Tetapi kemudian saya membaca artikel ini: http://www.linuxjournal.com/article/9001 . Artikel ini cukup tua tetapi algoritma yang sama diterapkan hari ini di kernel Linux. Rata-rata beban bukan rata-rata bergerak tetapi suatu algoritma yang saya tidak tahu namanya. Lagi pula saya membuat perbandingan antara algoritma Linux kernel dan rata-rata bergerak untuk beban periodik imajiner:

memuat grafik.

Terdapat sebuah perbedaan yang besar.

Akhirnya pertanyaan saya adalah:

  • Mengapa implementasi ini dipilih dibandingkan dengan moving average yang sebenarnya, yang memiliki arti nyata bagi siapa pun?
  • Mengapa semua orang berbicara tentang "rata-rata muatan 1 menit" karena lebih dari menit terakhir diperhitungkan oleh algoritma. (Secara matematis, semua ukuran sejak boot; dalam praktiknya, memperhitungkan kesalahan pembulatan - masih banyak tindakan)
pengguna368507
sumber
5
Ini adalah moving average eksponensial (EMA), juga digunakan misalnya dalam keuangan (analisis teknis). Keuntungannya mungkin sama - EMA dapat dihitung hanya dari nilai sebelumnya dan saat ini, dan nilai saat ini diberikan bobot lebih dari nilai yang lebih lama. Dalam MA standar, nilai tertua berkontribusi sama rata dengan nilai terbaru, dan kadang-kadang kita berpikir bahwa nilai yang lebih baru lebih penting.
jg-faustus

Jawaban:

24

Perbedaan ini berasal dari Berkeley Unix yang asli, dan berasal dari fakta bahwa kernel tidak dapat benar-benar mempertahankan rolling average; perlu mempertahankan sejumlah besar bacaan di masa lalu untuk melakukannya, dan terutama di masa lalu tidak ada memori yang tersisa untuk itu. Algoritme yang digunakan sebagai gantinya memiliki keunggulan yang perlu dipertahankan oleh semua kernel adalah hasil dari perhitungan sebelumnya.

Perlu diingat algoritme itu sedikit lebih dekat dengan kebenaran ketika kecepatan komputer dan siklus clock terkait diukur dalam puluhan MHz, bukan GHz; ada lebih banyak waktu untuk perbedaan merayap di hari-hari ini.

geekosaurus
sumber
2
Oke, itu menjelaskan pilihan implementasi. Tahukah Anda mengapa banyak orang mengira ketiga rata-rata beban dihitung selama 1 menit / 5 menit / 15 menit terakhir? Saya pikir itu salah, algoritma menghitung rata-rata semua nilai terakhir. Saya memahami bahwa nilai lama kurang penting daripada nilai baru, namun demikian, nilai yang lebih tua dari 1 menit masih memiliki pengaruh yang tidak dapat diabaikan dalam rata-rata beban 1 menit. Jadi menurut saya "1 menit / 5 menit / 15 menit" tidak masuk akal, tetapi saya mungkin salah (?)
user368507
5
Karena itulah dokumentasi, dan setiap program yang melaporkannya dimulai dengan BSD asli uptimedan w, diklaim; Anda harus melihat sumber kernel untuk mengetahui bahwa itu tidak benar.
geekosaur
1
Sayang sekali
user368507
3
@ user5528 Waktu 1min/5min/15min memang masuk akal. Mereka menentukan waktu setelah mana pengaruh beban saat ini turun oleh beberapa faktor tetap (mungkin e = 2,71 .. atau mungkin 2). Coba saja.
maaartinus
2
@maaartinus Ya. 1 menit / 5 menit / 15 menit menentukan waktu setelah mana tindakan yang lebih lama memiliki bobot kurang dari atau sama dengan 1 / e dalam perhitungan EMA. Ketepatan ini tidak muncul pada waktu aktif atau top man .
user368507