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-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برای نظارت بر اولویتها استفاده کنید
تمرینها¶
- یک فرمان را با nice اجرا کنید و اولویت آن را چک کنید.
- اولویت یک فرآیند در حال اجرا را با renice تغییر دهید.
- از 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