किसी को भी स्पष्ट कर सकते हैं कि IOWait क्या है?


194

जितना मैंने इवाइट के बारे में पढ़ा है, यह मेरे लिए अभी भी रहस्य है।

मुझे पता है कि यह CPU द्वारा IO के संचालन के पूरा होने के इंतजार में बिताया गया समय है, लेकिन IO का किस प्रकार का संचालन ठीक है? जो मैं निश्चित नहीं हूं, वह इतना महत्वपूर्ण क्यों है? क्या IO ऑपरेशन पूरा होने के बाद CPU कुछ और नहीं कर सकता, और फिर प्रोसेसिंग डेटा पर वापस आ सकता है?

यह भी पता लगाने के लिए कि सही प्रक्रिया क्या है (प्रक्रिया) आईओ की प्रतीक्षा में क्या प्रक्रिया है।

और आईओ प्रतीक्षा समय को कम करने के तरीके क्या हैं?


और यह भी कि उच्च आयोवाइट क्या है?
मुहम्मद हुसैनबाईस

जवाबों:


99

मुझे पता है कि यह CPU द्वारा IO के संचालन के पूरा होने के इंतजार में बिताया गया समय है, लेकिन IO का किस प्रकार का संचालन ठीक है? जो मैं निश्चित नहीं हूं, वह इतना महत्वपूर्ण क्यों है? क्या IO ऑपरेशन पूरा होने के बाद CPU कुछ और नहीं कर सकता, और फिर प्रोसेसिंग डेटा पर वापस आ सकता है?

हाँ, ऑपरेटिंग सिस्टम चलने के लिए अन्य प्रक्रियाओं को शेड्यूल करेगा जबकि एक IO पर अवरुद्ध है। हालाँकि, इस प्रक्रिया के अंदर, जब तक कि यह अतुल्यकालिक IO का उपयोग नहीं कर रहा है, यह तब तक प्रगति नहीं करेगा जब तक कि IO ऑपरेशन पूरा नहीं हो जाता।

यह भी पता लगाने के लिए कि सही प्रक्रिया क्या है (प्रक्रिया) आईओ की प्रतीक्षा में क्या प्रक्रिया है।

कुछ उपकरण आपको उपयोगी लग सकते हैं

  • iostat, अपने डिस्क के सेवा समय की निगरानी करने के लिए
  • iotop (यदि आपका कर्नेल इसका समर्थन करता है), प्रति प्रक्रिया IO अनुरोधों के टूटने की निगरानी करने के लिए
  • strace, एक प्रक्रिया द्वारा जारी किए गए वास्तविक संचालन को देखने के लिए

और आईओ प्रतीक्षा समय को कम करने के तरीके क्या हैं?

  • सुनिश्चित करें कि आपके पास मुफ्त भौतिक मेमोरी है ताकि ओएस मेमोरी में डिस्क ब्लॉक को कैश कर सके
  • अत्यधिक विखंडन से बचने के लिए अपने फाइल सिस्टम डिस्क का उपयोग 80% से कम रखें
  • अपने फाइल सिस्टम को ट्यून करें
  • एक बैटरी समर्थित सरणी नियंत्रक का उपयोग करें
  • io संचालन करते समय अच्छे बफर आकार चुनें

6
मत भूलो "सुनिश्चित करें कि आपका बैकएंड स्टोरेज आपके I / O लोड के साथ बनाए रखने के लिए पर्याप्त तेज़ है।"
jgoldschrafe

1
@ चेने, और जब मेरी प्रक्रिया बेकार है, क्योंकि यह IO पर प्रतीक्षा कर रहा है। तो IOWait और निष्क्रिय के बीच क्या अंतर है?
ctrl-alt-delor

4
जब IOwait में, प्रक्रिया "निर्बाध नींद" में है, जिसका अर्थ है कि इसे मारा नहीं जा सकता है, डिस्क पर डेटा को दूषित करने के जोखिम से बचने के लिए। एक सामान्य निष्क्रिय प्रक्रिया वास्तव में कुछ नहीं कर रही है, इसलिए इसे मारने में कम जोखिम है।
मानवरोन

