Làm thế nào là mức trung bình của tải trọng trên mạng được diễn giải trong đầu ra của Google? Có giống nhau cho tất cả các bản phân phối?


12

Tôi muốn biết liệu đầu ra của linux dựa trên Red-Hat có thể được diễn giải khác nhau bởi linux dựa trên Debian.

Để làm cho câu hỏi trở nên cụ thể hơn, những gì tôi đang theo dõi, là hiểu cách "tải trung bình" từ dòng đầu tiên của tophệ thống Red-Hat được diễn giải và cách xác minh điều này bằng mã ro tài liệu chính thức.

[Có nhiều cách để tiếp cận chủ đề này, tất cả đều là câu trả lời chấp nhận được cho câu hỏi]

Một cách tiếp cận tiềm năng, sẽ là tìm nơi thông tin này được ghi lại chính thức.
Một số khác, sẽ là tìm phiên bản mã topđược xây dựng từ bản phân phối và phiên bản cụ thể mà tôi đang làm việc.

Đầu ra lệnh tôi nhận được là:

    top - 13:08:34 up  1:19,  2 users,  load average: 0.02, 0.00, 0.00
    Tasks: 183 total,   1 running, 182 sleeping,   0 stopped,   0 zombie
    Cpu(s):  0.2%us,  0.2%sy,  0.0%ni, 96.8%id,  2.7%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   3922520k total,   788956k used,  3133564k free,   120720k buffers
    Swap:  2097148k total,        0k used,  2097148k free,   344216k cached


Trong trường hợp này làm thế nào tôi có thể giải thích giá trị trung bình tải ?
Tôi đã quản lý để xác định rằng tải trung bình là khoảng phút cuối cùng, từ một nguồn tài liệu và nó sẽ được giải thích sau khi được nhân với 100, bởi một nguồn tài liệu khác.
Vì vậy, câu hỏi là:
Nó được tải 0,02% hay 2%?
Nguồn tài liệu và phiên bản:

1) Ngôi sao đầu tiên với

    TOP(1)                        Linux User’s Manual                       TOP(1)

    NAME
           top - display Linux tasks

Nguồn: man toptrong bản phân phối RedHat của tôi,
Ubuntu cũng có phiên bản với "tác vụ" không giải thích mức trung bình tải trong: http :
//manpages.ub Ubuntu.com/manpages/precise/man1/top.1.html

2) Cái thứ hai bắt đầu bằng

    TOP(1)                          User Commands                         TOP(1)

   NAME         top

   top - display Linux processes

Nguồn:
http://man7.org/linux/man-pages/man1/top.1.htm

3) Cái này bắt đầu bằng:

   TOP(1)

   NAME

   top - display and update information about the top cpu processes

Nguồn: http://www.unixtop.org/man.shtml

Cái đầu tiên , có thể được nhìn thấy man toptrong RHELhoặc trong online ubuntu documentationvà nó không có bất kỳ lời giải thích nào cho định dạng đầu ra (cũng như về mức trung bình tải mà tôi quan tâm) .

Điều thứ hai , chứa một lời giải thích ngắn gọn, chỉ ra rằng trung bình tải phải làm trong 1 phút cuối cùng, nhưng không có gì về việc giải thích giá trị của nó!

Tôi trích dẫn trực tiếp từ nguồn thứ hai:

2a. Trung bình UPTIME và LOAD
Phần này bao gồm một dòng duy nhất chứa:
tên chương trình hoặc cửa sổ, tùy thuộc vào
thời gian hiện tại của chế độ hiển thị và thời gian kể từ khi
tổng số lần khởi động cuối cùng của
hệ thống người dùng tải trong 1, 5 và 15 phút qua

Vì vậy, nếu lời giải thích này thực sự chính xác, chỉ cần hiểu rằng trung bình tải là khoảng 1 phút cuối.
Nhưng nó không giải thích định dạng của số.

Trong giải thích thứ ba , nó nói rằng:

Khi chỉ định số cho trung bình tải, chúng nên được nhân với 100.

Giải thích này cho thấy 0,02 có nghĩa là 2% chứ không phải 0,02%. Nhưng điều này có đúng không? Ngoài ra, nó có đúng cho tất cả các bản phân phối của linux và có khả năng triển khai khác nhau topkhông?
Để tìm câu trả lời cho câu hỏi này, tôi đã cố gắng duyệt mã bằng cách tìm kiếm trực tuyến. Nhưng tôi đã tìm thấy, ít nhất, hai phiên bản khác nhau topliên quan đến RHEL ngoài kia! các builtin-top.cvà refactored top.c. Cả hai đều có bản quyền của Red-Hat như thông báo nói ở phần đầu của mã và do đó có vẻ hợp lý khi RHEL sử dụng một trong số này.
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c

Vì vậy, trước khi đào sâu vào mã đó, tôi muốn có ý kiến ​​về nơi tập trung để hình thành một sự hiểu biết chính xác về cách tải cpu được diễn giải?

