ممکن است شما با مفهوم میانگین بار پردازشی (Load Average) آشنا باشید. Load Average، شامل سه عدد می باشد که با دستورهای Uptime و Top به طور مثال به صورت زیر نمایش داده می شوند:
1
|
Load average: 0.09, 0.05, 0.01
|
بیشتر مردم نسبت به معنی و مفهوم Load Average، آگاهی دارند: سه عدد که بیانگر دوره های زمانی هستند (میانگین یک، پنج و پانزده دقیقه) که هر چه عدد کمتر باشد بهتر است. اعداد بالاتر، نشان دهنده یک مشکل یا یک ماشین با بار کاری بالا است. اما مفهوم آستانه (Threshold) به چه صورت است؟ مقادیر خوب و بد در Load Average چیست؟ چه زمانی شما باید نگران مقدار Load Average بوده و چه موقع باید در اسرع وقت در صدد رفع آن باشید؟
ابتدا، به صورت اجمالی به تعریف مقادیر میانگین بار می پردازیم. با یک مثال ساده شروع می کنیم: یک سیستم با یک پردازنده تک هسته ای.
مثال ترافیک
یک پردازنده تک هسته ای، شبیه یک مسیر یا یک خط ترافیک است. تصور کنید شما یک اپراتور پل هستید. بعضی مواقع این پل بسیار شلوغ است و ماشین های بسیاری برای عبور صف کشیده اند. شما می خواهید یک گزارش از اینکه چگونه ترافیک روی پل در حال انتقال است، ارائه نمایید. یک معیار یا متریک اینست که چگونه تعداد زیادی ماشین در زمان مشخص در حال انتظار هستند. اگر هیچ ماشینی در حال انتظار نباشد، تردد به راحتی انجام گرفته و در صورت ترافیک در مسیر، برای رانندگان، تأخیر رخ می دهد.
حال، در این شرایط شما از چه سیستم شماره گذاری استفاده می کنید؟ به طور مثال:
- مقدار ۰٫۰۰ به این معنی است که هیچ گونه ترافیک روی پل وجود ندارد. در حقیقت، مقدار بین ۰٫۰۰ تا ۱٫۰۰ بیانگر اینست که انتظار و توقف وجود ندارد و ماشین ها به محض ورود، می توانند به مسیر خود ادامه داده و عبور کنند.
- مقدار ۱٫۰۰ به این معنی است که ظرفیت کامل پل در حال استفاده است. همه چیز خوب است اما ترافیک مختصری وجود دارد که این باعث یک مقدار کندی شده است.
- مقدار بیشتر از ۱٫۰۰ به معنی ترافیک است. چه مقدار؟ ۲٫۰۰ به این معنی است که دو مسیر یا دو ردیف ماشین وجود دارد که یکی روی پل و دیگری در حال انتظار است. ۳٫۰۰ به معنی سه ردیف ماشین است که یکی روی پل و دو ردیف دیگر در حالت انتظار هستند و به همین صورت …
اساساً بار پردازشی یک CPU هم به همین صورت است. در مثال فوق، ماشین ها همان پردازش ها (Process) هستند که هر کدام مقداری از زمان پردازنده را به خود اختصاص می دهند که CPU هم آنها را در صف قرار داده و پردازش می کند. یونیکس به این موضوع به عنوان run-queue length اشاره می کند: مجموع تعداد پردازش هایی که هم اکنون در حال اجرا هستند به همراه تعدادی که در حال انتظار و در صف اجرا هستند.
همانند اپراتور پل، همانطور که نباید ماشین ها روی پل منتظر بمانند، بار پردازشی CPU هم باید زیر ۱٫۰۰ باشد. البته اگر به صورت موقت و لحظه ای، بار پردازنده بیشتر از ۱٫۰۰ شود، مشکلی ندارد، اما در صورتیکه دائما بیشتر از ۱٫۰۰ باشد، جای نگرانی دارد.
حال، آیا بار پردازشی ایده آل، عدد ۱٫۰۰ است ؟
مطمئناً اینگونه نیست. مشکل بار پردازشی ۱٫۰۰ اینست که شما هدروم ندارید. در تمرین، بیشتر مدیران سیستم، یک خط با عدد ۰٫۷۰ ترسیم می کنند:
- به طور تخمینی، اگر میانگین بار پردازشی، بالاتر از ۰٫۷۰ بود، زمان بررسی بیشتر قبل از بروز یک مشکل فرا رسیده است.
- همچنین، حدوداً اگر میانگین بار، بالاتر از ۱٫۰۰ بود، هم اکنون به دنبال مشکل رفته و آنرا برطرف نمایید. در غیر اینصورت، باید هر لحظه منتظر یا اتفاق بد باشید که این خوشایند نیست.
- به خاطر داشته باشید که اگر میانگین بار بیشتر از ۵٫۰ باشد، شما دچار مشکل جدی شده، سیستم شما دائما هنگ کرده و کند می شود و ممکن است این موضوع در یک زمان نامناسب، مثلا نیمه شب و یا در حین ارائه در کنفرانس اتفاق بیافتد که باید از این موضوع جلوگیری شود.
سیستم های چند پردازنده ای به چه صورت است؟ با وجود مقدار بار پردازشی ۳٫۰۰ همه چیز به خوبی انجام می شود!
در یک سیستم با چهار پردازنده و با بار ترافیکی ۳٫۰۰ همه چیز به درستی انجام می شود.
در یک سیستم چند پردازنده ای، بار با تعداد هسته های پردازنده ارتباط مستقیم دارد. بهره برداری به میزان ۱۰۰% روی یک سیستم تک هسته ای مقدار ۱٫۰۰ و روی سیستم دو هسته ای مقدار ۲٫۰۰ و چهار هسته ای مقدار ۴٫۰۰ دارد.
اگر ما دوباره به همان قیاس پل برگردیم، مقدار ۱٫۰۰ دقیقاً به معنی یک خط یا یک ردیف ترافیک است. روی یک پل با ظرفیت یک ردیف ماشین، این به معنی ظرفیت کامل پل است. روی یک پل با ظرفیت دو ردیف ماشین، مقدار بار ترافیکی ۱٫۰۰ به معنی اینست که ۵۰% ظرفیت پل اشغال شده است. یعنی یک ردیف پر و ردیف دیگر هنوز قابل استفاده است.
در CPU ها هم دقیقاً به همین صورت است: مقدار بار ۱٫۰۰ یعنی ۱۰۰% ظرفیت CPU روی یک سیستم تک هسته ای اشغال بوده و مقدار بار ۲٫۰۰ در یک سیستم ۲ هسته ای به معنی استفاده کامل از ظرفیت CPU است.
مقایسه چند هسته ای با چند پردازنده ای
اگر بخواهیم با هدف راندمان و کارایی به این موضوع بپردازیم، یک سیستم با یک پردازنده دو هسته ای تقریباً با یک سیستم با دو پردازنده تک هسته ای برابر است. اما در اینجا نکات ظریفی وجود دارد: از جمله مقدار Cache پردازنده، فرکانس کاری پردازنده، هماهنگی و ارتباط بین پردازنده ها و …
با وجود این نکات، به منظور ارتقاء مقدار ظرفیت بار پردازشی پردازنده، صرفنظر از تعداد فیزیکی پردازنده ها و هسته های روی آنها، مجموع تعداد هسته ها موضوع اصلی است.
حال به دو نکته زیر اشاره می کنیم:
- تعداد هسته ها = حداکثر بار : روی یک سیستم چند هسته ای، بار پردازشی نباید از تعداد هسته های موجود در سیستم، بیشتر شود.
- هسته، هسته است : اینکه چگونه و به چه صورت، هسته ها روی پردازنده ها تقسیم شده است، اهمیتی ندارد. دو تا پردازنده چهارهسته ای معادل با چهار تا دو هسته ای و یا هشت عدد تک هسته ای است. این موضوع برای کار ما مهم نیست ، چون همگی هشت هسته دارند.
اکنون نگاهی به خروجی میانگین بار پردازشی با دستور upime بیاندازید:
1
2
|
~ $ uptime
23:05 up 14 days, 6:08, 7 users, load averages: 0.65 0.42 0.36
|
این دستور روی یک سیستم با پردازنده دو هسته ای اجرا شده است که هدروم بالایی دارد. تا زمانی که میزان بار پردازشی، زیر ۱٫۷ باشد جای نگرانی نیست.
اما سه عدد فوق چه معنا و مفهومی دارد؟ عدد ۰٫۶۵ میانگین دقیقه پایانی، ۰٫۴۲ میانگین پنج دقیقه پایانی و ۰٫۳۶ میانگین پانزده دقیقه پایانی است. سوالی که در اینجا مطرح می شود اینست که:
کدامیک از این میانگین ها مهم است؟ یک، پنج، یا پانزده دقیقه؟
برای اعدادی که پیش از این درباره آن صحبت شد (مثلاً عدد ۱٫۰۰ = هم اکنون مشکل را برطرف کنید و …) شما باید به میانگین پنج و یا پانزده دقیقه اخیر توجه کنید. اگر سیستم شما در میانگین یک دقیقه، عددی بالاتر از ۱٫۰۰ داشت، ایرادی ندارد. اما اگر در میانگین پانزده دقیقه ای، عددی بالاتر از ۱٫۰۰ داشت، سریعاً باید اقدام شود. نهایتاً بر اساس آنچه در منابع ذکر شده است، شما باید این سه عدد را با تعداد هسته های پردازنده سیستم خود، مطابقت داده و با آن تنظیم نمایید.
بنابراین، تعداد هسته ها در تفسیر میانگین بار پردازشی اهمیت دارد. برای تشخیص تعداد هسته های سیستم خود می توانید دستور زیر را وارد کرده تا اطلاعات هر کدام از پردازنده های سیستم شما نشان داده شود:
1
|
cat /proc/cpuinfo
|
به خاطر داشته باشید که این دستور در سیستم عامل MAC OSX موجود نیست و فقط برای شمارش، دستور grep کاربرد دارد:
1
|
count: grep ‘model name’ /proc/cpuinfo | wc –l
|
برگرفته از [scoutapp.com]