1
शीर्ष पर व्यावहारिक रूप से इसका मतलब है कि आपका आईओ बहुत धीमा है। "सर्वर को तेज बनाएं" यह अलग है कि क्या आप सीपीयू सीमित हैं या आपका सीपीयू भूख से मर रहा है क्योंकि किसी ने फैसला किया कि धीमी नोटबुक डिस्क एक डेटाबेस सर्वर को चलाने के लिए पर्याप्त है और आईओ लोड सीपीयू को केवल 2% का उपयोग करता है जो यह कर सकता है, जैसे इंतजार कर रहा है IO खत्म करने के लिए पागल।
टॉमटॉम

OMG मैं विश्वास नहीं कर सकता शीर्ष 3 उत्तर यहाँ बहुत गलत हैं । Haridsv द्वारा नीचे दिया गया उत्तर सही है। Io पूरा होने के लिए कोई सीपीयू "प्रतीक्षा" नहीं है। हां, कुछ io अवरुद्ध हो सकते हैं - अक्सर इसके लिए एक अच्छा कारण है, और कुछ परिस्थितियों में सभी io अवरुद्ध हो सकते हैं। लेकिन आप पूरी तरह से अतुल्यकालिक संचालन के लिए आयोवाइट भी देख सकते हैं।
सिम्बियन

47

पुराना सवाल, हाल ही में टकराया, लेकिन लगा कि मौजूदा जवाब अपर्याप्त थे।

IOWait परिभाषा और गुण

IOWait (आमतौर पर %waशीर्ष में लेबल किया गया) निष्क्रिय की एक उप-श्रेणी है ( %idleआमतौर पर परिभाषित उपश्रेणियों को छोड़कर सभी निष्क्रिय के रूप में व्यक्त की जाती है), जिसका अर्थ है कि सीपीयू कुछ भी नहीं कर रहा है। इसलिए, जब तक एक और प्रक्रिया है कि सीपीयू प्रसंस्करण हो सकता है, यह ऐसा करेगा। इसके अतिरिक्त, निष्क्रिय, उपयोगकर्ता, सिस्टम, iowait, आदि सीपीयू के संबंध में एक माप है। दूसरे शब्दों में, आप आयोवा के इंतजार के कारण आईवेट के बारे में सोच सकते हैं।

संक्षेप में, iowait प्रोसेसर टिकों के प्रतिशत के रूप में हार्डवेयर प्राप्त करने और संभालने में समय व्यतीत करता है। सॉफ़्टवेयर व्यवधान आमतौर पर अलग-अलग होते हैं %si

महत्व और संभावित गलतफहमी

IOWait महत्वपूर्ण है क्योंकि यह अक्सर जानने के लिए एक महत्वपूर्ण मीट्रिक है कि क्या आप IO पर अड़चन हैं। लेकिन iowait की अनुपस्थिति का मतलब यह नहीं है कि आपका आवेदन IO पर अड़चन नहीं है । एक प्रणाली पर चल रहे दो अनुप्रयोगों पर विचार करें। यदि प्रोग्राम 1 को भारी io टोंटी है और प्रोग्राम 2 एक भारी सीपीयू उपयोगकर्ता है, तो %user + %systemसीपीयू की स्थिति अभी भी कुछ ऐसी हो सकती है जैसे ~ 100% और इसके बाद, iowait 0 दिखाएगा। लेकिन यह सिर्फ इसलिए है क्योंकि प्रोग्राम 2 गहन है और अपेक्षाकृत कुछ भी नहीं कहने के लिए प्रकट होता है प्रोग्राम 1 क्योंकि यह सब सीपीयू के दृष्टिकोण से है।

IOWait का पता लगाने के लिए उपकरण

डेव चेनी और ज़ेरेक्स द्वारा पोस्ट देखें

लेकिन साथ ही एक साधारण भी topदिखाएगा %wa

IOWait को कम करना

इसके अलावा, जैसा कि हम अब लगभग 2013 में प्रवेश कर रहे हैं, दूसरों ने जो कहा है, इसके अलावा, बस भयानक IO भंडारण उपकरणों का विकल्प सस्ती है, अर्थात् 3 डीएस। SSDs कमाल के हैं !!!


35

iowait

iowaitऐसा समय है कि प्रोसेसर / प्रोसेसर प्रतीक्षा कर रहे हैं (यानी एक निष्क्रिय स्थिति में है और कुछ भी नहीं करता है ), जिसके दौरान वास्तव में बकाया डिस्क I / O अनुरोध थे।

इसका आमतौर पर मतलब है कि ब्लॉक डिवाइस (यानी भौतिक डिस्क, मेमोरी नहीं) बहुत धीमा है, या बस संतृप्त है।

