"टॉप" आउटपुट में "लोड एवरेज" की व्याख्या कैसे की जाती है? क्या यह सभी वितरणों के लिए समान है?


12

मैं जानना चाहूंगा कि क्या Red-Hat आधारित linux का आउटपुट अलग तरह से किसी डेबियन आधारित linux द्वारा व्याख्या किया जा सकता है।

प्रश्न को और भी विशिष्ट बनाने के लिए, मैं जो कुछ भी हूं उसके बाद, यह समझ रहा हूं कि topRed-Hat सिस्टम पर कमांड की पहली पंक्ति से "लोड औसत" की व्याख्या कैसे की जाती है और आधिकारिक प्रलेखन आरओ कोड द्वारा इसे कैसे सत्यापित किया जाए।

[इस विषय से संपर्क करने के कई तरीके हैं, जिनमें से सभी प्रश्न के स्वीकार्य उत्तर हैं]

एक संभावित दृष्टिकोण, यह पता लगाना होगा कि यह जानकारी आधिकारिक रूप से कहां दर्ज की गई है।
एक अन्य, वह कोड संस्करण खोजना होगा topजो विशिष्ट वितरण और संस्करण में बनाया गया है जिस पर मैं काम कर रहा हूं।

मुझे जो आउटपुट मिल रहा है वह है:

    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


इस मामले में मैं लोड औसत मूल्य की व्याख्या कैसे कर सकता हूं ?
मैंने यह पता लगाने में कामयाबी हासिल की है कि एक प्रलेखन स्रोत से औसत लोड अंतिम मिनट के बारे में है, और यह कि किसी अन्य दस्तावेज़ स्रोत द्वारा 100 से गुणा किए जाने के बाद इसकी व्याख्या की जानी चाहिए।
तो, सवाल
यह है कि क्या यह 0.02% या 2% भरी हुई है?
प्रलेखन स्रोत और संस्करण:

1) पहले एक के साथ सितारों

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

    NAME
           top - display Linux tasks

स्रोत: man topमेरे रेडहैट वितरण में
उबंटू के पास "कार्यों" के साथ संस्करण भी है जो लोड औसत को स्पष्ट नहीं करता है:
http://manpages.ubuntu.com/manpages/precise/man1/top.1.html

2) दूसरे के साथ शुरू होता है

    TOP(1)                          User Commands                         TOP(1)

   NAME         top

   top - display Linux processes

स्रोत:
http://man7.org/linux/man-pages/man1/top.1.htm

3) यह एक के साथ शुरू होता है:

   TOP(1)

   NAME

   top - display and update information about the top cpu processes

स्रोत: http://www.unixtop.org/man.shtml पहले एक, द्वारा देखा जा सकता में या में है और यह उत्पादन प्रारूप के लिए कोई स्पष्टीकरण नहीं है (और न ही के बारे में लोड औसत जिसमें मैं में दिलचस्पी है) । दूसरा एक, एक संक्षिप्त विवरण, उनका कहना लोड औसत पिछले 1 मिनट से कोई लेना देना नहीं है शामिल है, लेकिन अपने मूल्य की व्याख्या के बारे में कुछ भी नहीं है!

man topRHELonline ubuntu documentation


मैं दूसरे स्रोत से सीधे उद्धृत करता हूं:

2 ए। UPTIME और LOAD
इस हिस्से में एक एकल लाइन शामिल है:
प्रोग्राम या विंडो नाम, प्रदर्शन मोड के आधार पर
वर्तमान समय और समय की अंतिम बूट के बाद से अंतिम 1, 5 और 15 मिनट से अधिक
उपयोगकर्ता
सिस्टम लोड एवीजी की कुल संख्या।

इसलिए, यदि यह स्पष्टीकरण वास्तव में सही है, तो यह समझना पर्याप्त है कि लोड औसत पिछले 1 मिनट के बारे में है।
लेकिन यह संख्या के प्रारूप की व्याख्या नहीं करता है।

में तीसरे स्पष्टीकरण, यह कहा गया है कि:

लोड औसत के लिए संख्या निर्दिष्ट करते समय, उन्हें 100 से गुणा किया जाना चाहिए।

