پرش به محتویات

103.6 - تغییر اولویت‌های اجرای فرآیندها

اهداف یادگیری

در این فصل با موارد زیر آشنا می‌شوید:

  • دانستن اولویت پیش‌فرض یک شغل که ایجاد می‌شود
  • اجرای برنامه با اولویت بالاتر یا پایین‌تر از پیش‌فرض
  • تغییر اولویت یک فرآیند در حال اجرا

کلیدواژه‌ها

nice, ps, renice, top


اولویت‌ها

در یک ماشین لینوکس، ممکن است 100s فرآیند همزمان اجرا شوند و برای CPU و RAM بیشتر رقابت کنند. خبر خوب این است که می‌توانید برخی فرآیندها را اولویت بالاتر یا پایین‌تر (یا nice-ness) در این رقابت بدهید. بیایید نگاهی به نمونه top output بیندازیم:

$ top
Tasks: 169 total,   1 running, 168 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  3.0 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   5948.9 total,   4115.2 free,    438.2 used,   1395.5 buff/cache
MiB Swap:    975.0 total,    975.0 free,      0.0 used.   5210.3 avail Mem
PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
6496 jadi      20   0   10112   3704   3212 R   6.2   0.1   0:00.01 top
1 root      20   0  165172  10576   7780 S   0.0   0.2   0:02.80 systemd
2 root      20   0       0      0      0 S   0.0   0.0   0:00.09 kthreadd
3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri
8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:1H-events_highpri
9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq
10 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_rude_
11 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_trace

ستون NI نشان می‌دهد این فرآیند چقدر nice است. هر چه فرآیند nicer باشد، کمتر CPU می‌خواهد. مقادیر nice می‌توانند از -20 تا 19 باشند. برای تفسیر این مقدار، به آن مانند این نگاه کنید: یک فرآیند با nice = -20 ANGRY است و اولویت بیشتری برای CPU و RAM می‌گیرد در حالی که یک فرآیند با nice = 19 SUPER NICE است و به فرآیندهای دیگر اجازه می‌دهد قبل از خودش از منابع استفاده کنند).

مقدار پیش‌فرض برای nice معمولاً روی 0 تنظیم شده است؛ این را می‌توان با:

$ nice
0

چک کرد.

همچنین می‌توانید nice-ness را با فرمان ps چک کنید:

$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000 15044 15035  0  80   0 -  7453 wait   pts/29   00:00:00 bash
0 S  1000 15052 15044  0  60 -20 -  3976 hrtime pts/29   00:00:00 sleep
0 R  1000 15080 15044  0  80   0 -  4680 -      pts/29   00:00:00 ps

تنظیم nice-ness

اگر نیاز به تغییر سطح nice-ness یک برنامه دارید، می‌توانید آن را با فرمان nice و سوئیچ -n (برای nice) اجرا کنید:

$ nice -n 19 echo "I am running!"
I am running!
$ nice -n -20 echo "I am running!"
nice: cannot set niceness: Permission denied
I am running!
$ sudo nice -n -20 echo "I am running!"
I am running!

همانطور که در بالا می‌بینید، فقط root می‌تواند nice-ness بالاتر از 0 صادر کند.

اگر یک فرمان را با nice بدون -n اجرا کنید، پیش‌فرض -n 10 خواهد بود

$ nice xeyes &
[1] 15217
$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000 15044 15035  0  80   0 -  7455 wait   pts/29   00:00:00 bash
0 S  1000 15217 15044  0  90  10 - 12522 poll_s pts/29   00:00:00 xeyes
0 R  1000 15218 15044  0  80   0 -  4680 -      pts/29   00:00:00 ps

تغییر اولویت‌ها

فرمان renice می‌تواند برای تغییر nice-ness فرآیندهای در حال اجرا شما (یا دیگران اگر root باشید) استفاده شود:

$ ps -ef | grep firefox
jadi     13605 11226 30 08:28 ?        00:10:13 /usr/lib/firefox/firefox
jadi     15192 15044  0 09:01 pts/29   00:00:00 grep firefox
$ sudo renice -n -10 13605
13605 (process ID) old priority 5, new priority -10

همچنین می‌توانید r را در فرمان top فشار دهید تا یک فرآیند را renice کنید.

نکات

  • مقدار nice از -20 (بالاترین اولویت) تا 19 (پایین‌ترین اولویت)
  • فقط root می‌تواند nice-ness منفی تنظیم کند
  • از renice برای تغییر اولویت فرآیندهای در حال اجرا استفاده کنید
  • از top برای نظارت بر اولویت‌ها استفاده کنید

تمرین‌ها

  1. یک فرمان را با nice اجرا کنید و اولویت آن را چک کنید.
  2. اولویت یک فرآیند در حال اجرا را با renice تغییر دهید.
  3. از top برای مشاهده ستون NI استفاده کنید.

خلاصه

در این فصل با سیستم اولویت‌بندی فرآیندها در لینوکس آشنا شدیم. یاد گرفتیم چگونه از nice برای اجرای فرمان‌ها با اولویت‌های مختلف استفاده کنیم و از renice برای تغییر اولویت فرآیندهای در حال اجرا. همچنین ابزارهای مانند top و ps را برای نظارت بر اولویت‌ها بررسی کردیم.

نکات کلیدی برای آزمون

  • محدوده nice: از -20 (بالاترین اولویت) تا 19 (پایین‌ترین اولویت)
  • استفاده از nice -n N command برای اجرا با مقدار nice مشخص (پیش‌فرض -n 10 اگر ندادید)
  • تنها کاربر root می‌تواند niceness منفی (اولویت بالاتر) تنظیم کند
  • تغییر اولویت فرآیند در حال اجرا با renice -n N PID یا با r در top
  • مشاهده ستون NI در top و خروجی ps -l