इसलिए आपको ध्यान देना चाहिए कि यदि आप अपने सिस्टम पर उच्च लोड औसत देखते हैं, और निरीक्षण सूचना पर कि यह वास्तव में I / O प्रतीक्षा के कारण है, तो इसका मतलब यह नहीं है कि आपका सिस्टम मुश्किल में है - और यह तब होता है जब आपका मशीन के पास कुछ भी करने के लिए नहीं है, I / O- बाध्य प्रक्रियाओं (यानी ऐसी प्रक्रियाएं जो I / O के अलावा और कुछ नहीं करती हैं (गैर- I / O- बाध्य सिस्टम कॉल))। यह इस तथ्य से भी स्पष्ट होना चाहिए कि सिस्टम पर आप जो कुछ भी करते हैं वह अभी भी बहुत ही संवेदनशील है।

उपकरण

  • sar( sysstatपैकेज से, अधिकांश * निक्स मशीनों पर उपलब्ध)
  • iostat
  • sarface(सामने का छोर sar)

7
ध्यान दें कि सख्ती से बोलना, I / O प्रतीक्षा समय की परिभाषा केवल एकल प्रोसेसर सिस्टम पर मान्य है। मल्टी-प्रोसेसर सिस्टम के लिए इसे कुछ हद तक परिष्कृत करने की आवश्यकता है: veithen.blogspot.be/2013/11/iowait-linux.html
एंड्रियास वीथेन

किस हद तक iowaitप्रभावित करता है Load Average? कहो, 100 धागे नेटवर्क की प्रतीक्षा कर रहे हैं, क्या एलए 100 होगा?
इवान

32

मुझे इस लिंक से स्पष्टीकरण और उदाहरण बहुत उपयोगी लगे: वास्तव में "इवोहित" क्या है? । BTW, पूर्णता के लिए, I / O यहाँ डिस्क I / O को संदर्भित करता है, लेकिन I / O को नेटवर्क माउंटेड डिस्क (जैसे nfs) पर भी शामिल कर सकता है, जैसा कि इस अन्य पोस्ट में बताया गया है ।

मैं कुछ महत्वपूर्ण खंडों (लिंक के मृत होने की स्थिति में) का उद्धरण दूंगा, उनमें से कुछ की पुनरावृत्ति होगी जो दूसरों ने पहले ही कह दी है, लेकिन मेरे लिए कम से कम ये स्पष्ट थे:

इसे एक वाक्य में संक्षेप में कहें तो 'आईवॉइट' सीपीयू के निष्क्रिय होने का प्रतिशत है और प्रगति में कम से कम एक आई / ओ है।

प्रत्येक सीपीयू चार राज्यों में से एक में हो सकता है: उपयोगकर्ता, एसआईएस, निष्क्रिय, आयोवाइट।

मैं सोच रहा था कि क्या होता है जब सिस्टम में अन्य प्रक्रियाएं चलने के लिए तैयार होती हैं जबकि एक प्रक्रिया I / O की प्रतीक्षा कर रही होती है। नीचे यह बताते हैं:

यदि CPU निष्क्रिय है, तो कर्नेल यह निर्धारित करता है कि वर्तमान में स्थानीय डिस्क या दूरस्थ माउंटेड डिस्क (NFS) में कम से कम एक I / O है जो उस CPU से आरंभ किया गया था। यदि है, तो 'इवोहित' काउंटर एक के बाद एक बढ़ा हुआ है। यदि उस CPU से आरंभ की गई कोई I / O प्रगति में नहीं है, तो 'निष्क्रिय' काउंटर को एक से बढ़ा दिया गया है।

और यहाँ एक उदाहरण है:

मान लीजिए कि सीपीयू पर दो प्रोग्राम चल रहे हैं। एक डिस्क से रीडिंग प्रोग्राम है। दूसरा एक प्रोग्राम है जो I / O नहीं करता है, लेकिन अपने 100% समय को कम्प्यूटेशनल काम करने में खर्च कर रहा है। अब मान लें कि I / O सबसिस्टम के साथ कोई समस्या है और यह कि भौतिक I / Os को पूरा होने में एक सेकंड का समय लग रहा है। जब भी waiting dd ’प्रोग्राम अपने I / Os के पूरा होने के इंतजार में सो रहा होता है, तो दूसरा प्रोग्राम उस CPU पर चलने में सक्षम होता है। जब घड़ी का अवरोध होता है, तो हमेशा उपयोगकर्ता मोड या सिस्टम मोड में चलने वाला एक प्रोग्राम होगा। इसलिए,% निष्क्रिय और% iowait मान 0 होगा। भले ही iowait अभी 0 है, इसका मतलब यह नहीं है कि I / O समस्या नहीं है क्योंकि स्पष्ट रूप से एक है अगर भौतिक I / Os को पूरा होने में एक सेकंड से अधिक समय लग रहा है।