Từ thông tin được đưa ra trong các câu trả lời dưới đây, ngoài một số tìm kiếm cá nhân, tôi đã thấy rằng:

1 - Cái toptôi đang sử dụng được chứa trong gói Procps-3.2.8. Mà có thể được xác minh bằng cách sử dụng top -v.
2 - Trong phiên bản procps-3.2.8mà tôi đã tải xuống từ trang web chính thức, có vẻ như công cụ uptimelấy thông tin từ procfstệp /proc/loadavgtrực tiếp (không sử dụng chức năng linux getloadavg()).
3 - Bây giờ đối với toplệnh nó cũng không sử dụng chức năng getloadavg(). Tôi quản lý để xác minh rằng topthực sự những điều tương tự nhưuptimecông cụ để hiển thị trung bình tải. Nó thực sự gọi uptimechức năng của công cụ, lấy thông tin từ procfstệp /proc/loadavg.

Vì vậy, mọi thứ đều chỉ vào /proc/loadavgtập tin! Do đó, để hình thành một sự hiểu biết chính xác về load averagesản xuất bởi top, người ta phải đọc mã hạt nhân để xem cách tập tin loadavgđược viết.
Ngoài ra còn có một bài viết xuất sắc được chỉ ra trong một trong những câu trả lời cung cấp giải thích thuật ngữ của một giáo dân về ba giá trị của loadavg.
Vì vậy, mặc dù thực tế là tất cả các câu trả lời đều hữu ích và hữu ích như nhau, tôi sẽ đánh dấu câu trả lời cho bài viết http://www.linuxjournal.com//article/9001 là "câu trả lời" cho câu hỏi của tôi. Cảm ơn tất cả sự đóng góp của bạn!

Ngoài ra từ câu hỏi Tìm hiểu trung bình hàng đầu và tải trung bình , tôi đã tìm thấy một liên kết đến mã nguồn của hạt nhân trỏ đến vị trí loadavgđược tính toán. Vì có vẻ như có một bình luận rất lớn giải thích cách thức hoạt động của nó, cũng là phần này của mã C!
Liên kết đến mã là http://lxr.free-electrons.com/source/kernel/sched/loadavg.c
Một lần nữa tôi không cố gắng tham gia vào bất kỳ hình thức đạo văn nào, tôi chỉ thêm điều này cho đầy đủ. Vì vậy, tôi nhắc lại rằng liên kết đến mã hạt nhân được tìm thấy từ một trong những câu trả lời trong Tìm hiểu trung bình hàng đầu và tải ...


Các phiên bản cho bạn biết gì? ( top -v)
Fiximan

đầu trang: phiên bản Procps 3.2.8
Angelos Ason viêm

Câu trả lời:


19

Tải CPU là chiều dài của hàng đợi chạy, tức là độ dài của hàng đợi các tiến trình đang chờ để chạy.

Các uptimelệnh có thể được sử dụng để xem độ dài trung bình của hàng đợi chạy qua phút cuối cùng, năm phút cuối cùng, và 15 phút cuối cùng, giống như những gì thường được hiển thị bằng top.

Giá trị tải cao có nghĩa là hàng đợi chạy dài. Giá trị thấp có nghĩa là nó ngắn. Vì vậy, nếu trung bình tải một phút là 0,05, có nghĩa là trung bình trong phút đó, có 0,05 quy trình đang chờ để chạy trong hàng đợi chạy. Nó không phải là một tỷ lệ phần trăm. Đây là, AFAIK, giống nhau trên tất cả các Thông báo (mặc dù một số Thông báo có thể không tính các quy trình đang chờ I / O, mà tôi nghĩ Linux cũng vậy; OpenBSD, trong một thời gian, cũng tính các luồng nhân, do đó tải luôn là 1 hoặc hơn).

topTiện ích Linux nhận các giá trị tải từ kernel, ghi chúng vào /proc/loadavg. Nhìn vào các nguồn cho procps-3.2.8, chúng tôi thấy rằng:

  1. Để hiển thị trung bình tải, sprint_uptime()hàm được gọi trong top.c.
  2. Chức năng này sống proc/whattime.cvà gọi loadavg()trong proc/sysinfo.c.
  3. Hàm đó chỉ đơn giản là mở LOADAVG_FILEđể đọc trung bình tải.
  4. LOADAVG_FILEđược định nghĩa trước đó là "/proc/loadavg".

Cảm ơn bạn rất nhiều vì câu trả lời của bạn, điều này có chính thức được ghi nhận ở đâu đó không?
Angelos Ason viêm

1
@AgelosAssonitis Bài báo LinuxJournal này từ năm 2006 có thể thú vị. Nó trỏ đến một vài tệp nguồn trong cây nguồn Linux Kernel mà bạn có thể muốn xem xét. Tôi không phải là người dùng Linux, vì vậy tôi không thể biết các tệp đó có còn trong phiên bản mới nhất của kernel hay không: linuxjournal.com/article/9001
Kusalananda

