IO_RBYTES के रूप में / dev / शून्य गणना से क्यों नहीं पढ़ता है?


25

मैं इस कमांड का उपयोग करके कुछ लिनक्स 4.x OS पर हार्ड ड्राइव को खाली कर रहा हूं:

sudo sh -c 'pv -pterb /dev/zero > /dev/sda'

और मैंने एक और ट्टी खोली और शुरू किया sudo htopऔर इस पर ध्यान दिया :

  PID USER      PRI  NI CPU%   RES   SHR   IO_RBYTES   IO_WBYTES S   TIME+  Command
 4598 root       20   0 15.5  1820  1596        4096    17223823 D  1:14.11 pv -pterb /dev/zero

के लिए मान IO_WBYTESकाफी सामान्य लगता है, लेकिन IO_RBYTES4 KiB पर रहता है और कभी नहीं बदलता है।

मैंने उदाहरण के लिए कुछ अन्य कार्यक्रम चलाए

dd if=/dev/zero of=/dev/zero
cat /dev/zero > /dev/zero

और देखने के लिए उनमें से कोई भी का एक बहुत उत्पन्न करता है आश्चर्यचकित था IO_RBYTESया IO_WBYTES

मुझे लगता है कि यह किसी भी कार्यक्रम के लिए विशिष्ट नहीं है, लेकिन I / O बाइट्स के रूप में गिनती /dev/zeroकरने के लिए क्यों नहीं पढ़ता और लिखता है /dev/{zero,null}?


5
मैं उत्सुक हूं, आपको क्यों लगता है कि उन्हें I / O के रूप में गिना जाना चाहिए ?
19

1
@marcelm मुझे लगता है कि किसी भी इनपुट / आउटपुट को I / O के रूप में गिनना चाहिए, जिसमें फ़ाइल R / W, नेटवर्क I / O और कई और अधिक शामिल हैं।
0

लेकिन वे संचालन I / O को हार्डवेयर (डिस्क, और नेटवर्क कार्ड, क्रमशः) करते हैं, और कुछ I / O बस (जैसे PCI- एक्सप्रेस) पर यात्रा करनी होती है, जो सभी एक महत्वपूर्ण अड़चन हो सकती है। लिखता है, कहते हैं, /dev/nullअंत में इस तरह के हार्डवेयर को रोकना नहीं है और I / O बसों को रोकना नहीं है। चरम पर ले जाया गया; स्मृति से भी I / O पढ़ता / लिखता है? बेशक, इन चीजों के लिए कोई कठिन परिसीमन नहीं है, और यह सब इस बात पर निर्भर करता है कि आप इन चीजों में किस दृष्टिकोण को अपनाते हैं, और यह परिप्रेक्ष्य आपके लिए कितना उपयोगी है।
मार्सेल

1
ध्यान दें, मेरी पहली टिप्पणी उन दृष्टिकोणों के बारे में सोचने के लिए आपको (और अन्य) उकसाने के लिए थी, और पता करें कि आप अपना दृष्टिकोण क्यों ले रहे हैं। मेरा मतलब यह नहीं है कि आप गलत हैं; मुझे यह भी नहीं लगता कि स्थिति यह है कि काले और सफेद हैं। लेकिन व्यक्तिगत रूप से, मुझे वास्तविक हार्डवेयर (जो /dev/{null,zero}कि आमतौर पर एक अड़चन हो सकती है) की तुलना में I / O आँकड़ों में बहुत अधिक दिलचस्पी होगी (जो आमतौर पर अड़चन नहीं है)। यही कारण है कि अभी-अभी अपना परिप्रेक्ष्य हालांकि :) है
marcelm

1
@marcelm लेकिन मैं शुरू में सोच रहा था कि कोई भी read(2)और write(2)I / O के रूप में गिना जाता है, जो अपने आप में बहुत ही उचित है।
iBug

जवाबों:


54

वे I / O के रूप में गिनती करते हैं, लेकिन आपके द्वारा देखे जा रहे फ़ील्ड द्वारा मापा गया प्रकार नहीं।

में htop, IO_RBYTESऔर IO_WBYTESदिखाने के read_bytesऔर write_bytesसे क्षेत्रों /proc/<pid>/io, और उन क्षेत्रों बाइट्स जो ब्लॉक परत के माध्यम से जाने के लिए उपाय। /dev/zeroइसमें ब्लॉक लेयर शामिल नहीं है, इसलिए इसे वहां से नहीं दिखाया जाता है।

आई / ओ देखने के लिए से /dev/zero, आप को देखने के लिए की जरूरत है rcharऔर wcharमें खेतों /proc/<pid>/io, जो में दिखाई htopके रूप में RCHARऔर WCHAR:

rchar : वर्ण पढ़े गए

इस कार्य को बाइट की संख्या को स्टोरेज से पढ़ा जाना चाहिए। यह केवल बाइट्स का योग है जो इस प्रक्रिया को पारित किया read(2)और इसी तरह की प्रणाली कॉल करता है। इसमें टर्मिनल I / O जैसी चीजें शामिल हैं और वास्तविक भौतिक डिस्क I / O की आवश्यकता नहीं है या नहीं है (इस पेजकेक से रीड संतुष्ट हो सकता है) से अप्रभावित है।

wchar : वर्ण लिखे

इस कार्य के कारण बाइट्स की संख्या, या डिस्क पर लिखे जाने का कारण होगा। इसी तरह के कैचर्स यहां rchar के साथ लागू होते हैं।

देखें man 5 procऔर man 1 htopविवरण के लिए।


तो यह rcharऔर है wcharकि कॉल से बाइट्स गिनती read(2)और write(2), सही?
IBug

हाँ य़ह सही हैं।
स्टीफन किट

9
राचर के वर्णन पर भ्रामक वाक्यांशों के बारे में बात करें । सब कुछ के माध्यम से पारित read()निश्चित रूप से " भंडारण से पढ़ा" नहीं है !
इलकाछू

2
@ilkachu का storageमतलब है कि वे "किसी भी बोधगम्य बस लाइन" का अर्थ है, इस बात पर ध्यान दिए बिना कि क्या भंडारण भौतिक है या आभासी या mmap'd या एक आभासी सॉकेट या L1 कैश में - यह साझा किए गए उस प्रोग्राम की मैप की गई मेमोरी के बाहर कुछ भी है
बिल्ली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.