SCHEDTOOL(8) System Manager's Manual SCHEDTOOL(8)

schedtool - پرس‌وجو و تنظیم پارامترهای زمان‌بندی پردازنده

[-0|-N] [-1|-F] [-2|-R] [-3|-B] [-4|-I] [-5|-D]
[-M policy]
[-a affinity]
[-p prio]
[-n nice_level]
[-e command [arg ...]]
[-r]
[-v]
[-h]
[LIST OF PIDs]

ابزار schedtool می‌تواند تمام پارامترهای زمان‌بندی پردازنده (CPU) را که لینوکس قادر به تنظیم آن‌هاست پیکربندی کرده یا اطلاعات مربوط به فرآیندهای داده‌شده را نمایش دهد.

وظایف طولانی‌مدت و غیرتعاملی ممکن است از SCHED_BATCH بهره‌مند شوند، زیرا برش‌های زمانی طولانی‌تر هستند، زمان سیستمی کمتری برای محاسبه فرآیند قابل‌اجرای بعدی هدر می‌رود و حافظه‌های نهان پایدار می‌مانند.

برنامه‌های صوتی/تصویری یا سایر برنامه‌های نزدیک به بی‌درنگ (near-realtime) در صورت تنظیم روی SCHED_RR ممکن است با پرش و وقفه کمتری اجرا شوند. از سوییچ اولویت ایستا -p برای تعیین سلسله‌مراتب بین فرآیندها استفاده کنید.

ابزار schedtool اکنون از تنظیم وابستگی پردازنده (CPU-affinity) که در لینوکس 2.5.8 معرفی شد پشتیبانی می‌کند.

تنظیم تمام PIDها به SCHED_NORMAL/OTHER
به SCHED_FIFO (نیازمند مجوزهای مدیر سیستم/root)
به SCHED_RR (نیازمند مجوزهای مدیر سیستم/root)
به SCHED_BATCH
به SCHED_ISO
به SCHED_IDLEPRIO
برای حالت دستی/خام؛ policy شماره سیاست زمان‌بندی است (برای 0 تا 4 به بالا مراجعه کنید). این گزینه بیشتر برای توسعه‌دهندگان هسته است که می‌خواهند پیاده‌سازی‌های جدید خود را بیازمایند.
مشخص کردن اولویت ایستا که برای SCHED_FIFO و SCHED_RR الزامی است. معمولاً در محدوده ۱ تا ۹۹ قرار دارد.
تنظیم وابستگی (affinity) شناسه فرآیند به این ماسک بیتی (هگزادسیمال)؛ علاوه بر این، یک حالت فهرستی نیز پشتیبانی می‌شود.
تنظیم سطح nice شناسه فرآیند؛ به nice(2), nice(1) مراجعه کنید.
اجرای command با پارامترهای زمان‌بندی داده‌شده (تصویر فرآیند schedtool را بازنویسی می‌کند). بخش «مثال‌ها» را ببینید.
نمایش حداقل و حداکثر اولویت برای هر سیاست.
نمایش اطلاعات کامل با جزئیات.
نمایش پیام راهنما

برای پرس‌وجوی سیاست‌های ‎$SHELL‎ جاری:

    #> schedtool $$
برای پرس‌وجوی برخی PIDها، به‌ویژه 1، 2 و 3:
#> schedtool 1 2 3
برای اجرا کردن mplayer در SCHED_RR با اولویت 20. آرگومان اولویت برای هر دو سیاست SCHED_RR و SCHED_FIFO لازم است:
#> schedtool -R -p 20 -e mplayer -quiet some_file.avi
برای تنظیم پوسته فعلی روی SCHED_BATCH، که تمام برنامه‌های آغازشده توسط پوسته از آن ارث‌بری خواهند کرد:
#> schedtool -3 $$
برای تنظیم تمام فرآیندهای با نام 'cpu_hog' روی SCHED_BATCH:
#> schedtool -3 `pidof cpu_hog`
برای تنظیم وابستگی یک فرآیند فقط به نخستین پردازنده (CPU0):
    #> schedtool -a 0x1 <PID>
استفاده از حالت فهرستی و وابستگی به CPU0 و CPU3:
#> schedtool -a 0,3 <PID>
ترکیب یک آرگومان وابستگی و یک آرگومان sysasat (سیاست) البته همواره ممکن است:
#> schedtool -B -a 0x1 <PID>

آرگومان وابستگی مشخص می‌کند یک فرآیند مجاز است روی کدام پردازنده‌ها (CPUs) اجرا شود. این مقدار از یک ماسک بیتی ساده در مبنای ۱۶ تشکیل شده است. پردازنده CPU0 با کم‌ارزش‌ترین بیت، CPU1 با دومین بیت کم‌ارزش و به همین ترتیب نشان داده می‌شوند، در نتیجه:


0x1 -> اجرا فقط روی CPU0


0x2 -> اجرا فقط روی CPU1


0x4 -> اجرا فقط روی CPU2


0x8 -> اجرا فقط روی CPU3 ... و الی آخر.

پردازنده‌های چندگانه را می‌توان با استفاده از OR بیتی مقادیر مشخص کرد:


0x7 -> اجرا روی CPUهای 0، 1 و 2 اما نه روی 4


0x3 -> اجرا فقط روی CPUهای 0 و 1

حالت پیش‌فرض اجرای یک فرآیند روی همه پردازنده‌ها است، که به صورت این ماسک‌ها خواهد بود:


0xf برای هر ۴ پردازنده


0xff برای هر ۸ پردازنده

به‌عنوان جایگزین، حالت فهرستی پشتیبانی می‌شود که در آن می‌توانید پردازنده‌ها را با جداکننده «,» مشخص کنید. دستور زیر ‎<PID>‎ را روی CPU0 و CPU1 اجرا می‌کند (معادل 0x3):

#> schedtool -a 0,1 <PID>

SCHED_NORMAL / SCHED_OTHER این سیاست پیش‌فرض و مناسب برای برنامه‌های معمولی با مقداری تعامل است. عمل پیش‌دستی (preemption) فرآیندهای دیگر را انجام می‌دهد.

SCHED_FIFO زمان‌بند خروج به ترتیب ورود (First-In, First-Out)، فقط برای الزامات بی‌درنگ (real-time) استفاده می‌شود. فرآیندها در این کلاس معمولاً توسط دیگران پیش‌دستی نمی‌شوند، آن‌ها باید خودشان از طریق sched_yield() پردازنده را آزاد کنند و به همین دلیل به برنامه‌هایی با طراحی ویژه نیاز دارید. با احتیاط بسیار زیاد استفاده کنید. نیازمند مجوزهای مدیر سیستم (root) است.

SCHED_RR زمان‌بند نوبت‌گردشی (Round-Robin)، همچنین برای الزامات بی‌درنگ استفاده می‌شود. زمان پردازنده به‌صورت نوبت‌گردشی با یک برش زمانی بسیار کوچک‌تر از SCHED_NORMAL اختصاص داده می‌شود و فرآیندها در این گروه نسبت به SCHED_NORMAL در اولویت قرار دارند. برای برنامه‌های صوتی/تصویری نزدیک به اوج نرخ سیستم قابل استفاده است. نیازمند مجوزهای مدیر سیستم (root) است.

SCHED_BATCH [از نسخه 2.6.16 در هسته اصلی] سیاست SCHED_BATCH برای برنامه‌های غیرتعاملی و متکی به پردازنده (CPU-bound) طراحی شده است. از برش‌های زمانی طولانی‌تر استفاده می‌کند (برای بهره‌برداری بهتر از حافظه نهان)، اما می‌تواند در هر زمان توسط فرآیندهای دیگر در کلاس‌های دیگر متوقف شود تا تعامل سیستم تضمین گردد. فرآیندها در این کلاس در آخرین مرحله انتخاب می‌شوند اما ممکن است منجر به افزایش چشمگیر سرعت (تا ۳۰۰٪) شوند. هیچ تقویت تعاملی انجام نمی‌شود.

SCHED_ISO [نیازمند وصله] سیاست SCHED_ISO طراحی شد تا کلاسی مشابه SCHED_RR در اختیار کاربران قرار دهد. به نقل از Con Kolivas: «این یک سیاست زمان‌بندی بدون انقضا است که برای تضمین یک برش زمانی در محدوده تأخیر معقول و در عین حال جلوگیری از گرسنگی پردازش طراحی شده است. مناسب برای بازی، ویدیو در مرز توانایی سخت‌افزار، ضبط ویدیو و غیره.»

SCHED_IDLEPRIO [نیازمند وصله] سیاست SCHED_IDLEPRIO شبیه به SCHED_BATCH است، اما به‌طور صریح طراحی شده تا فقط زمانی را که پردازنده بیکار است مصرف کند. هیچ تقویت تعاملی انجام نمی‌شود. اگر از SCHED_BATCH در هسته‌های ‎-ck‎ استفاده می‌کردید، این چیزی است که از 2.6.16 به بعد می‌خواهید.

شناسه فرآیند ۰ به معنی «فرآیند جاری» است که در مورد ما، schedtool است. ممکن است هنگام استفاده از سوییچ ‎-e‎ رخ دهد.

مراقب SCHED_FIFO باشید! ممکن است دسترسی سایر فرآیندها به پردازنده را قطع کنید، از جمله پوسته خود را.

برای SCHED_BATCH شما قطعاً به یک هسته 2.6 اخیر نیاز دارید.

یک نمای کلی کوتاه در SCHED_DESIGN ارائه شده است و پرونده README حاوی توضیحات کامل است. پرونده INSTALL همچنین تمام پیش‌نیازها و مکان دریافت وصله‌ها را فهرست کرده است.

وابستگی 0x0 هرگز نباید استفاده شود.

sched_setscheduler(2), sched_setaffinity(2), nice(2), nice(1), renice(3).

شما به مقداری دانش درباره هسته و زمان‌بندی نیاز دارید. نویسنده یک فرد نخبه‌گرای منزوی است.

Freek

لطفاً از طریق قابلیت «ارتباط با نویسنده» در freshmeat.net با من تماس بگیرید (http://freshmeat.net/projects/schedtool).

1 November 2006