numastat(8) Administration numastat(8)

numastat - نمایش آمار حافظه به ازای گره‌های NUMA برای فرآیندها و سیستم‌عامل

numastat

numastat [-V]

numastat [<PID>|<pattern>...]

numastat [-c] [-m] [-n] [-p <PID>|<pattern>] [-s[<node>]] [-v] [-z] [<PID>|<pattern>...]

دستور numastat بدون هیچ گزینه یا آرگومانی، آمار اصابت (hit) و خطای (miss) حافظه سامانه NUMA را به ازای هر گره از تخصیص‌دهنده حافظه هسته نمایش می‌دهد. این رفتار پیش‌فرض numastat کاملاً با اسکریپت پرل قدیمی numastat نوشته‌شده توسط Andi Kleen سازگار است. آمار پیش‌فرض numastat اعداد مربوط به هر گره را (بر حسب واحدهای صفحات حافظه) در این دسته‌بندی‌ها نمایش می‌دهد:

numa_hit حافظه‌ای است که با موفقیت و طبق انتظار روی این گره تخصیص یافته است.

numa_miss حافظه‌ای است که روی این گره تخصیص یافته، با وجود اینکه فرآیند گره دیگری را ترجیح می‌داده است. هر numa_miss دارای یک numa_foreign روی گره دیگری است.

numa_foreign حافظه‌ای است که برای این گره در نظر گرفته شده بوده، اما در عمل روی گره دیگری تخصیص یافته است. هر numa_foreign دارای یک numa_miss روی گره دیگری است.

interleave_hit حافظه درهم‌تنیده‌ای (interleaved) است که با موفقیت و طبق انتظار روی این گره تخصیص یافته است.

local_node حافظه‌ای است که روی این گره تخصیص یافته، در حالی که فرآیند روی همین گره در حال اجرا بوده است.

other_node حافظه‌ای است که روی این گره تخصیص یافته، در حالی که فرآیند روی گره دیگری در حال اجرا بوده است.

هرگونه گزینه یا آرگومان ارائه‌شده همراه با دستور numastat هم محتوا و هم قالب نمایش را به طور قابل‌توجهی تغییر می‌دهد. گزینه‌های مشخص‌شده باعث می‌شوند واحدهای نمایش به مگابایت حافظه تغییر یابند و رفتارهای خاص دیگری از numastat را به شرح زیر تغییر خواهند داد.

اطلاعات مصرف حافظه نشان‌دهنده صفحات مقیم (resident pages) در سیستم است.