पूरा पाठ पढ़ने लायक है। यहाँ इस पृष्ठ का एक दर्पण है , यदि यह नीचे जाता है।


1

सोलारिस के लिए, मैं यह देखने के लिए DTrace का उपयोग करता हूं कि क्या प्रक्रियाएं कर रही हैं यदि मुझे यह देखने की आवश्यकता है कि I / O संचालन क्या चल रहा है। लिनक्स के लिए, एक समान प्रोग्राम है जिसे सिस्टमटैप कहा जाता है जो कर्नेल और प्रोसेस कॉल के लिए समान स्तर प्रदान करता है।

एक उदाहरण जब मैंने DTrace सीखते समय एक cpकमांड की तुलना एक कमांड से की ddथी। आप देख सकते हैं कि ddलिखने के लिए बहुत अधिक पढ़ता है, जबकि cpनहीं करता है, ज्यादातर बफर आकार के कारण ddडिफ़ॉल्ट रूप से उपयोग करता है (यदि मैं सही तरीके से याद कर रहा हूं)।


0

आपके अनुप्रयोगों और सेटअप पर किस तरह का IO संचालन निर्भर करेगा।

यह महत्वपूर्ण है क्योंकि कुछ मामलों में सीपीयू को डेटा या निर्देश नहीं मिल सकते हैं जिन्हें इसे जारी रखने की आवश्यकता है। कुछ मामलों में यह जारी रह सकता है, लेकिन यह इस बात पर निर्भर करेगा कि कौन से ऐप चल रहे हैं जो यह कर सकते हैं। यदि आपके पास एक एकल थ्रेडेड एप्लिकेशन है जो बहुत सारे डिस्क एक्सेस करता है तो आपको इंतजार करना होगा।

IO समय को कम करने के लिए, अधिक और तेज़ मेमोरी खरीदें, तेज़ डिस्क प्राप्त करें, आपके पास मौजूद डिस्क को डीफ़्रैग करें।

अगर यह एक घर में अनुप्रयोग है जो अड़चन है तो देखें कि क्या इसे बड़े ब्लॉकों में पढ़ने के लिए अनुकूलित किया जा सकता है या IO को अतुल्यकालिक रूप से किया जा सकता है।


ठीक है, तो आयोवाइट एक अवरुद्ध आईओ ऑपरेशन में बिताया गया समय है ?
पीटर क्रुमिंस

इसलिए, उदाहरण के लिए, यदि मैं एक चयन () या पोल () करता हूं और यह ब्लॉक हो जाता है, तो एक विवरणक के उपलब्ध होने तक इंतजार करने का समय iowait समय का होगा?
पीटर क्रुमिंस

मुझे लगता है कि यह SO पर होता है क्योंकि यह एक प्रोग्रामिंग प्रश्न जैसा दिखता है।
जेरेमी फ्रेंच

पीटरिस - हाँ, यह सोचने का एक अच्छा तरीका है।
user2278

0


यदि पी डी या डीएस है, तो पीएस ऑक्स प्रक्रिया एसटीएटी को प्रिंट कर सकता है, यह प्रक्रिया अबाधित नींद में होती है (आमतौर पर आईओ)
जब कोई प्रक्रिया बिना सोए नींद में प्रवेश करती है, तो रनवे की nr_iowait जोड़ी जाती है, और यदि n__iowait> 0, तो सीपीयू का निष्क्रिय समय गिना जाता है। इवोहित को

vmstat यह भी दिखाता है कि कितने प्रोसेस
आर आर: रन टाइम की प्रतीक्षा कर रहे प्रोसेस की संख्या।
बी: निर्बाध नींद में प्रक्रियाओं की संख्या।

http://bencane.com/2012/08/06/troubleshooting-high-io-wait-in-linux/

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.