यह स्पष्टीकरण बताता है कि 0.02 का मतलब 2% है न कि 0.02%। लेकिन क्या यह सही है? इसके अतिरिक्त, क्या यह लिनक्स के सभी वितरणों के लिए सही है और संभावित रूप से अलग-अलग कार्यान्वयन है top?
इस प्रश्न का उत्तर खोजने के लिए, मैंने इसे ऑनलाइन खोज कर कोड के माध्यम से जाने की कोशिश की। लेकिन मैंने पाया, कम से कम, दो अलग-अलग संस्करण topआरएचईएल से संबंधित हैं! builtin-top.cऔर पुनर्संशोधित top.c। Red-Hat द्वारा कॉपीराइट के अनुसार दोनों नोटिस कोड की शुरुआत में कहते हैं और इस तरह तर्कसंगत लगते हैं कि RHEL इनमें से किसी एक का उपयोग करता है।
http://lxr.free-electrons.com/source/tools/perf/builtin-top.c
http://lxr.free-electrons.com/source/tools/perf/util/top.c

इसलिए, उस बहुत से कोड में जाने से पहले, मैं इस बारे में एक राय चाहता था कि सीपीयू लोड की व्याख्या कैसे की जाए, इस पर एक सटीक समझ बनाने के लिए कहाँ ध्यान केंद्रित किया जाए।

नीचे दिए गए उत्तरों में दी गई जानकारी से, कुछ व्यक्तिगत खोज के अलावा, मैंने पाया है कि:

1 - topजो मैं उपयोग कर रहा हूं वह पैकेज प्रॉप्स 3.2.8 में निहित है। जिसका उपयोग करके सत्यापित किया जा सकता है top -v
2 - उस संस्करण में, procps-3.2.8जिसे मैंने आधिकारिक वेबसाइट से डाउनलोड किया है, ऐसा लगता है कि टूल uptimeको सीधे procfsफ़ाइल से इसकी जानकारी मिलती है /proc/loadavg(लिनक्स फ़ंक्शन का उपयोग नहीं getloadavg())।
3 - अब topकमांड के लिए भी यह फंक्शन का उपयोग नहीं करता है getloadavg()। मैं यह सत्यापित करने में कामयाब रहा कि topक्या वास्तव में इसके जैसी ही चीजें हैंuptimeउपकरण लोड औसत दिखाने के लिए। यह वास्तव में uptimeटूल के फ़ंक्शन को कॉल करता है, जो procfsफ़ाइल से इसकी जानकारी प्राप्त करता है /proc/loadavg

तो, सब कुछ /proc/loadavgफ़ाइल को इंगित करता है! इस प्रकार, load averageद्वारा उत्पादित की एक सटीक समझ बनाने के लिए top, किसी को कर्नेल कोड को यह देखने के लिए पढ़ना चाहिए कि फ़ाइल कैसे loadavgलिखी जाती है।
वहाँ भी एक उत्कृष्ट लेख में से एक है कि तीन के मूल्यों की एक आम आदमी की शर्तों की व्याख्या प्रदान करता है जवाब में बताया गया है loadavg
इसलिए, इस तथ्य के बावजूद कि सभी उत्तर समान रूप से उपयोगी और सहायक रहे हैं, मैं उस एक को चिह्नित करने जा रहा हूं जो मेरे प्रश्न का उत्तर " http://www.linuxjournal.com//article/9001 " है। आप सभी के योगदान के लिए धन्यवाद!

इसके अलावा प्रश्न शीर्ष और लोड औसत को समझने से , मुझे कर्नेल के स्रोत कोड का एक लिंक मिला है जो उस स्थान पर इंगित करता है जहां loadavgगणना की जाती है। जैसा कि लगता है कि यह काम करने के तरीके की व्याख्या करने वाली एक बड़ी टिप्पणी है, कोड का यह हिस्सा भी है C!
कोड का लिंक http://lxr.free-electrons.com/source/kernel/sched/loadavg.c है।
फिर से मैं किसी भी तरह के साहित्यिक चोरी में संलग्न होने की कोशिश नहीं कर रहा हूं, मैं इसे पूर्णता के लिए जोड़ रहा हूं। इसलिए, मैं दोहरा रहा हूं कि कर्नेल कोड का लिंक अंडरस्टैंडिंग टॉप और लोड एवरेज में से एक उत्तर से मिला ...


संस्करण आपको क्या बताते हैं? ( top -v)
फिक्सिमैन

शीर्ष: वर्जन 3.2.8
एंजेलोस असोनाइटिस

