সিপিইউ কীভাবে জানতে পারে যে সেখানে আইও মুলতুবি রয়েছে?


17

আমি দৃষ্টিপাত করা হয়েছে iowaitনিচের চিত্রের সম্পত্তি শীর্ষ ইউটিলিটি আউটপুটে দেখানো হয়েছে।

top - 07:30:58 up  3:37,   1 user,  load average: 0.00, 0.01, 0.05
Tasks:  86 total,   1 running,   85 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

iowait সাধারণত নিম্নলিখিত হিসাবে সংজ্ঞায়িত করা হয়:

"এটি সেই সময় যার সময় সিপিইউ অলস থাকে এবং কিছু আইও মুলতুবি থাকে।"

এটি আমার বোধগম্য যে কোনও একটি সিপিইউতে একটি প্রক্রিয়া চালিত হয়। এটি নির্ধারিত হওয়ার পরে কারণ এটি তার সময় স্লটটি ব্যবহার করেছে বা এটি অবরুদ্ধ হওয়ার পরে, এটি শেষ পর্যন্ত আবার কোনও একটি সিপিইউতে নির্ধারিত হতে পারে।

আইও অনুরোধের ক্ষেত্রে, একটি সিপিইউ যা নিরবচ্ছিন্ন ঘুমের মধ্যে একটি প্রক্রিয়া রাখে iowaitসময় ট্র্যাক করার জন্য দায়বদ্ধ । অন্যান্য সিপিইউগুলি সত্যই নিষ্ক্রিয় হওয়ায় তাদের শেষে অলস সময় হিসাবে একইভাবে প্রতিবেদন করবে। এই ধারণাটি কি সঠিক?

তদ্ব্যতীত, ধরে নিই যে দীর্ঘ আইও অনুরোধ রয়েছে (মানে প্রক্রিয়াটি নির্ধারিত হওয়ার বেশ কয়েকটি সুযোগ পেয়েছিল তবে আইও সম্পূর্ণ হয়নি বলে তফসিল পায়নি), কীভাবে কোনও সিপিইউ জানতে পারে যে সেখানে "বিচারাধীন আইও" আছে? এই ধরণের তথ্য কোথা থেকে পাওয়া গেল? কোনও সিপিইউ কীভাবে সহজে আবিষ্কার করতে পারে যে কোনও সিপিইউ সেই প্রক্রিয়াটিকে ঘুমিয়ে রাখতে পারে বলে কোনও প্রক্রিয়া আইওয়ের জন্য কিছু সময় ঘুমানোর জন্য রাখা হয়েছিল। "মুলতুবি আইও" এর এই অবস্থানটি কীভাবে নিশ্চিত হয়?


3
"একটি সিপিইউতে একটি প্রক্রিয়া চালিত হয়"। আসলে তা না. একটি থ্রেড একক সিপিইউ কোরতে চালিত হয় তবে আধুনিক প্রক্রিয়াগুলিতে একাধিক থ্রেড থাকে এবং আধুনিক সিপিইউতে একাধিক কোর থাকে।
এমসাল্টাররা

@ এসএমএল্টারস এবং তারপরেও, যখন কোনও একক থ্রেড কেবলমাত্র একটি কোরকে কার্যকর করতে পারে যে সময়ে এটি প্রয়োগ করা কোর প্রসঙ্গের সুইচগুলির পরে পরিবর্তিত হতে পারে।
জাব

1
এই জিনিসটি বাধাপ্রাপ্ত অনুরোধ (আইআরকিউ) বলেছে তবে এটি আমাদের আগ্রহীদের চেয়ে আরও বেশি হার্ডওয়ার
ম্যাথ্রেডলার

উত্তর:


33

সিপিইউ এর কোনও কিছুই জানে না, টাস্ক শিডিয়ুলার তা করে।

আপনি যে সংজ্ঞাটি উদ্ধৃত করেছেন তা কিছুটা বিভ্রান্তিকর; বর্তমান procfs(5)ম্যানপেজটির আরও সঠিক সংজ্ঞা রয়েছে, সতর্কতামূলকভাবে:

iowait (যেহেতু লিনাক্স 2.5.41)

(5) I / O সমাপ্ত হওয়ার জন্য অপেক্ষা করার সময়। নিম্নলিখিত কারণে এই মানটি নির্ভরযোগ্য নয়:

  1. সিপিইউ I / O সম্পূর্ণ হওয়ার জন্য অপেক্ষা করবে না; iowaitকোন সময়টি I / O সম্পূর্ণ হওয়ার জন্য অপেক্ষা করে। যখন কোনও সিপিইউ অসামান্য কাজ আই / ওয়ের জন্য নিষ্ক্রিয় অবস্থায় চলে যায়, তখন অন্য একটি কাজ এই সিপিইউতে নির্ধারিত হবে।

  2. মাল্টি-কোর সিপিইউতে, আই / ওটি শেষ হওয়ার অপেক্ষার কাজটি কোনও সিপিইউতে চলছে না, সুতরাং iowaitপ্রতিটি সিপিইউর গণনা করা শক্ত।

  3. এই ক্ষেত্রের মান কিছু শর্তে হ্রাস পেতে পারে।

iowaitসাধারণভাবে I / O এর জন্য অপেক্ষা করা সময় মাপার চেষ্টা করে। এটি কোনও নির্দিষ্ট সিপিইউ দ্বারা ট্র্যাক করা যায় না এবং এটিও হতে পারে না (উপরে পয়েন্ট 2 - যা আপনি কী ভাবছেন তার সাথেও মেলে)। এটা তোলে পরিমাপ করা হয় প্রতি CPU- র যদিও, যতটা সম্ভব।

টাস্ক শিডিয়ুলার "জানে" সেখানে আই / ও-এর বিচারাধীন রয়েছে, কারণ এটি জানেন যে এটি প্রদত্ত কোনও কার্য স্থগিত করেছে কারণ এটি I / O এর জন্য অপেক্ষা করছে। এটি ক্ষেত্রের প্রতিটি কাজ অনুসরণ করা in_iowaitহয় task_struct; আপনার জন্য সন্ধান করতে পারেন in_iowaitমধ্যে নির্ধারণকারী কোর দেখতে কিভাবে এটা সেট ট্র্যাক এবং সাফ করা হয়। লিনাক্স লোড গড় সম্পর্কে ব্রেন্ডন গ্রেগের সাম্প্রতিক নিবন্ধে দরকারী পটভূমি সম্পর্কিত তথ্য রয়েছে। এর মধ্যে iowaitপ্রবেশ /proc/stat, যা শেষ হয় top, বাড়ানো হয় যখনই টাইমার টিক হিসাবে গণনা করা হয় এবং সিপিইউ নিষ্ক্রিয় থাকে বর্তমান প্রক্রিয়াটি "চালু" থাকে; আপনি শিডিয়ুলারের সিপিইউ টাইম-ট্র্যাকিং কোডটিaccount_idle_time সন্ধান করে এটি দেখতে পারেন ।

সুতরাং আরও সঠিক সংজ্ঞাটি হবে "I / O এর অপেক্ষায় এই সিপিইউতে সময় কাটাতে হবে, যখন এর চেয়ে ভাল আর কিছু করার ছিল না" ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.