| NUMACTL(8) | Linux Administrator's Manual | NUMACTL(8) |
نام (NAME)
numactl - کنترل و تنظیم خطمشیهای تخصیص حافظه و اجرای فرآیندها در معماری NUMA
خلاصه دستور (SYNOPSIS)
numactl [ --all ] [ --balancing ] [
--interleave nodes ] [ --weighted-interleave nodes ] [
--preferred node ] [ --preferred-many nodes ] [ --membind
nodes ] [ --cpunodebind nodes ] [ --physcpubind cpus ] [
--localalloc ] [--] command {arguments ...}
numactl --show
numactl --hardware [--cpu-compress]
numactl --version
numactl [ --huge ] [ --offset offset ] [ --shmmode
shmmode ] [ --length length ] [ --strict ]
[ --shmid id ] --shm shmkeyfile | --file tmpfsfile
[ --touch ] [ --dump ] [ --dump-nodes ] memory policy
توضیحات (DESCRIPTION)
دستور numactl فرآیندها را با یک خطمشی مشخص زمانبندی یا تخصیص حافظه در معماری NUMA اجرا میکند. این خطمشی برای دستور تعیین شده و به تمامی فرزندان آن به ارث میرسد. علاوه بر این، میتواند خطمشی ماندگاری را برای بخشهای حافظه اشتراکی یا فایلها تنظیم کند.
اگر از گزینههایی در دستور استفاده میکنید که ممکن است با گزینههای numactl اشتباه گرفته شوند، قبل از دستور از -- استفاده نمایید.
شناسه nodes را میتوان به صورت N,N,N یا N-N یا N,N-N یا N-N,N-N و به همین ترتیب مشخص کرد. گرههای نسبی (relative nodes) را میتوان به صورت +N,N,N یا +N-N یا +N,N-N و غیره مشخص نمود. علامت + نشان میدهد که شماره گرهها نسبت به مجموعه گرههای مجاز فرآیند در cpuset فعلی آن هستند. نماد !N-N نشاندهنده معکوس N-N است، به عبارت دیگر تمام گرهها به جز N-N. در صورت استفاده همراه با نماد +، باید به صورت !+N-N مشخص شود. هنگامی که same مشخص شود، از ماسک گره (nodemask) قبلی مشخصشده در خط فرمان استفاده میشود. مقدار all به معنی تمام گرههای موجود در cpuset فعلی است.
به جای عدد، یک گره میتواند به صورت زیر نیز مشخص شود:
| netdev:DEV | گره متصل به دستگاه شبکه DEV. |
| file:PATH | گره مربوط به دستگاه بلوکی PATH. |
| ip:HOST | گره مربوط به دستگاه شبکه HOST. |
| block:PATH | گره مربوط به دستگاه بلوکی PATH. |
| pci:[seg:]bus:dev[:func] | گره مربوط به یک دستگاه PCI. |
توجه داشته باشید که block نام دستگاههای بلوکی هسته را تحلیل میکند؛ برای نامهای udev در /dev از file: استفاده کنید.
- تنظیمات خطمشی عبارتند از:
- --all, -a
- غیرفعال کردن آگاهی پیشفرض از cpuset، به طوری که کاربر بتواند از تمام پردازندهها/گرههای ممکن برای تنظیمات خطمشی بعدی استفاده کند.
- --interleave=nodes, -i nodes
- تنظیم خطمشی درهمبافی (interleave) حافظه. حافظه با استفاده از روش نوبتگردشی (round robin) روی nodes تخصیص داده میشود. هنگامی که نتوان حافظه را روی هدف درهمبافی فعلی تخصیص داد، به گرههای دیگر رجوع میشود. میتوان چندین گره را در --interleave، --membind و --cpunodebind مشخص کرد.
- --weighted-interleave=nodes, -w nodes
- تنظیم یک خطمشی درهمبافی وزندار حافظه. حافظه با استفاده از نسبت وزندار برای هر گره تخصیص مییابد، که میتوان آن را از /sys/kernel/mm/mempolicy/weighted_interleave/node* خواند. هنگامی که امکان تخصیص حافظه روی هدف درهمبافی فعلی وجود نداشته باشد، به گرههای دیگر رجوع میشود.
- --membind=nodes, -m nodes
- تخصیص حافظه تنها از گرههای مشخصشده. در صورتی که حافظه کافی روی این گرهها موجود نباشد، تخصیص حافظه با شکست مواجه میشود. شناسه nodes را میتوان همانطور که در بالا ذکر شد مشخص کرد.
- --cpunodebind=nodes, -N nodes
- تنها اجرای command روی پردازندههای nodes. توجه داشته باشید که گرهها ممکن است شامل چندین پردازنده باشند. شناسه nodes را میتوان همانطور که در بالا ذکر شد مشخص کرد.
- --physcpubind=cpus, -C cpus
- تنها اجرای process روی cpus. این گزینه شمارههای پردازنده را همانطور که در فیلدهای processor فایل /proc/cpuinfo نشان داده شده است، یا پردازندههای نسبی نسبت به cpuset فعلی را میپذیرد. میتوانید "all" را مشخص کنید که به معنی تمام پردازندهها در cpuset فعلی است. پردازندههای فیزیکی (cpus) را میتوان به صورت N,N,N یا N-N یا N,N-N یا N-N,N-N و غیره مشخص کرد. پردازندههای نسبی (relative cpus) را میتوان به صورت +N,N,N یا +N-N یا +N,N-N و غیره مشخص کرد. علامت + نشان میدهد که شماره پردازندهها نسبت به مجموعه پردازندههای مجاز فرآیند در cpuset فعلی آن سنجیده میشوند. نماد !N-N نشاندهنده معکوس N-N است، به عبارت دیگر تمام پردازندهها به جز N-N. در صورت استفاده با نماد +، باید به صورت !+N-N مشخص شود.
- --localalloc, -l
- تلاش برای تخصیص حافظه روی گره فعلی فرآیند، اما اگر حافظه در آنجا قابل تخصیص نباشد، به گرههای دیگر رجوع میشود.
- --preferred=node, -p node
- ترجیحاً تخصیص حافظه روی node، اما در صورتی که امکان تخصیص حافظه در آنجا وجود نداشته باشد، به گرههای دیگر رجوع میشود. این گزینه تنها یک شماره گره دریافت میکند. میتوان از نشانهگذاری نسبی نیز استفاده کرد.
- --balancing, -b
- فعالسازی تعادلبخشی NUMA در هسته لینوکس برای فرآیند، در صورتی که توسط هسته پشتیبانی شود. این گزینه فقط باید همراه با --membind, -m استفاده شود، در غیر این صورت نادیده گرفته میشود.
- --preferred-many=nodes, -P nodes
- ترجیحاً تخصیص حافظه روی nodes، اما در صورتی که امکان تخصیص حافظه در آنجا وجود نداشته باشد، به گرههای دیگر رجوع میشود. این گزینه ماسکی از گرههای ترجیحی را میپذیرد که در آن نزدیکترین گره به حالت محلی به عنوان دارای بالاترین اولویت در نظر گرفته میشود. میتوان از نشانهگذاری نسبی استفاده کرد.
- --show, -s
- نمایش تنظیمات خطمشی NUMA فرآیند فعلی.
- --hardware, -H
- نمایش فهرست گرههای موجود در سیستم. هنگامی که گزینه --cpu-compress تنظیم شده باشد، محدودههای پردازنده را نمایش میدهد. این حالت پیشفرض نیست تا اسکریپتهای موجود دچار اختلال نشوند.
- ابزار numactl میتواند خطمشی را برای یک بخش حافظه اشتراکی SYSV یا فایلی در shmfs/hugetlbfs تنظیم کند.
- --version
- چاپ نسخه بسته numactl و خروج.
- تنظیمات خطمشی زیر ماندگار هستند و توسط تمام نگاشتهای حاصل از آن حافظه اشتراکی استفاده خواهند شد. ترتیب گزینهها در اینجا اهمیت دارد.
- مشخصات باید حداقل شامل یکی از گزینههای --shm، --shmid یا --file برای مشخص کردن بخش حافظه اشتراکی یا فایل، و یک خطمشی حافظه همانطور که در بالا توضیح داده شد باشد (مانند --interleave، --localalloc، --preferred، --preferred-many یا --membind).
- --huge
- هنگام ایجاد یک بخش حافظه اشتراکی SYSV، از صفحات بزرگ (huge pages) استفاده میکند. تنها قبل از --shmid یا --shm معتبر است.
- --offset
- مشخص کردن آفست در بخش حافظه اشتراکی. پیشفرض 0 است. واحدهای معتبر عبارتند از m (برای مگابایت)، g (برای گیگابایت)، k (برای کیلوبایت)، در غیر این صورت بر حسب بایت مشخص میشود.
- --strict
- در صورتی که صفحهای در ناحیه دارای خطمشی در بخش حافظه اشتراکی قبلاً با یک خطمشی متناقض واکشی (faulted in) شده باشد، خطا صادر میکند. رفتار پیشفرض نادیده گرفتن خاموش این مورد است.
- --shmmode shmmode
- تنها قبل از --shmid یا --shm معتبر است. هنگام ایجاد یک بخش حافظه اشتراکی، حالت دسترسی عددی آن را روی shmmode تنظیم میکند.
- --length length
- اعمال خطمشی به محدوده length در بخش حافظه اشتراکی یا تنظیم طول بخش برابر با این مقدار. پیشفرض استفاده از طول باقیمانده است. هنگام ایجاد یک بخش حافظه اشتراکی الزامی است و در این حالت طول بخش جدید را مشخص میکند. واحدهای معتبر عبارتند از m (برای مگابایت)، g (برای گیگابایت)، k (برای کیلوبایت)، در غیر این صورت بر حسب بایت مشخص میشود.
- --shmid id
- ایجاد یا استفاده از یک بخش حافظه اشتراکی با شناسه عددی id.
- --shm shmkeyfile
- ایجاد یا استفاده از یک بخش حافظه اشتراکی، با شناسهای که با استفاده از ftok(3) از shmkeyfile تولید شده است.
- --file tmpfsfile
- تنظیم خطمشی برای یک فایل در tmpfs یا hugetlbfs.
- --touch
- لمس کردن صفحات برای اعمال زودهنگام خطمشی. حالت پیشفرض عدم لمس آنهاست؛ خطمشی زمانی اعمال میشود که برنامهای صفحه را نگاشت کرده و به آن دسترسی پیدا کند.
- --dump
- تخلیه و نمایش (dump) خطمشی در محدوده مشخصشده.
- --dump-nodes
- نمایش تمام گرههای محدوده مشخصشده (بسیار پرجزئیات!).
- مشخصکنندههای معتبر گره:
-
all همه گرهها number شماره گره number1{,number2} گره number1 و گره number2 number1-number2 گرهها از number1 تا number2 ! nodes معکوس کردن انتخاب مشخصات بعدی
مثالها (EXAMPLES)
numactl --physcpubind=+0-4,8-12 myapplic arguments
اجرای myapplic روی پردازندههای 0-4 و 8-12 از cpuset فعلی.
numactl --interleave=all bigdatabase argumentsاجرای bigdatabase با حافظه درهمبافتهشده روی تمام پردازندهها.
numactl --weighted-interleave=all bigdatabase argumentsاجرای bigdatabase با حافظه درهمبافتهشده با نسبت وزندار روی تمام پردازندهها.
numactl --cpunodebind=0 --membind=0,1 processاجرای process روی گره 0 همراه با تخصیص حافظه روی گرههای 0 و 1.
numactl --cpunodebind=0 --membind=0,1 -- process -lاجرای فرآیند مانند بالا، اما با گزینهای (-l) که ممکن است با گزینههای numactl اشتباه گرفته شود.
numactl --cpunodebind=0 --balancing --membind=0,1 processاجرای process روی گره 0 با تخصیص حافظه روی گرههای 0 و 1. بهینهسازی جایگذاری صفحات با مکانیزم تعادلبخشی NUMA هسته لینوکس در صورت امکان.
numactl --cpunodebind=netdev:eth0 --membind=netdev:eth0 network-serverاجرای network-server روی گره دستگاه شبکه eth0 به طوری که حافظه آن نیز در همان گره باشد.
numactl --preferred=1 numactl --showتنظیم گره ترجیحی 1 و نمایش وضعیت حاصل.
numactl --preferred-many=0x3 numactl --showتنظیم گرههای ترجیحی 1 و 2، و نمایش وضعیت حاصل.
numactl --length 1g --shm /tmp/shmkey --interleave=allدرهمبافی کل ناحیه حافظه اشتراکی sysv به اندازه 1g که توسط /tmp/shmkey مشخص شده است بر روی تمام گرهها.
قرار دادن یک فایل tmpfs روی ۲ گره:
numactl --membind=2 dd if=/dev/zero of=/dev/shm/A bs=1M count=1024 numactl --membind=3 dd if=/dev/zero of=/dev/shm/A seek=1024 bs=1M count=1024
numactl --localalloc /dev/shm/fileبازنشانی خطمشی برای فایل حافظه اشتراکی file به خطمشی پیشفرض localalloc.
نکات (NOTES)
نیازمند هستهای است که از خطمشی NUMA پشتیبانی کند (NUMA policy aware).
دستور با استفاده از یک شل اجرا نمیشود. اگر میخواهید از نویسههای کنترلی (metacharacters) شل در فرزند استفاده کنید، از sh -c به عنوان بستهبندیکننده (wrapper) استفاده نمایید.
تنظیم خطمشی برای یک فایل hugetlbfs در حال حاضر کار نمیکند، زیرا نمیتوان آن را با truncate گسترش داد.
بخشهای حافظه اشتراکی که بزرگتر از فضای آدرس numactl باشند را نمیتوان به طور کامل تحت پوشش خطمشی قرار داد. این موضوع ممکن است در معماریهای ۳۲ بیتی مشکلساز باشد. تغییر دادن آن به صورت تکهتکه ممکن است کارساز باشد.
گزینه قدیمی --cpubind که شمارههای گره (و نه شمارههای پردازنده) را میپذیرفت منسوخ شده و با گزینههای جدید --cpunodebind و --physcpubind جایگزین شده است.
فایلها (FILES)
/proc/cpuinfo برای فهرست پردازندههای فعال. برای جزئیات بیشتر به proc(5) مراجعه کنید.
/sys/devices/system/node/node*/numastat برای آمار اصابت حافظه (memory hit) در معماری NUMA.
حق نشر (COPYRIGHT)
Copyright 2002,2004 Andi Kleen, SuSE Labs. ابزار numactl و برنامههای نمایشی تحت مجوز عمومی همگانی گنو، نسخه ۲ (GNU GPL v.2) منتشر شدهاند.
همچنین ببینید (SEE ALSO)
set_mempolicy(2) , get_mempolicy(2) , mbind(2) , sched_setaffinity(2) , sched_getaffinity(2) , proc(5) , ftok(3) , shmat(2) , migratepages(8)
| Mar 2004 | SuSE Labs |