जवाबों:


19

सीपीयू लोड रन कतार की लंबाई है, अर्थात चलने की प्रतीक्षा कर रही प्रक्रियाओं की कतार की लंबाई।

uptimeआदेश औसत सिर्फ तुम क्या आमतौर पर द्वारा प्रदर्शित किया जाता है की तरह अंतिम मिनट से अधिक रन कतार की लंबाई, पिछले पांच मिनट, और पिछले 15 मिनट, देखने के लिए इस्तेमाल किया जा सकता top

एक उच्च लोड मान का मतलब है कि कतार लंबी है। कम मूल्य का मतलब है कि यह छोटा है। इसलिए, अगर एक मिनट का लोड औसत 0.05 है, तो इसका मतलब है कि उस मिनट के दौरान औसतन, 0.05 प्रक्रियाएँ रन क्यू में चलने की प्रतीक्षा कर रही थीं। यह एक प्रतिशत नहीं है। यह है, AFAIK, सभी यूनियनों पर समान (हालांकि कुछ यूनीसेज़ I / O के लिए प्रतीक्षा करने वाली प्रक्रियाओं की गणना नहीं कर सकते हैं, जो मुझे लगता है कि लिनक्स करता है। OpenBSD, केवल थोड़ी देर के लिए, गिने हुए धागे भी गिना जाता है, ताकि लोड हमेशा 1 या हो; अधिक)।

लिनक्स topउपयोगिता को कर्नेल से लोड मान मिलता है, जो उन्हें लिखता है /proc/loadavg। के लिए स्रोतों को procps-3.2.8देखते हुए, हम देखते हैं कि:

  1. लोड औसत प्रदर्शित करने के लिए, sprint_uptime()फ़ंक्शन को कहा जाता है top.c
  2. यह फ़ंक्शन अंदर रहता है proc/whattime.cऔर कॉल करता loadavg()है proc/sysinfo.c
  3. यह फ़ंक्शन केवल LOADAVG_FILEलोड औसत पढ़ने के लिए खुलता है।
  4. LOADAVG_FILEपहले के रूप में परिभाषित किया गया है "/proc/loadavg"

आपके उत्तर के लिए बहुत-बहुत धन्यवाद, क्या यह कहीं आधिकारिक रूप से प्रलेखित है?
एंजेलो एसोनाइटिस

1
@ एग्लोसएस्सोनिटिस 2006 से यह LinuxJournal लेख दिलचस्प हो सकता है। यह लिनक्स कर्नेल स्रोत के पेड़ में कुछ स्रोत फ़ाइलों की ओर इशारा करता है जिन्हें आप देखना चाहते हैं। मैं, कोई लिनक्स उपयोगकर्ता हूँ तो मैं अगर उन फ़ाइलों गिरी का नवीनतम रूप में अब भी कर रहे हैं नहीं बता सकता: linuxjournal.com/article/9001
Kusalananda

दिलचस्प लेख वास्तव में! मैं सिर्फ यह देखने के लिए पैकेज देख रहा हूं कि क्या वास्तव में शीर्ष कमांड / proc / loadavg फ़ाइल से इसका मूल्य लेता है और यदि यह getloadavg () फ़ंक्शन के परिणाम के समान है।
एंजेलोस असोनाइटिस

@ एग्लोसएस्सोनिटिस लोड औसत के प्रलेखन के लिए निश्चित स्थान आपके कर्नेल स्रोत का पेड़ है। POSIX परिभाषित नहीं करता है कि सीपीयू लोड क्या है, और कहीं भी "लोड औसत" शब्दों का उल्लेख नहीं करता है। topऔर uptimeउपयोगिताओं POSIX उपयोगिताओं नहीं हैं और getloadavg()पुस्तकालय समारोह भी (यह एक बीएसडी वंश हालांकि है) POSIX में परिभाषित नहीं है।
Kusalananda

इसलिए, मैं जो इकट्ठा करता हूं, वह कर्नेल स्रोत के अलावा इन मूल्यों के गठन को समझने के लिए कोई आधिकारिक दस्तावेज नहीं है, क्या यह सही है? वहाँ जाने से पहले, हालाँकि, मुझे अभी भी topprocfs फ़ाइल
लोडवग

7