عرض جدول نمایش را با کوچک کردن پویای عرض ستون‌ها بر اساس محتوای داده‌ها به حداقل می‌رساند. با این گزینه، مقادیر حافظه به نزدیک‌ترین مگابایت گرد می‌شوند (به‌جای نمایش معمول با دو رقم اعشار). عرض ستون‌ها و فاصله بین ستون‌ها با این گزینه تا حدی غیرقابل‌پیش‌بینی خواهد بود، اما نمایش فشرده‌تر در سیستم‌هایی با گره‌های NUMA متعدد بسیار مفید خواهد بود.
اطلاعات مصرف حافظه سراسر سیستم را مشابه meminfo نمایش می‌دهد. این گزینه تفکیک مصرف حافظه به ازای هر گره را مشابه آنچه در /proc/meminfo یافت می‌شود تولید می‌کند.
اطلاعات آماری اولیه numastat را نمایش می‌دهد. این گزینه همان اطلاعات رفتار پیش‌فرض numastat را نشان می‌دهد، اما واحدها مگابایت حافظه خواهند بود و تغییرات قالب‌بندی و چیدمان دیگری نسبت به رفتار اولیه numastat وجود خواهد داشت.
اطلاعات تخصیص حافظه به ازای هر گره را برای PID یا الگوی مشخص‌شده نمایش می‌دهد. اگر آرگومان -p فقط شامل ارقام باشد، یک PID عددی در نظر گرفته می‌شود. اگر کاراکترهای آرگومان فقط رقم نباشند، به عنوان الگوی قطعه متنی برای جستجو در خط فرمان فرآیندها در نظر گرفته می‌شود. برای مثال، numastat -p qemu تلاش می‌کند فرآیندهایی را که عبارت "qemu" در خط فرمان آن‌ها وجود دارد پیدا کرده و اطلاعات آن‌ها را نمایش دهد. هر آرگومان خط فرمانی که پس از پردازش پرچم‌های گزینه numastat باقی بماند، به عنوان شناسه فرآیند <PID> یا <pattern> اضافی در نظر گرفته می‌شود. از این نظر، پرچم گزینه -p اختیاری است: numastat qemu معادل numastat -p qemu است.
داده‌های جدول را پیش از نمایش به صورت نزولی مرتب می‌کند تا بیشترین مصرف‌کنندگان حافظه در ابتدا فهرست شوند. بدون تعیین <node>، جدول بر اساس ستون total مرتب می‌شود. اگر آرگومان اختیاری <node> ارائه شود، داده‌ها بر اساس ستون <node> مرتب خواهند شد. توجه داشته باشید که <node> باید بلافاصله پس از -s بدون هیچ فاصله خالی بیاید (برای مثال، numastat -s2). از آنجا که -s می‌تواند یک آرگومان اختیاری بپذیرد، همیشه باید آخرین کاراکتر گزینه در یک رشته ترکیبی از گزینه‌ها باشد. برای مثال، به‌جای numastat -msc (که احتمالاً طبق انتظار شما عمل نخواهد کرد)، از numastat -mcs استفاده کنید.
برخی گزارش‌ها را با جزئیات بیشتر نمایش می‌دهد. به‌ویژه، اطلاعات فرآیند برای چندین فرآیند، اطلاعات تفصیلی را برای هر فرآیند نمایش خواهد داد. معمولاً هنگامی که اطلاعات مربوط به هر گره برای چندین فرآیند نمایش داده می‌شود، تنها خطوط مجموع (total) نشان داده می‌شوند.
اطلاعات نسخه numastat را نمایش داده و خارج می‌شود.
از نمایش سطرها و ستون‌های جدول که تنها حاوی مقادیر صفر هستند صرف‌نظر می‌کند. از این گزینه می‌توان برای کاهش چشمگیر حجم داده‌های غیرمهم صفر در سیستم‌هایی با گره‌های NUMA فراوان استفاده کرد. توجه داشته باشید که وقتی سطرها یا ستون‌های حاوی صفر همچنان با این گزینه نمایش داده می‌شوند، احتمالاً به این معنی است که حداقل یک مقدار در سطر یا ستون در واقع غیرصفر است، اما برای نمایش به صفر گرد شده است.

دستور numastat تلاش می‌کند نمایش هر جدول را طوری تنظیم کند که در ترمینال خروجی به‌راحتی خوانا باشد. معمولاً عرض ترمینال ۸۰ کاراکتر فرض می‌شود. هنگامی که دستور resize در دسترس باشد، numastat تلاش می‌کند عرض tty خروجی را به‌طور پویا از روی خروجی resize تعیین و تنظیم دقیق کند. اگر خروجی numastat به یک tty ارسال نشود، ممکن است بسته به تعداد گره‌های NUMA موجود، خطوط خروجی بسیار طولانی تولید شوند. در همه موارد، عرض خروجی را می‌توان به‌طور صریح از طریق متغیر محیطی NUMASTAT_WIDTH مشخص کرد؛ برای مثال، NUMASTAT_WIDTH=100 numastat. در سیستم‌هایی با گره‌های NUMA فراوان، numastat -c -z .... می‌تواند برای کاهش انتخابی مقدار اطلاعات نمایش‌داده‌شده بسیار سودمند باشد.

/proc/*/numa_maps
/sys/devices/system/node/node*/meminfo
/sys/devices/system/node/node*/numastat

numastat -c -z -m -n
numastat -czs libvirt kvm qemu
watch -n1 numastat
watch -n1 --differences=cumulative numastat

اسکریپت پرل اولیه numastat حدود سال ۲۰۰۳ میلادی توسط Andi Kleen <andi.kleen@intel.com> نوشته شد. برنامه فعلی numastat در سال ۲۰۱۲ توسط Bill Gray <bgray@redhat.com> نوشته شد تا به‌طور پیش‌فرض با نسخه اولیه سازگار باشد و گزینه‌هایی برای نمایش مصرف حافظه سیستم به ازای هر گره و تخصیص حافظه فرآیند به ازای هر گره اضافه شود.

numactl(8), set_mempolicy(2), numa(3)

1.0.0 Bill Gray