[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

hiểu "cup load average" thế nào cho đúng?



Nghe đồn hội này sắp giải tán nên mình phải chào tạm biệt chớ hỉ!?

Vào terminal, gõ `w |head -1` thì ra thế này

 22:09:09 up 2 days,  7:08,  3 users,  load average: 0.32, 0.36, 0.25


`Load average` là gì? Hiểu thế nào cho đúng?
============================================


Đường Sài Gòn ra Thủ Đức có cây cầu. Lúc bình thường thì chạy bon
bon, nhưng lúc cao điểm thì cách gì cũng có người phải chờ đợi hoặc
đi rất chậm (cũng coi như là chờ.)

CPU cũng thế. Mỗi "core" của nó là một cây cầu. Máy nào i5 i7 có 4 core
thì coi là 4 cây cầu. Khi nào đông xe thì ngoài bốn cái xe đang chạy
trên bốn cây cầu đó còn một số xe khác đang chờ ở để lên cầu. Ví dụ,

* Lúc 1 giờ: có 1 xe trên cầu, 1 xe chờ ở đầu cầu
* Lúc 1 giờ 10 giây: có 2 xe trên cầu, 2 xe ở đầu cầu
* Lúc 1 giờ 20 giây: có 1 xe trên cầu, 10 xe chờ ở đầu cầu

Tính trung bình, có (2 + 4 + 11 / 3 ) = 5.7 xe đang chạy trên cầu
hoặc đang chờ ở đầu cầu. Vậy "load average" của cây cầu này là 5.7 :D

Vậy, `load average` cho biết trung bình có bao nhiêu tiến trình
đang chạy hoặc đang chờ chạy trên tất cả các `core` của hệ thống.
Trong ví dụ ở trên

  0.32, 0.36, 0.25

thì là con số trung bình trong 1 phút, 5 phút và 15 phút. Con số
này có phần lẻ (.32) do phải chia trung bình.

Muốn xem "thật tế" luôn, "real time" luôn, số nguyên thôi, thì gõ

   vmstat 1

rồi đọc con số đầu tiên bạn thấy được. Đó chính là con số tròn
tại mỗi thời điểm. Nó nhảy tưng tưng sau mỗi giây!


`Load average` bao nhiều là nặng!??
===================================

Con số `load average` là tính cho tất cả các cây cầu (core) bạn có.
Nên nếu đang `load` tới `15` mà máy bạn có 4 core thì chưa xi nhê gì.

Đó là vì, người ta (thường quy ước), khi mỗi core phải chờ tới 5
tiến trình, thì mới là nặng. Vậy nếu máy bạn có 4 core, thì khi nào
load lên tới `20` là đáng báo động. Ở mức 15 thì vãn còn nhẹ.
Mặc dù vậy, khi đó cpu hoạt động liên tục, máy sẽ nóng! Có
thể làm chín trứng được luôn đó!

Nếu máy bạn có 2 core, thì load lên tới 2x5 = 10 vẫn còn đẹp.

`Load average` nặng có thật sự `nặng` không?
===========================================

Người ta thường bảo khi máy chạy lên `100%` là máy chạy `nặng`.

Nặng là nặng thế nào? Hỏng hiểu. Nhưng nguyên nhân chính của tình
trạng này thường là do `io blocking`: hệ thống phải chờ cho các
hoạt động đọc / ghi vào ổ cứng được hoàn tất chẳng hạn. Đó là vì,
tốc độ làm việc của CPU, trên bộ nhớ, rất là cao. Nhưng tốc độ
làm việc (đọc / ghi) vào ổ cứng thì chậm hơn rất nhiều. Khi cần
ghi gì vào ổ cứng thì CPU phải chờ một tí, hoặc nhiều tí.

Do sự chậm chạp của thiết bị đọc ghi, mà phải "chờ qua cầu".
Giống như hồi xưa đi học, cô giảng bài nhanh, mà bạn ghi không
kịp. Đó là do tình trạng "io blocking" ở bạn ;) Cô nào giảng bài
từ từ lừ đừ thì thường được học trò khen giỏi. Thực ra là do học
trò khi không kịp mà thôi ^^, hỏng phải cô giỏi :D

Túm lại, khi `load average` lên > 100% (cpu 1 core), 400% (4 core)
thì bạn có thể gọi là `máy đang chờ`, có lẽ là chính xác nhất :)

Muốn tránh chờ thì để máy nghỉ, hoặc mua ổ đĩa SSD, bla bla.

Thôi tạm dừng ở đây. Đi ngủ.

--
I am ... 5.5 dog years old.