लोड औसत की गणना आमतौर पर कर्नेल द्वारा की जाती है। जैसे अनुप्रयोग topऔर इसे एक्सेस करने के uptimeलिए getloadavg(3)लाइब्रेरी कॉल का उपयोग कर सकते हैं (यह विभिन्न यूनिक्स संस्करणों में पोर्टेबल होने का मतलब है)। लिनक्स पर यह आम तौर पर एक से पढ़ने के परिणामस्वरूप होता है /proc/loadavg। FreeBSD पर यह एक सिस्टम कॉल है।

उदाहरण के लिए:

#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]);
}

uptimeऔर topदोनों अपना डेटा प्राप्त करने के लिए समान कॉल करते हैं।

अब 1/5/15 मिनट लोड औसत रन कतार पर प्रक्रियाओं की संख्या है। विभिन्न ऑपरेटिंग सिस्टम अलग-अलग तरीकों से इसकी गणना कर सकते हैं; सामान्य रूप से सबसे बड़ा अंतर यह है कि I / O (जैसे डिस्क पर अवरुद्ध) के लिए प्रतीक्षा करने वाली प्रक्रियाएं चलाने योग्य के रूप में गिनी जाती हैं या नहीं। लिनक्स पर वे हैं।

तो लोड औसत 3.4 का मतलब है नमूना विंडो (1, 5, 15 मिनट) के भीतर रन कतार पर औसतन 3.4 प्रक्रियाएं थीं।

एक उच्च लोड औसत का मतलब यह नहीं है कि यह एक अतिभारित सर्वर है, हालांकि। यदि आपके पास 16 कोर हैं तो आपका लोड औसत बिना तनाव के 16 हो सकता है। आपके पास बहुत सारी एप्लिकेशन fork()कॉल भी हो सकती हैं, जिसके परिणामस्वरूप बड़ी संख्या में प्रक्रियाएं बन सकती हैं / नष्ट हो सकती हैं, जिससे एक उच्च लोड औसत हो सकता है, लेकिन सर्वर प्रदर्शन को बड़े पैमाने पर प्रभावित किए बिना। इसे केवल एक गाइड के रूप में, साथ ही साथ अन्य मैट्रिक्स जैसे कि% CPU व्यस्त में उपयोग किया जाना चाहिए।


4

लोड औसत कुछ ऐसा नहीं है जो किसी विशेष उपकरण या वितरण के लिए विशिष्ट है, यह कर्नेल द्वारा प्रदान किया गया एक माप है, या अधिक सटीक रूप से, अनुसूचक है, इसलिए यह एक वितरण स्वतंत्र माप है। माप को फाइल सिस्टम के अंदर रिकॉर्ड किया जाता है/proc

इसकी व्याख्या के अनुसार, लोड औसत मीट्रिक इस बात का संकेत नहीं है कि सीपीयू कितनी मेहनत कर रहा है लेकिन काम करने की कितनी जरूरत है। मुझे नहीं लगता कि वास्तव में इसे किसी भी चीज़ से गुणा करने की आवश्यकता है क्योंकि यह एक चलने योग्य या निर्बाध स्थिति में प्रक्रियाओं की संख्या का प्रत्यक्ष माप है।

निम्नलिखित दो मैन पेज देखने की कोशिश करें: getloadavg(3)और uptimeअधिक जानकारी के लिए।

लोड औसत मीट्रिक पहली बार में समझने के लिए एक कठिन अवधारणा हो सकती है, मुझे लगता है कि बहुत से लोग सोचते हैं कि यह एक संकेत है कि सीपीयू कितना कठिन काम कर रहा है, लेकिन यह वास्तव में ऐसा नहीं है।


1
ठीक है, लेकिन क्या हम पूरी तरह से निश्चित हैं कि getloadavg()फ़ंक्शन विवरण में वर्णित लोड औसत , वही लोड औसत है जो toprhel में कमांड दिखाता है? मैं यह इसलिए पूछ रहा हूं क्योंकि मैंने पैकेज procps-3.2.8 (जो कि कमांड द्वारा इंगित किया गया है top -v) की अन-टर्ड सामग्री में एक पूर्ण पाठ खोज किया है और फ़ंक्शन के एक भी उल्लेख नहीं है getloadavg ()! तो, शायद शीर्ष एक अलग तरीके से लोड औसत की गणना करता है ....
एंजेलोस असोनाइटिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.