Bài viết thú vị thực sự! Tôi chỉ xem xét gói Procps để xem liệu thực sự lệnh trên có lấy giá trị của nó từ tệp / Proc / loadavg hay không và đây có phải là kết quả của hàm getloadavg () không.
Angelos Ason viêm

@AgelosAssonitis Vị trí nhất định cho tài liệu về mức trung bình tải là cây nguồn hạt nhân của bạn. POSIX không xác định tải CPU là gì và không đề cập đến từ "tải trung bình" ở bất cứ đâu. Các tiện ích topuptimetiện ích không phải là tiện ích POSIX và getloadavg()chức năng thư viện cũng không được xác định trong POSIX (mặc dù nó có dòng BSD).
Kusalananda

Vì vậy, từ những gì tôi thu thập được, không có tài liệu chính thức nào để hiểu sự hình thành của các giá trị này ngoài chính nguồn nhân, điều đó có đúng không? Tuy nhiên, trước khi đến đó, tôi vẫn cần buộc giá trị được trình bày trong toptệp loadfsg ...
Angelos Asonitis 16/8/2016

7

Trung bình tải thường được tính bởi hạt nhân. Các ứng dụng như topuptimecó thể sử dụng lệnh getloadavg(3)gọi thư viện để truy cập ứng dụng này (có nghĩa là có thể di động trên các phiên bản Unix khác nhau). Trên Linux, điều này thường dẫn đến kết quả là đọc từ /proc/loadavg. Trên FreeBSD, đó là một cuộc gọi hệ thống.

Ví dụ:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
  double ld[3];

  int i=getloadavg(ld,3);
  printf("Load %.2f %.2f %.2f\n",ld[0],ld[1],ld[2]);
}

uptimetopcả hai thực hiện các cuộc gọi tương tự để có được dữ liệu của họ.

Bây giờ, trung bình tải 1/5/15 phút là số lượng quy trình trên hàng đợi chạy. Các hệ điều hành khác nhau có thể tính toán điều này theo những cách khác nhau; sự khác biệt lớn nhất thường là liệu các quá trình chờ I / O (ví dụ bị chặn trên đĩa) có được tính là có thể chạy được hay không. Trên Linux họ là.

Vì vậy, trung bình tải là 3,4 có nghĩa là có trung bình 3,4 quy trình trên hàng đợi chạy trong cửa sổ mẫu (1, 5, 15 phút).

Tuy nhiên, trung bình tải cao không nhất thiết có nghĩa là một máy chủ quá tải. Nếu bạn có 16 lõi thì tải trung bình của bạn có thể là 16 mà không bị căng thẳng. Bạn cũng có thể có rất nhiều fork()cuộc gọi ứng dụng có thể dẫn đến một số lượng lớn các quy trình được tạo / hủy, dẫn đến mức trung bình tải cao, nhưng không ảnh hưởng lớn đến hiệu suất máy chủ. Nó chỉ nên được sử dụng như một hướng dẫn, cùng với các số liệu khác như% CPU bận.


4

Trung bình tải không phải là thứ dành riêng cho bất kỳ công cụ hoặc phân phối cụ thể nào, đó là phép đo được cung cấp bởi Kernel, hay chính xác hơn là bộ lập lịch, do đó, nó là phép đo độc lập phân phối. Phép đo được ghi lại bên trong hệ thống tập tin Proc/proc

Theo cách hiểu của nó, số liệu trung bình tải không phải là một dấu hiệu cho thấy CPU hoạt động mạnh như thế nào mà là cần phải thực hiện bao nhiêu công việc. Tôi không nghĩ thực sự cần phải nhân nó lên bất cứ thứ gì vì đó là phép đo trực tiếp số lượng quá trình ở trạng thái có thể chạy được hoặc không bị gián đoạn.

Hãy thử kiểm tra hai trang man sau: getloadavg(3)uptimeđể biết thêm thông tin.

Số liệu trung bình tải có thể là một khái niệm khó hiểu lúc đầu, tôi nghĩ nhiều người nghĩ rằng đó là một dấu hiệu cho thấy CPU hoạt động mạnh như thế nào, nhưng đó không thực sự là nó.


1
Ok, nhưng chúng tôi hoàn toàn chắc chắn rằng trung bình tải được mô tả trong mô tả getloadavg()chức năng, có phải là trung bình tải tương tự mà toplệnh trong rrc hiển thị không? Tôi đang hỏi điều này bởi vì tôi đã thực hiện tìm kiếm toàn văn bản trong các nội dung chưa được mã hóa của gói Procps-3.2.8 (được chỉ định bởi lệnh top -v) và không có một đề cập nào về hàm getloadavg ()! Vì vậy, có lẽ top tính toán trung bình tải theo một cách khác ....
Angelos Asonitis 16/8/2016
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.