আইও_আরবিওয়াইটিস হিসাবে / দেব / শূন্য গণনা থেকে কেন পড়ছেন না?


25

আমি এই কমান্ডটি ব্যবহার করে কিছু লিনাক্স 4.x ওএসের একটি হার্ড ড্রাইভ খালি করছি:

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

এবং আমি আর একটি tty খুললাম এবং শুরু 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_RBYTESএটি 4 কিবিতে থাকে এবং কখনও পরিবর্তন হয় না।

আমি উদাহরণস্বরূপ আরও কয়েকটি প্রোগ্রাম চালিয়েছি

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

এবং তারা কেউই প্রচুর পরিমাণে IO_RBYTESবা উত্পাদন করে না দেখে অবাক হয়েছিল IO_WBYTES

আমি মনে করি এটি কোনও প্রোগ্রামের সাথে সুনির্দিষ্ট নয়, তবে কেন আমি / ও বাইট হিসাবে গণনা করতে পাঠ করি /dev/zeroএবং /dev/{zero,null}লিখি না?


5
আমি কৌতূহলী, আপনি কেন তাদের মনে করেন যে আমি / ও হিসাবে গণনা করা উচিত ?
মার্শেল

1
@ মার্কসেল আমি মনে করি যে কোনও ইনপুট / আউটপুট আই / ও হিসাবে গণনা করা উচিত, ফাইল আর / ডাব্লু, নেটওয়ার্ক আই / ও এবং আরও অনেক কিছু সহ।
আইবুগ

তবে এই ক্রিয়াকলাপগুলি হার্ডওয়্যার (ডিস্ক এবং নেটওয়ার্ক কার্ড যথাক্রমে) থেকে I / O সম্পাদন করে এবং কিছু I / O বাসের (যেমন পিসিআই-এক্সপ্রেস) যাতায়াত করতে হয়, এগুলি সবই একটি গুরুত্বপূর্ণ বাধা হতে পারে। লিখেছেন, বলুন, /dev/nullএই জাতীয় হার্ডওয়ারের সাথে ইন্টারফেসিং শেষ করবেন না এবং I / O বাসগুলি আটকে রাখবেন না। চূড়ান্তভাবে নেওয়া; আমি / হে মেমরি থেকে / পড়তে / লিখতে হয়? অবশ্যই, এই বিষয়গুলির জন্য কোনও কঠোর চিত্রায়ন নেই এবং আপনি এই বিষয়গুলিতে কোন দৃষ্টিকোণটি গ্রহণ করেন এবং এই দৃষ্টিভঙ্গিটি আপনার কাছে কতটা কার্যকর তা নির্ভর করে all
মার্সেলেম

1
দ্রষ্টব্য, আমার প্রথম মন্তব্যটি আপনাকে (এবং অন্যদের) perspective দৃষ্টিকোণগুলি সম্পর্কে চিন্তাভাবনা করার জন্য এবং আপনি কেন আপনার দৃষ্টিভঙ্গি নিচ্ছেন তা খুঁজে বের করার উদ্দেশ্যে তৈরি হয়েছিল। আমি বোঝাতে চাইছি না যে আপনি ভুল করছেন; আমি এমনকি পরিস্থিতি যে কালো এবং সাদা বলে মনে করি না। তবে ব্যক্তিগতভাবে, আমি /dev/{null,zero}(যা সাধারণত কোনও বাধা নয়) তুলনায় আসল হার্ডওয়্যারের (যা খুব ভাল একটি বাধা হতে পারে) থেকে I / O পরিসংখ্যানগুলিতে অনেক বেশি আগ্রহী হব । যদিও এটি কেবল আমার দৃষ্টিভঙ্গি :)
মার্সেলেম

1
@ মার্সেলম তবে আমি প্রথমে ভাবছিলাম যে যে কোনও read(2)এবং write(2)আই / ও হিসাবে গণনা করা হয় যা এটি নিজস্ব অর্থে অত্যন্ত যুক্তিসঙ্গত।
আইবুগ

উত্তর:


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 : অক্ষর লিখিত

এই কাজটি বাইটের সংখ্যা বা ডিস্কে লেখার কারণ হতে পারে। আরচারের মতো এখানেও একই রকম সতর্কতা প্রযোজ্য।

দেখুন man 5 procএবং man 1 htopবিশদ জন্য।


সুতরাং এটি rcharএবং wcharযে গণনা থেকে কল থেকে বাইট read(2)এবং write(2), ডান?
আইবুগ

হ্যাঁ এটা ঠিক.
স্টিফেন কিট

9
আরচারের বিবরণে বিভ্রান্তিকর ফ্রেসসিং সম্পর্কে কথা বলুন । সবকিছু মাধ্যমে গৃহীত read()সবচেয়ে স্পষ্টভাবে হয় "থেকে পড়া না স্টোরেজ "!
ইলকচাচু

2
@ ইলক্কাচু storageবলতে তাদের অর্থ "যে কোনও বাসগঠন " বোঝায়, নির্বিশেষে প্রশ্নাগুলি স্টোরেজটি শারীরিক বা ভার্চুয়াল বা এমএমপড বা ভার্চুয়াল সকেট বা এল 1 ক্যাশে - এটি ভাগ করা
বিড়াল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.