'\" t .\" Copyright 2003,2004 Andi Kleen, SuSE Labs. .\" .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .TH NUMACTL 8 "Mar 2004" "SuSE Labs" "Linux Administrator's Manual" .SH "نام (NAME)" numactl \- کنترل و تنظیم خط‌مشی‌های تخصیص حافظه و اجرای فرآیندها در معماری NUMA .SH "خلاصه دستور (SYNOPSIS)" .B numactl [ .B \-\-all ] [ .B \-\-balancing ] [ .B \-\-interleave nodes ] [ .B \-\-weighted\-interleave nodes ] [ .B \-\-preferred node ] [ .B \-\-preferred-many nodes ] [ .B \-\-membind nodes ] [ .B \-\-cpunodebind nodes ] [ .B \-\-physcpubind cpus ] [ .B \-\-localalloc ] [\-\-] command {arguments ...} .br .B numactl \-\-show .br .B numactl \-\-hardware [\-\-cpu-compress] .br .B numactl \-\-version .br .B numactl [ .B \-\-huge ] [ .B \-\-offset offset ] [ .B \-\-shmmode shmmode ] [ .B \-\-length length ] [ .B \-\-strict ] .br [ .B \-\-shmid id ] .B \-\-shm shmkeyfile | .B \-\-file tmpfsfile .br [ .B \-\-touch ] [ .B \-\-dump ] [ .B \-\-dump-nodes ] memory policy .SH "توضیحات (DESCRIPTION)" دستور .B numactl فرآیندها را با یک خط‌مشی مشخص زمان‌بندی یا تخصیص حافظه در معماری NUMA اجرا می‌کند. این خط‌مشی برای دستور تعیین شده و به تمامی فرزندان آن به ارث می‌رسد. علاوه بر این، می‌تواند خط‌مشی ماندگاری را برای بخش‌های حافظه اشتراکی یا فایل‌ها تنظیم کند. .PP اگر از گزینه‌هایی در دستور استفاده می‌کنید که ممکن است با گزینه‌های numactl اشتباه گرفته شوند، قبل از دستور از .B \-\- استفاده نمایید. .PP شناسه .I nodes را می‌توان به صورت N,N,N یا N-N یا N,N-N یا N-N,N-N و به همین ترتیب مشخص کرد. گره‌های نسبی .RB ( relative " " nodes ) را می‌توان به صورت +N,N,N یا +N-N یا +N,N-N و غیره مشخص نمود. علامت + نشان می‌دهد که شماره گره‌ها نسبت به مجموعه گره‌های مجاز فرآیند در cpuset فعلی آن هستند. نماد !N-N نشان‌دهنده معکوس N-N است، به عبارت دیگر تمام گره‌ها به جز N-N. در صورت استفاده همراه با نماد +، باید به صورت !+N-N مشخص شود. هنگامی که .I same مشخص شود، از ماسک گره (nodemask) قبلی مشخص‌شده در خط فرمان استفاده می‌شود. مقدار all به معنی تمام گره‌های موجود در cpuset فعلی است. .PP به جای عدد، یک گره می‌تواند به صورت زیر نیز مشخص شود: .TS tab(|); l l. netdev:DEV|گره متصل به دستگاه شبکه DEV. file:PATH |گره مربوط به دستگاه بلوکی PATH. ip:HOST |گره مربوط به دستگاه شبکه HOST. block:PATH|گره مربوط به دستگاه بلوکی PATH. pci:[seg:]bus:dev[:func]|گره مربوط به یک دستگاه PCI. .TE توجه داشته باشید که block نام دستگاه‌های بلوکی هسته را تحلیل می‌کند؛ برای نام‌های udev در /dev از .I file: استفاده کنید. .TP تنظیمات خط‌مشی عبارتند از: .TP .B \-\-all, \-a غیرفعال کردن آگاهی پیش‌فرض از cpuset، به طوری که کاربر بتواند از تمام پردازنده‌ها/گره‌های ممکن برای تنظیمات خط‌مشی بعدی استفاده کند. .TP .B \-\-interleave=nodes, \-i nodes تنظیم خط‌مشی درهم‌بافی (interleave) حافظه. حافظه با استفاده از روش نوبت‌گردشی (round robin) روی .I nodes تخصیص داده می‌شود. هنگامی که نتوان حافظه را روی هدف درهم‌بافی فعلی تخصیص داد، به گره‌های دیگر رجوع می‌شود. می‌توان چندین گره را در .BR \-\-interleave ، .B \-\-membind و .B \-\-cpunodebind مشخص کرد. .TP .B \-\-weighted\-interleave=nodes, \-w nodes تنظیم یک خط‌مشی درهم‌بافی وزن‌دار حافظه. حافظه با استفاده از نسبت وزن‌دار برای هر گره تخصیص می‌یابد، که می‌توان آن را از .I /sys/kernel/mm/mempolicy/weighted_interleave/node* خواند. هنگامی که امکان تخصیص حافظه روی هدف درهم‌بافی فعلی وجود نداشته باشد، به گره‌های دیگر رجوع می‌شود. .TP .B \-\-membind=nodes, \-m nodes تخصیص حافظه تنها از گره‌های مشخص‌شده. در صورتی که حافظه کافی روی این گره‌ها موجود نباشد، تخصیص حافظه با شکست مواجه می‌شود. شناسه .I nodes را می‌توان همان‌طور که در بالا ذکر شد مشخص کرد. .TP .B \-\-cpunodebind=nodes, \-N nodes تنها اجرای .I command روی پردازنده‌های .IR nodes . توجه داشته باشید که گره‌ها ممکن است شامل چندین پردازنده باشند. شناسه .I nodes را می‌توان همان‌طور که در بالا ذکر شد مشخص کرد. .TP .B \-\-physcpubind=cpus, \-C cpus تنها اجرای .I process روی .IR cpus . این گزینه شماره‌های پردازنده را همان‌طور که در فیلدهای .I processor فایل .I /proc/cpuinfo نشان داده شده است، یا پردازنده‌های نسبی نسبت به cpuset فعلی را می‌پذیرد. می‌توانید "all" را مشخص کنید که به معنی تمام پردازنده‌ها در cpuset فعلی است. پردازنده‌های فیزیکی .RB ( cpus ) را می‌توان به صورت N,N,N یا N-N یا N,N-N یا N-N,N-N و غیره مشخص کرد. پردازنده‌های نسبی .RB ( relative " " cpus ) را می‌توان به صورت +N,N,N یا +N-N یا +N,N-N و غیره مشخص کرد. علامت + نشان می‌دهد که شماره پردازنده‌ها نسبت به مجموعه پردازنده‌های مجاز فرآیند در cpuset فعلی آن سنجیده می‌شوند. نماد !N-N نشان‌دهنده معکوس N-N است، به عبارت دیگر تمام پردازنده‌ها به جز N-N. در صورت استفاده با نماد +، باید به صورت !+N-N مشخص شود. .TP .B \-\-localalloc, \-l تلاش برای تخصیص حافظه روی گره فعلی فرآیند، اما اگر حافظه در آنجا قابل تخصیص نباشد، به گره‌های دیگر رجوع می‌شود. .TP .B \-\-preferred=node, \-p node ترجیحاً تخصیص حافظه روی .IR node ، اما در صورتی که امکان تخصیص حافظه در آنجا وجود نداشته باشد، به گره‌های دیگر رجوع می‌شود. این گزینه تنها یک شماره گره دریافت می‌کند. می‌توان از نشانه‌گذاری نسبی نیز استفاده کرد. .TP .B \-\-balancing, \-b فعال‌سازی تعادل‌بخشی NUMA در هسته لینوکس برای فرآیند، در صورتی که توسط هسته پشتیبانی شود. این گزینه فقط باید همراه با .I \-\-membind, \-m استفاده شود، در غیر این صورت نادیده گرفته می‌شود. .TP .B \-\-preferred-many=nodes, \-P nodes ترجیحاً تخصیص حافظه روی .IR nodes ، اما در صورتی که امکان تخصیص حافظه در آنجا وجود نداشته باشد، به گره‌های دیگر رجوع می‌شود. این گزینه ماسکی از گره‌های ترجیحی را می‌پذیرد که در آن نزدیک‌ترین گره به حالت محلی به عنوان دارای بالاترین اولویت در نظر گرفته می‌شود. می‌توان از نشانه‌گذاری نسبی استفاده کرد. .TP .B \-\-show, \-s نمایش تنظیمات خط‌مشی NUMA فرآیند فعلی. .TP .B \-\-hardware, \-H نمایش فهرست گره‌های موجود در سیستم. هنگامی که گزینه .B \-\-cpu-compress تنظیم شده باشد، محدوده‌های پردازنده را نمایش می‌دهد. این حالت پیش‌فرض نیست تا اسکریپت‌های موجود دچار اختلال نشوند. .TP 0 ابزار numactl می‌تواند خط‌مشی را برای یک بخش حافظه اشتراکی SYSV یا فایلی در shmfs/hugetlbfs تنظیم کند. .TP .B \-\-version چاپ نسخه بسته numactl و خروج. .TP تنظیمات خط‌مشی زیر ماندگار هستند و توسط تمام نگاشت‌های حاصل از آن حافظه اشتراکی استفاده خواهند شد. ترتیب گزینه‌ها در اینجا اهمیت دارد. مشخصات باید حداقل شامل یکی از گزینه‌های .IR \-\-shm ، .I \-\-shmid یا .I \-\-file برای مشخص کردن بخش حافظه اشتراکی یا فایل، و یک خط‌مشی حافظه همان‌طور که در بالا توضیح داده شد باشد (مانند .IR \-\-interleave ، .IR \-\-localalloc ، .IR \-\-preferred ، .I \-\-preferred-many یا .IR \-\-membind ). .TP .B \-\-huge هنگام ایجاد یک بخش حافظه اشتراکی SYSV، از صفحات بزرگ (huge pages) استفاده می‌کند. تنها قبل از \-\-shmid یا \-\-shm معتبر است. .TP .B \-\-offset مشخص کردن آفست در بخش حافظه اشتراکی. پیش‌فرض 0 است. واحدهای معتبر عبارتند از .I m (برای مگابایت)، .I g (برای گیگابایت)، .I k (برای کیلوبایت)، در غیر این صورت بر حسب بایت مشخص می‌شود. .TP .B \-\-strict در صورتی که صفحه‌ای در ناحیه دارای خط‌مشی در بخش حافظه اشتراکی قبلاً با یک خط‌مشی متناقض واکشی (faulted in) شده باشد، خطا صادر می‌کند. رفتار پیش‌فرض نادیده گرفتن خاموش این مورد است. .TP .B \-\-shmmode shmmode تنها قبل از \-\-shmid یا \-\-shm معتبر است. هنگام ایجاد یک بخش حافظه اشتراکی، حالت دسترسی عددی آن را روی .I shmmode تنظیم می‌کند. .TP .B \-\-length length اعمال خط‌مشی به محدوده .I length در بخش حافظه اشتراکی یا تنظیم طول بخش برابر با این مقدار. پیش‌فرض استفاده از طول باقی‌مانده است. هنگام ایجاد یک بخش حافظه اشتراکی الزامی است و در این حالت طول بخش جدید را مشخص می‌کند. واحدهای معتبر عبارتند از .I m (برای مگابایت)، .I g (برای گیگابایت)، .I k (برای کیلوبایت)، در غیر این صورت بر حسب بایت مشخص می‌شود. .TP .B \-\-shmid id ایجاد یا استفاده از یک بخش حافظه اشتراکی با شناسه عددی .IR id . .TP .B \-\-shm shmkeyfile ایجاد یا استفاده از یک بخش حافظه اشتراکی، با شناسه‌ای که با استفاده از .I ftok(3) از shmkeyfile تولید شده است. .TP .B \-\-file tmpfsfile تنظیم خط‌مشی برای یک فایل در tmpfs یا hugetlbfs. .TP .B \-\-touch لمس کردن صفحات برای اعمال زودهنگام خط‌مشی. حالت پیش‌فرض عدم لمس آن‌هاست؛ خط‌مشی زمانی اعمال می‌شود که برنامه‌ای صفحه را نگاشت کرده و به آن دسترسی پیدا کند. .TP .B \-\-dump تخلیه و نمایش (dump) خط‌مشی در محدوده مشخص‌شده. .TP .B \-\-dump-nodes نمایش تمام گره‌های محدوده مشخص‌شده (بسیار پرجزئیات!). .TP مشخص‌کننده‌های معتبر گره: .TS tab(:); l l. all:همه گره‌ها number:شماره گره number1{,number2}:گره number1 و گره number2 number1-number2:گره‌ها از number1 تا number2 ! nodes:معکوس کردن انتخاب مشخصات بعدی .TE .SH "مثال‌ها (EXAMPLES)" .PP .nf numactl \-\-physcpubind=+0-4,8-12 myapplic arguments .fi اجرای myapplic روی پردازنده‌های 0-4 و 8-12 از cpuset فعلی. .PP .nf numactl \-\-interleave=all bigdatabase arguments .fi اجرای bigdatabase با حافظه درهم‌بافته‌شده روی تمام پردازنده‌ها. .PP .nf numactl \-\-weighted\-interleave=all bigdatabase arguments .fi اجرای bigdatabase با حافظه درهم‌بافته‌شده با نسبت وزن‌دار روی تمام پردازنده‌ها. .PP .nf numactl \-\-cpunodebind=0 \-\-membind=0,1 process .fi اجرای process روی گره 0 همراه با تخصیص حافظه روی گره‌های 0 و 1. .PP .nf numactl \-\-cpunodebind=0 \-\-membind=0,1 \-\- process \-l .fi اجرای فرآیند مانند بالا، اما با گزینه‌ای .RB ( \-l ) که ممکن است با گزینه‌های numactl اشتباه گرفته شود. .PP .nf numactl \-\-cpunodebind=0 \-\-balancing \-\-membind=0,1 process .fi اجرای process روی گره 0 با تخصیص حافظه روی گره‌های 0 و 1. بهینه‌سازی جای‌گذاری صفحات با مکانیزم تعادل‌بخشی NUMA هسته لینوکس در صورت امکان. .PP .nf numactl \-\-cpunodebind=netdev:eth0 \-\-membind=netdev:eth0 network-server .fi اجرای network-server روی گره دستگاه شبکه eth0 به طوری که حافظه آن نیز در همان گره باشد. .PP .nf numactl \-\-preferred=1 numactl \-\-show .fi تنظیم گره ترجیحی 1 و نمایش وضعیت حاصل. .PP .nf numactl \-\-preferred-many=0x3 numactl \-\-show .fi تنظیم گره‌های ترجیحی 1 و 2، و نمایش وضعیت حاصل. .PP .nf numactl \-\-length 1g \-\-shm /tmp/shmkey \-\-interleave=all .fi درهم‌بافی کل ناحیه حافظه اشتراکی sysv به اندازه 1g که توسط /tmp/shmkey مشخص شده است بر روی تمام گره‌ها. .PP قرار دادن یک فایل tmpfs روی ۲ گره: .nf 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 .fi .PP .nf numactl \-\-localalloc /dev/shm/file .fi بازنشانی خط‌مشی برای فایل حافظه اشتراکی .I file به خط‌مشی پیش‌فرض localalloc. .SH "نکات (NOTES)" نیازمند هسته‌ای است که از خط‌مشی NUMA پشتیبانی کند (NUMA policy aware). .PP دستور با استفاده از یک شل اجرا نمی‌شود. اگر می‌خواهید از نویسه‌های کنترلی (metacharacters) شل در فرزند استفاده کنید، از .B sh \-c به عنوان بسته‌بندی‌کننده (wrapper) استفاده نمایید. .PP تنظیم خط‌مشی برای یک فایل hugetlbfs در حال حاضر کار نمی‌کند، زیرا نمی‌توان آن را با truncate گسترش داد. .PP بخش‌های حافظه اشتراکی که بزرگتر از فضای آدرس numactl باشند را نمی‌توان به طور کامل تحت پوشش خط‌مشی قرار داد. این موضوع ممکن است در معماری‌های ۳۲ بیتی مشکل‌ساز باشد. تغییر دادن آن به صورت تکه‌تکه ممکن است کارساز باشد. .PP گزینه قدیمی .I \-\-cpubind که شماره‌های گره (و نه شماره‌های پردازنده) را می‌پذیرفت منسوخ شده و با گزینه‌های جدید .I \-\-cpunodebind و .I \-\-physcpubind جایگزین شده است. .SH "فایل‌ها (FILES)" .I /proc/cpuinfo برای فهرست پردازنده‌های فعال. برای جزئیات بیشتر به .I proc(5) مراجعه کنید. .PP .I /sys/devices/system/node/node*/numastat برای آمار اصابت حافظه (memory hit) در معماری NUMA. .SH "حق نشر (COPYRIGHT)" Copyright 2002,2004 Andi Kleen, SuSE Labs. ابزار numactl و برنامه‌های نمایشی تحت مجوز عمومی همگانی گنو، نسخه ۲ (GNU GPL v.2) منتشر شده‌اند. .SH "همچنین ببینید (SEE ALSO)" .I set_mempolicy(2) , .I get_mempolicy(2) , .I mbind(2) , .I sched_setaffinity(2) , .I sched_getaffinity(2) , .I proc(5) , .I ftok(3) , .I shmat(2) , .I migratepages(8)