چندین دستور مفید وجود دارد که به شما اجازه می دهد وضعیت job خود را بررسی، بر روند انجام یک job در حال اجرا نظارت و آمار عملکرد job خود را جمع آوری نمایید. همچنین می توانید در صورت لزوم یک job را حذف کنید.
وضعیت job های موجود در صف
شما می توانید با استفاده از دستورات qstat
و showq
صف های دسته ای را کنترل و وضعیت job خود را بررسی کنید. همچنین یک فرمان برای دریافت تخمین بسیار نامطمئن از زمان شروع job شما وجود دارد. در این بخش همچنین دلایل این سوال که چرا یک job ممکن است مدت زمان طولانی در صف انتظار قرار بگیرد، شرح داده می شود و به صورت کوتاه اینکه چگونه زمان بندی job کار می کند، توضیح داده خواهد شد.
qstat
برای بررسی وضعیت jobهای خود از دستور qstat
استفاده نمایید. شما می توانید وضعیت job خود را که آیا در صف قرار دارد و یا در حال اجرا است، به همراه اطلاعاتی در مورد منابع درخواست شده مشاهده کنید. اگر job در حال اجرا است می توانید زمان سپری شده و منابع مورد استفاده را ببینید.
در اینجا چند نمونه برای کاربر usr1234 و job شماره 123456 وجود دارد.
به خودی خود، qstat
تمام job های موجود در سیستم را لیست می کند:
qstat
دستورات به منظور:
لیست کردن تمام jobهای متعلق به یک کاربر خاص:
qstat -u usr1234
لیست کردن وضعیت یک job خاص، در قالب استاندارد یا متناوب (مفیدتر!):
qstat 123456
qstat -a 123456
دریافت تمام جزئیات مربوط به یک job خاص (وضعیت کامل):
qstat -f 123456
showq
دستور showq
لیست اطلاعات job را از نقطه نظر زمانبند نشان می دهد.job ها با توجه به وضعیت آنها گروه بندی می شوند: در حال اجرا، بیکار و یا مسدود شده.
دستور زیر را به منظور لیست کردن همه job ها در سیستم وارد کنید :
showq
لیست همه jobها متعلق به یک کاربر خاص را نمایش میدهد(-u ممکن است با دیگران ترکیب شود):
showq -u usr1234
Idle job (بیکار) : jobهایی هستند که واجد شرایط بوده و در لیست اولویت اجرا قرار دارند. توجه داشته باشید که ممکن است ترتیب اولویت در طول زمان تغییر کند. همچنین توجه داشته باشید که اگر منابع بلافاصله برای اجرای job با بالاترین اولویت ("backfill") در دسترس نباشد، jobها ممکن است خارج از نوبت اجرا شوند. این کار به گونه ای انجام می شود که شروع job با بالاترین اولویت را به تاخیر نمی اندازد.
به منظور نمایش لیست جزئیات در مورد idle jobs دستور زیر را بزنید :
showq -i
showq -i
showq -i -u usr1234
Blocked jobs (مسدود شده) : jobهایی هستند که در حال حاضر واجد شرایط برای اجرا نیستند. دلایل متعددی وجود دارد که job ممکن است مسدود شود.
• اگر یک کاربر یا گروه، محدود به استفاده از تعداد خاصی job یا هسته باشد، بقیه jobهای آنها مسدود خواهند شد. این job ها با اتمام کار jobهای در حال اجرا، آزاد می شوند.
• اگر یک کاربر وابستگی هایی میان jobها تنظیم کند، یا شرایطی اعمال کند که قبل از اجرای job باید برآورده شود، تا زمانی که وابستگی یا شرایط آنها برآورده نشوند، jobها مسدود می مانند.
• با استفاده از دستور qhold jobid
می توانید job خود را نگه دارید.
• در موارد نادر، یک خطا در سیستم باعث می شود که job با وضعیت “BatchHold” مسدود شود. اگر یکی از jobهای خود را در این حالت مشاهده کردید، با پشتیبانی کلاستر تماس بگیرید.
لیست jobهای مسدود شده:
showq -b
showq -b -u usr1234
showstart
دستور showstart
برآوردی برای زمان شروع job می دهد. متاسفانه، این برآوردها به هیچ وجه دقیق نیستند، مگر برای job با بالاترین اولویت که در صف قرار دارد. اگر زمان نشان داده شده دقیقا نیمه شب دو یا سه روز در آینده باشد، بی معنی است. در غیر این صورت برآورد ممکن است به صورت اعداد غیر واقعی نمایش داده شود.
showstart 123456
چرا job من در حال اجرا نیست؟
دلایل زیادی وجود دارد که ممکن است job شما طولانی تر از آنچه فکر می کنید در صف انتظار بماند. در اینجا برخی از این دلایل آورده شده:
• بار کاری سیستم بالا است. این موضوع برای همه خسته کننده است.
• خرابی سیستم برنامه ریزی شده است و jobها در حالت انتظار نگه داشته می شوند. پیام روز، که هر بار که شما وارد می شوید، یا پیام های سیستم ارسال شده در صفحه اخبار AstekHPC را بررسی کنید.
• شما یا گروهتان چند روز گذشته از منابع زیادی استفاده کرده اید، و باعث می شود اولویت jobهایتان کاهش یابد ("سیاست منصفانه").
• شما یا گروهتان در حال استفاده از حداکثر تعداد پردازنده یا تعداد job در حال اجرای مجاز هستید، در این وضعیت، job شما نگه داشته شده است.
• پروژه شما دارای یک توازن بزرگ RU (واحد منابع- resource unit) منفی است.
• job شما خواستار تخصیص منابع خاص، مانند حافظه بزرگ یا مجوزهای نرم افزاری خاص است.
• job شما نیازمند منابع زیادی است، که برای دسترسی به این منابع، زمان زیادی لازم است.
• job شما خواستار منابع ناسازگار یا غیر موجود است و در این حالت هرگز نمیتواند اجرا شود.
•درخواست شما بدون توجه به خصوصیات گره هایی که مجاز به درخواست آنها هستید ارسال شده است، برای مثال با درخواست mem = 25GB در یک سیستم که بیشتر گره ها دارای 24 گیگابایت هستند.
•job به دلیل مشکلات سیستم (بسیار نادر است) بدون نیاز به نگهداری دسته ای، بیهوده در انتظار نگه داشته می شود.
Priority, backfill, and debug reservations
اولویت ، یک تابع پیچیده از بسیاری از عوامل است ، از جمله تعداد پردازنده ها و مدت زمان درخواست شده، مدت زمان انتظار job و چگونگی محاسبات دیگر توسط کاربر و گروه آنها که طی چند روز گذشته انجام شده است.
در طول هر تکرار زمان بندی، زمانبند job با بالاترین اولویت را که در حال حاضر نمی تواند اجرا شود شناسایی می کند و در آینده برای آن یک زمان پیدا و رزرو می کند. هنگامی که این کار انجام می شود، زمانبند می تواند بدون تاثیر بر زمان شروع job با بالاترین اولویت، صف را با بسیاری از jobها با اولویت پایین تر پر کند .
این کار به طور کلی استفاده از سیستم را بالا نگه می دارد در حالی که هنوز هم اجازه زمان چرخش معقول برای jobها با اولویت بالا را می دهد. jobهای کوتاه و jobهایی که درخواست منابع کمی دارند، ساده ترین راه برای پر کردن فضای موجود هستند.
تعداد کمی از گره ها عمدتا برای اهداف اشکال زدایی ، در طول روز بوسیله jobها با محدودیت زمانی(walltime limit) یک ساعت یا کمتر، کنار گذاشته می شوند.
بررسی یک job در حال اجرا
شما می توانید یک job دسته ای را در حال اجرا کنترل کنید تقریبا همانطور که می توانید برنامه ای را که به صورت تعاملی در حال اجرا است نظارت کنید. دستور qpeek
اجازه می دهد تا خروجی ای که به طور معمول در صفحه نمایش شما ظاهر می شود را مشاهده کنید. دستور pdsh
به شما این امکان را می دهد که CPU و حافظه ی مورد استفاده توسط job خود را در میان چیزهای دیگر نظارت کنید. این دستورات از گره ورودی (login node) اجرا می شود.
qpeek
جریان داده های یک job بر روی لاگ فایلهای stdout و stderr نوشته می شوند، این داده ها ، همه آن چیزی است که در طول اجرای job بر روی صفحه مانیتور نمایش داده می شوند. این فایل های log ، تا زمانی که job به پایان می رسد در سرور ذخیره می شوند، بنابراین شما نمی توانید آنها را بی درنگ مشاهده کنید .
Stdout و Stderr جریان داده های job که به طور معمول بر روی صفحه نشان داده می شوند را در فایل های log می نویسند. این فایل های log ، تا زمانی که job به پایان می رسد در سرور ذخیره می شوند، بنابراین شما نمی توانید آنها را بی درنگ مشاهده کنید .
دستور qpeek
به شما اجازه می دهد تا محتویات آنها را زیر نظر بگیرید. اگر از خط هدر PBS برای پیوند دادن جریان های stdout و stderr (#PBS -j oe
) استفاده می کنید، دو جریان در خروجی log ترکیب می شوند.
در اینجا چند مثال برای job 123456 وجود دارد. می توانید از فلگ -e
با هر یک از آنها برای گرفتن error log به جای output log استفاده کنید. (اگر از "#PBS -j oe
" استفاده کنید، این گزینه قابل اجرا نیست)
برای نمایش محتویات فعلی خروجی (stdout) برای job 123456:
qpeek 123456
برای نمایش محتویات فعلی خطا (stderr) برای job 123456:
qpeek -e 123456
به منظور نمایش فقط آغاز ("head ") output log برای job 123456:
qpeek -h 123456
برای نمایش فقط پایان ("tail ") output log برای job 123456:
qpeek -t 123456
برای نمایش پایانoutput log و نگه داشتن listening ("tail -f
") - خاتمه دادن با Ctrl-C:
qpeek -f 123456
pdsh
اگر شما عادت به نظارت بر برنامه های خود با استفاده از top
یا ps
یا چیزی شبیه آن را داشته باشید، ممکن است دستور pdsh
مفید باشد. pdsh
مخفف “Parallel Distributed Shell” است. این دستور به شما اجازه می دهد یک فرمان را به صورت موازی در تمام گره های اختصاص داده شده به job خود اجرا کنید، همراه با نتایج نمایش داده شده بر روی صفحه نمایش. این عمدتا به همراه job موازی مورد استفاده قرار می گیرد. pdsh
در درجه اول بر روی Oakley استفاده می شود.
نکته : دستورالعمل هایی که اجرا می کنید باید سریع و ساده باشند تا از دخالت در job جلوگیری شود. به ویژه اگر job شما با jobهای دیگر بر روی یک گره به صورت اشتراکی اجرا می شوند.
دو دستور مفید که اغلب با pdsh
مورد استفاده قرار می گیرند عبارتند از uptime
، که بار سیستم را نمایش می دهد، و free
که میزان استفاده از حافظه را می دهد ؛ صفحات man
را نیز برای این دستورات مشاهده کنید. بعلاوه گزینه هایی برای top
وجود دارد که با pdsh
قابل استفاده است.
از آنجا که این دستور یک دستور موازی است، خروجی برای گره های مختلف در یک حالت غیر قابل استناد ظاهر می شود.
نمونه هایی برای job 123456 در Oakley (مشابه برای Ruby و Owens):
pdsh -j 123456 uptime pdsh -j 123456 free -mo pdsh -j 123456 top -b -n 1 -u usr1234
qstat
دستور qstat
اطلاعاتی در مورد پردازنده، حافظه و walltime مورد استفاده برای jobهای در حال اجرا فراهم می کند. با استفاده از فلگ -a
، زمان سپری شده (wall time) را به صورت ساعت و دقیقه نشان می دهد. بدون فلگ، زمان استفاده شده (Time Used)، یک معیار حسابداری، در ساعت ها، دقیقه ها و ثانیه ها را نشان داده می شود. با فلگ -f
منابع مورد استفاده jobها، همراه با اطلاعات جمع آوری شده از تمام گره هایی که job بر روی آنها در حال اجرا است را نشان می دهد.
مثال ها:
qstat -a 123456
qstat -f 123456
مدیریت jobهای شما
حذف یک job
ممکن است مواقعی پیش بیاید که بخواهید یکی از job های خود را از صف PBS حذف کنید. شاید شما محدودیت منابع را نادرست تنظیم کرده باشید، از کپی یک فایل ورودی غفلت شده باشد، یا دستورات نادرست یا اشتباه در فایل دسته ای وجود داشته باشد، یا شاید برنامه زمان بیشتری طول بکشد تا اجرا شود (حلقه بی نهایت).
دستور PBS برای حذف یک job دسته ای qdel
است. این job در هر دو حالتی که job در حالت اجرا باشد و یا در صف قرار داشته باشد، بکار می رود.
مثال :
qdel 123456
اگر نتوانید یکی از jobهای خود را حذف کنید ممکن است به علت مشکل سخت افزاری یا crash نرم افزار سیستم باشد. در این صورت باید با پشتیبانی تماس بگیرید.
تغییر یک job صف شده
شما می توانید ویژگی های خاصی از job خود را در حالی که در صف قرار دارد با استفاده از فرمان qalter
تغییر دهید. این دستور می تواند زمانی مفید باشد که می خواهید یک تغییردر job خود ایجاد کنید بدون اینکه جای خود را در صف از دست بدهید. در بخش اجرایی اسکریپت و بعد از شروع job، نمیتوانید تغییری ایجاد کنید.
syntax به صورت زیر است:
qalter [options ...] jobid
آرگومان options شامل یک یا چند دستورالعمل PBS در قالب گزینه های خط فرمان می باشد.
به عنوان مثال، برای تغییر میزان walltime در job 123456 تا 5 ساعت و ارسال ایمیل زمانی که job به پایان می رسد (فقط):
qalter -l walltime=5:00:00 -m e 123456
Hold کردن جابی که در صف قرار دارد
اگر می خواهید از اجرای job جلوگیری کنید، اما آن را در صف نگه دارید، می توانید اینکار را با استفاده از دستور qhold
انجام دهید. job در وضعیت block شده باقی می ماند تا زمانی که آن را با دستور qrls
آزاد کنید. عمل hold می تواند مفید باشد، برای مثال اگر شما نیاز به تغییر فایل ورودی برای یک job داشته باشید، اما نمی خواهید مکان خود را در صف از دست بدهید.
مثال :
qhold 123456
qrls 123456
آمارهای job
دستورالعمل هایی وجود دارد که می توانید درbatch script خود برای جمع آوری آمار یا اطلاعات عملکرد job بکار ببرید.
date
دستور date
تاریخ و زمان فعلی را چاپ می کند. میتوانید این دستور را در ابتدا و انتهای بخش اجرایی اسکریپت خود به منظور اندازه گیری تقریبی از زمان صرف شده در job بکار ببرید.
time
ابزار time
برای اندازه گیری عملکرد یک فرمان واحد استفاده می شود. این دستور می تواند برای فرآیندهای سریال یا موازی استفاده شود. عبارت /usr/bin/time
را به ابتدای یک دستور در batch script اضافه کنید :
/usr/bin/time myprog arg1 arg2
نتیجه در فرمت زیر ارائه می شود :
1- user time (زمان cpu که برای اجرای برنامه شما صرف شده)
2- system time (صرف زمان شده cpu توسط برنامه شما در تماس های سیستم)
3- elapsed time - زمان سپری شده (wallclock)
4- ٪ CPU مورد استفاده
5- حافظه، آمار pagefault و swap
6- آمار I/O
این نتایج به فایل (error log) ورودی خطای job افزوده می شود.
توجه: از مسیر کامل “”برای دریافت تمام اطلاعات نشان داده شده استفاده کنید.
ja
ja
ابزار حسابداری job، اطلاعات حسابداری job از جمله زمان CPU، حافظه، حافظه مجازی، و walltime استفاده شده را در داخل یک job PBS چاپ می کند. این اطلاعات همچنین در هنگامی که یک job به پایان می رسد به صورت ایمیل (در صورت درخواست ایمیل) ارسال میشود. هنگامی که این job در حال اجرا است، همان اطلاعات با دستور qstat -f
در دسترس است.