| HWLOC-CALC(1) | hwloc | HWLOC-CALC(1) |
نام (NAME)
hwloc-calc - محاسبات و پردازش ماسکهای پردازنده و توپولوژی سختافزار
خلاصه دستور (SYNOPSIS)
hwloc-calc [گزینههای توپولوژی] [گزینهها] <موقعیت۱> [<موقعیت۲> [...] ]
توجه داشته باشید که hwloc(7) توضیحات مفصلی درباره سامانه hwloc و قالبهای معتبر <location> ارائه میدهد؛ پیشنهاد میشود پیش از خواندن این صفحه راهنما، آن را مطالعه فرمایید.
گزینههای توپولوژی (TOPOLOGY OPTIONS)
تمام گزینههای توپولوژی باید پیش از سایر گزینهها مشخص شوند.
- --no-smt, --no-smt=<N>
- تنها
نخستین
واحد
پردازش (PU) به
ازای هر
هسته در
موقعیتهای
ورودی حفظ
میشود. در
صورت مشخص
شدن <N>، به
جای آن
N-امین واحد
(در صورت
وجود)
نگهداشته
میشود.
واحدهای PU
در طول این
فیلترسازی
بر اساس
نمایه
فیزیکی
مرتب
میشوند.
توجه داشته باشید که این گزینه پس از جستجوی موقعیتها اعمال میشود. بنابراین --no-smt pu:2-5 ابتدا واحدهای پردازش شماره ۲ تا ۵ را در ماشین انتخاب کرده و سپس از هر هسته یکی را نگه میدارد. برای دریافت واحدهای شماره ۲ تا ۵ پس از فیلتر کردن یکی به ازای هر هسته، باید دستورات را ترکیب کنید:
hwloc-calc --restrict $(hwloc-calc --no-smt all) pu:2-5 - --cpukind <n>, --cpukind <infoname>=<infovalue>
- تنها
واحدهای
پردازشی (PU)
که نوع
پردازنده (CPU
kind) آنها
مطابقت
دارد
نگهداشته
میشوند.
نوع
پردازنده
میتواند
به صورت یک
نمایه عددی
تعیین شود،
یا از طریق
نام و مقدار
ویژگی info
برای
انتخاب
انواع
منطبق
استفاده
گردد.
هنگامی که با نمایه مشخص میشود، متناظر با رتبهبندی انواع پردازنده در hwloc است که هستههای کممصرف و بهینه از نظر انرژی را در ابتدا، و هستههای با کارایی بالا و پرمصرف را در انتها قرار میدهد. فهرست کامل انواع پردازنده را میتوان با lstopo --cpukinds مشاهده کرد.
توجه داشته باشید که این گزینه پس از جستجوی موقعیتها اعمال میشود. بنابراین --cpukind 0 core:1 در صورتی که هسته دوم ماشین از نوع ۰ باشد آن را برمیگرداند و در غیر این صورت هیچچیز بازنمیگرداند. برای دریافت هسته دوم در میان هستههایی که از نوع ۰ هستند، باید دستورات را ترکیب کنید:
hwloc-calc --restrict $(hwloc-calc --cpukind 0 all) core:1 - --default-nodes
- فقط
گرههای NUMA
که به عنوان
گرههای
پیشفرض در
پلتفرمهای
حافظه
ناهمگن
شناخته
میشوند را
نگه
میدارد.
این
معمولاً
شامل
گرههای
حافظه DRAM (یا
گرههای
همان رده
حافظه) است
و گرههای
دارای
مشخصات خاص
(مانند HBM، NVM، CXL
و غیره) را
شامل
نمیشود.
این گزینه برای تفکیک توپولوژی بر اساس دامنه NUMA هنگام مقیدسازی یک وظیفه به ازای هر دامنه کاربرد دارد، حتی اگر برخی دامنههای NUMA دارای محلیسازی (locality) یکسانی باشند (برای نمونه یک گره DRAM و یک گره HBM روی هر سوکت).
برای جزئیات بیشتر به ()hwloc_topology_get_default_nodeset مراجعه کنید.
- --restrict <cpuset>
- توپولوژی
را به
مجموعه
پردازندههای
(cpuset) مشخصشده
محدود
میکند. این
کار برخی
واحدهای PU و
والدینی که
دیگر
فرزندی
ندارند را
حذف میکند.
این گزینه هنگام ترکیب دستورات جهت فیلتر کردن برخی اشیاء پیش از انتخاب از میان آنها بسیار مفید است.
دقت داشته باشید که محدود کردن واحدهای PU در یک توپولوژی ممکن است نمایههای منطقی بسیاری از اشیاء، از جمله گرههای NUMA را تغییر دهد.
- --restrict nodeset=<nodeset>
- توپولوژی
را به
مجموعه
گرههای (nodeset)
دادهشده
محدود
میکند (مگر
آنکه --restrict-flags
رفتار
متفاوتی را
مشخص کرده
باشد). این
کار برخی
گرههای NUMA و
والدین
بدون فرزند
آنها را
حذف میکند.
دقت داشته باشید که محدود کردن گرههای NUMA در یک توپولوژی ممکن است نمایههای منطقی بسیاری از اشیاء، از جمله واحدهای PU را تغییر دهد.
- --restrict-flags <flags>
- اعمال فلگها هنگام محدودسازی توپولوژی. فلگها میتوانند به صورت مقادیر عددی یا فهرستی از نامها که با کاما از هم جدا شدهاند به hwloc_topology_restrict() ارسال شوند. این نامها تا زمانی که به یک مورد یکتا اشاره کنند میتوانند زیررشتهای از نامهای اصلی فلگها باشند، برای نمونه bynodeset,memless. مقدار پیشفرض 0 (یا none) است.
- --disallowed
- شامل کردن اشیائی که به دلیل محدودیتهای مدیریتی مجاز نیستند.
- -i <path>, --input <path>
- خواندن
توپولوژی
از <path> به
جای کشف
توپولوژی
ماشین محلی.
اگر <path> یک فایل باشد، میتواند یک فایل XML باشد که قبلاً توسط برنامههای hwloc استخراج شده است. اگر <path> برابر با "-" باشد، ورودی استاندارد به عنوان فایل XML استفاده میشود.
در لینوکس، <path> میتواند دایرکتوری حاوی فایلهای توپولوژی باشد که از ماشین دیگری با دستور hwloc-gather-topology جمعآوری شده است.
در معماری x86، <path> میتواند دایرکتوری حاوی دامپ cpuid جمعآوریشده با hwloc-gather-cpuid باشد.
در صورت در دسترس بودن برنامه archivemount، <path> میتواند یک فایل فشرده tarball حاوی چنین فایلهای توپولوژی لینوکس یا x86 باشد.
- -i <specification>, --input <specification>
- شبیهسازی یک سلسلهمراتب ساختگی (به جای کشف توپولوژی روی ماشین محلی). اگر <specification> برابر با "node:2 pu:3" باشد، توپولوژی شامل دو گره NUMA خواهد بود که در هر یک ۳ واحد پردازشی وجود دارد. رشته <specification> باید با تعداد PUها پایان یابد.
- --if <format>, --input-format <format>
- اجبار قالب ورودی به فرمت مشخصشده از میان xml، fsroot، cpuid و synthetic.
گزینههای تبدیل خروجی (OUTPUT CONVERSION OPTIONS)
به صورت پیشفرض، خروجی یک مجموعه پردازنده (یا nodeset) است. این گزینهها این مجموعه را به اشیاء تبدیل کرده، آنها را شمارش میکنند و غیره.
تمام این گزینهها باید پس از گزینههای توپولوژی بالا آورده شوند.
- -N --number-of <type|depth>
- تعداد
اشیاء از
نوع یا عمق
دادهشده
که با
مجموعه
پردازنده
اشتراک
دارند را
گزارش
میدهد. این
گزینه برای
یافتن
تعداد
هستهها،
گرههای NUMA
یا واحدهای
PU موجود در
یک ماشین
بسیار
کارآمد است.
<type> میتواند حاوی فیلتری برای انتخاب اشیاء خاص از آن نوع باشد. برای نمونه -N numa[hbm] گرههای NUMA با زیرنوع "HBM" را شمارش میکند، در حالی که -N numa[mcdram] فقط گرههای NUMA از نوع MCDRAM را در پردازندههای KNL میشمارد.
اگر یک زیرنوع دستگاه سیستمعامل مانند gpu به جای osdev مشخص شود، فقط دستگاههای سیستمعامل از آن زیرنوع شمارش خواهند شد.
مقادیر ویژهای مانند cpukind و memorytier را میتوان برای دریافت تعداد انواع پردازنده یا ردههای حافظه منطبق با موقعیت ورودی استفاده کرد.
- -I --intersect <type|depth>
- فهرست
اشیاء از
نوع یا عمق
دادهشده
که با
مجموعه
پردازنده
اشتراک
دارند را
پیدا کرده و
فهرستی از
نمایههای
آنها را با
کاما به جای
رشته ماسک
پردازنده
گزارش
میدهد. از
این گزینه
میتوان
برای تعیین
فهرست
اشیاء
بالاتر یا
پایینتر
از اشیاء
ورودی
استفاده
کرد.
هنگام ترکیب با --physical، فهرست خروجی برای ارسال به ابزارهای خارجی مانند taskset یا numactl (--physcpubind یا --membind) بسیار مناسب است. این با --largest متفاوت است زیرا گزینه اخیر ایجاب میکند که تمام اشیاء گزارششده کاملاً درون اشیاء ورودی قرار داشته باشند.
<type> میتواند حاوی فیلتری برای انتخاب اشیاء خاص باشد. برای نمونه -N numa[hbm] گرههای NUMA با زیرنوع "HBM" را فهرست میکند، در حالی که -N numa[mcdram] تنها گرههای NUMA از نوع MCDRAM را در KNL لیست میکند. توجه داشته باشید که این فیلتر هنگام انتخاب اشیاء اعمال میشود نه هنگام چاپ خروجی آنها؛ برای مثال گره NUMA شماره ۳ از نوع MCDRAM به صورت 7 (گره NUMA شماره ۷) نمایش داده میشود نه ۳.
اگر یک زیرنوع دستگاه سیستمعامل مانند gpu به جای osdev داده شود، تنها دستگاههای سیستمعامل از آن زیرنوع برگردانده میشوند.
مقادیر ویژهای مانند cpukind و memorytier را میتوان برای برگرداندن فهرست نمایههای نوع پردازنده یا رده حافظه منطبق بر موقعیت ورودی به کار برد.
در صورت ترکیب با --object-output، نمایههای اشیاء با نوع آنها پیشوند میخورند (مثلاً Core:0 به جای 0).
- -H --hierarchical <type1>.<type2>...
- فهرست
اشیاء از
نوع <type2> که با
مجموعه
پردازنده
اشتراک
دارند را
پیدا کرده و
فهرستی از
نمایههای
سلسلهمراتبی
آنها را
نسبت به <type1>،
<type2> و غیره با
فاصله
گزارش
میدهد.
برای
نمونه، اگر
package.core داده
شود، در
صورتی که
ورودی شامل
هسته سوم
پکیج دوم و
هسته چهارم
پکیج سوم
باشد،
خروجی به
صورت Package:1.Core:2 Package:2.Core:3
خواهد بود.
تنها باید از انواع اشیاء استاندارد سمت پردازنده استفاده شود.
گرههای NUMA نیز قابل استفاده هستند اما ممکن است در پلتفرمهای با حافظه ناهمگن باعث ایجاد افزونگی در خروجی شوند. برای نمونه، در پلتفرمی با حافظه DRAM و HBM روی یک پکیج، نخستین هسته هم به عنوان هسته اول گره NUMA نخست (DRAM) و هم به عنوان هسته اول گره NUMA دوم (HBM) در نظر گرفته خواهد شد.
- --largest
- فهرست
بزرگترین
اشیائی که
دقیقاً
تمام اشیاء
ورودی را
شامل
میشوند (با
بررسی
مجموعههای
پردازنده
آنها) را
در قالبی
خوانا برای
انسان
گزارش
میدهد.
هیچیک از
این اشیاء
خروجی با
یکدیگر
همپوشانی
ندارند و
مجموع
آنها
دقیقاً
معادل
ورودی است.
هیچ شیء
بزرگتری
در ورودی
قرار ندارد.
این با --intersect متفاوت است، چرا که در آنجا اشیاء گزارششده ممکن است الزاماً به صورت کامل درون ورودی قرار نگرفته باشند.
- --local-memory
- فهرست
گرههای NUMA
که نسبت به
اشیاء
ورودی محلی
(local) هستند را
گزارش
میدهد.
این گزینه مشابه -I numa است اما روش انتخاب گرهها متفاوت است: انتخاب انجامشده توسط --local-memory میتواند با دقت توسط --local-memory-flags پیکربندی شود، در حالی که -I numa تنها تمام گرههایی را که به نحوی به هر یک از اشیاء ورودی محلی هستند انتخاب میکند.
در صورت ترکیب با --object-output، نمایههای اشیاء با نوع آنها پیشوندگذاری میشوند (مثلاً NUMANode:0 به جای 0).
- --local-memory-flags
- تغییر
فلگهای
مورد
استفاده
برای
انتخاب
گرههای NUMA
محلی.
فلگها
میتوانند
به صورت
مقادیر
عددی یا
فهرستی از
نامها که
با کاما جدا
شدهاند به
hwloc_get_local_numanode_objs()
ارسال شوند.
این نامها
تا زمانی که
با یک فلگ
منطبق شوند
میتوانند
زیررشتهای
از نامهای
واقعی
باشند.
مقدار
پیشفرض 0xb
(یا smaller,larger,intersects)
است که به
این معنی
است که
گرههای NUMA
در صورتی
نمایش داده
میشوند که
محلیسازی
آنها
محلیسازی
شیء
دادهشده
را شامل
شود، درون
آن قرار
گیرد یا با
آن اشتراک
داشته باشد.
این گزینه به طور خودکار --local-memory را فعال میکند.
- --best-memattr <name>
- فهرست کردن
گرههای
حافظه محلی
را با --local-memory
فعال
میکند،
اما فقط
گرههای
محلی را
نمایش
میدهد که
بهترین
مقدار را
برای ویژگی
حافظه
مشخصشده
توسط <name> (یا
به عنوان یک
نمایه)
داشته
باشند.
اگر مقادیر ویژگی حافظه به آغازگر (initiator) بستگی داشته باشد، اشیاء ورودی hwloc-calc به عنوان آغازگر استفاده میشوند.
نامهای ویژگی استاندارد عبارتند از Capacity، Locality، Bandwidth و Latency. تمام ویژگیهای موجود در توپولوژی جاری را میتوان با دستور زیر فهرست کرد:
$ lstopo --memattrsدر صورت ترکیب با --object-output، نمایه شیء با نوع آن پیشوند میخورد (مثلاً NUMANode:0 به جای 0).
<name> میتواند دارای پسوندهایی از فلگها برای تنظیم دقیق انتخاب بهترین گرهها باشد، برای نمونه bandwidth,strict,default.
گزینه default به این معنی است که اگر هیچ بهترین گرهای یافت نشد، گرههای پیشفرض گزارش شوند (نگاه کنید به --default-nodes). اگر نه بهترین گره و نه گره پیشفرض پیدا نشد، تمامی گرههای محلی گزارش میشوند.
گزینه strict به این معنی است که گرهها تنها در صورتی انتخاب میشوند که کارایی آنها برای تمامی پردازندههای ورودی بهترین باشد. روی یک ماشین دو سوکته با حافظه HBM در هر سوکت، هر دو HBM برای سوکت محلی خود بهترین هستند، اما برای سوکت دوردست اینگونه نیستند. بنابراین هر دو HBM به صورت پیشفرض برای کل ماشین نیز بهترین در نظر گرفته میشوند، اما در صورت استفاده از strict هیچکدام انتخاب نمیشوند.
گزینههای مجموعهها و اشیاء ورودی / خروجی (INPUT / OUTPUT SET AND OBJECT OPTIONS)
این گزینهها نحوه تجزیه اشیاء و مجموعههای پردازنده/گره در ورودی و قالببندی آنها در خروجی را پیکربندی میکنند.
تمام این گزینهها باید پس از گزینههای توپولوژی بالا آورده شوند.
- -p --physical
- استفاده از نمایههای فیزیکی/سیستمعامل به جای نمایههای منطقی هم برای ورودی و هم برای خروجی.
- -l --logical
- استفاده از نمایههای منطقی به جای نمایههای فیزیکی/سیستمعامل برای ورودی و خروجی (پیشفرض).
- --pi --physical-input
- استفاده از نمایههای فیزیکی/سیستمعامل به جای نمایههای منطقی برای ورودی.
- --li --logical-input
- استفاده از نمایههای منطقی به جای نمایههای فیزیکی/سیستمعامل برای ورودی (پیشفرض).
- --po --physical-output
- استفاده از نمایههای فیزیکی/سیستمعامل به جای نمایههای منطقی برای خروجی.
- --lo --logical-output
- استفاده از نمایههای منطقی به جای نمایههای فیزیکی/سیستمعامل برای خروجی (پیشفرض، به جز cpusets که همیشه فیزیکی هستند).
- -n --nodeset
- تفسیر هر دو مجموعه ورودی و خروجی به عنوان nodeset به جای مجموعههای پردازنده (CPU sets). برای جزئیات به --nodeset-output و --nodeset-input در زیر مراجعه کنید.
- --no --nodeset-output
- گزارش مجموعههای گره (nodeset) به جای مجموعههای پردازنده. هنگامی که محلیسازی حافظه اهمیت دارد این خروجی دقیقتر از خروجی پیشفرض مجموعه پردازنده است، چرا که گرههای NUMA بدون پردازنده و همچنین گرههای NUMA که برای چند پردازنده محلی هستند را به درستی توصیف میکند.
- --ni --nodeset-input
- تفسیر مجموعههای ورودی به عنوان nodeset به جای مجموعه پردازندهها.
گزینههای قالببندی (FORMATTING OPTIONS)
تمام این گزینهها باید پس از گزینههای توپولوژی بالا آورده شوند.
- --oo --object-output
- هنگام گزارش نمایههای اشیاء (برای نمونه با -I یا --local-memory)، این گزینه پیشوند نوع را به نمایهها اضافه میکند (مانند Core:0 به جای 0).
- --sep <sep>
- تغییر جداکننده فیلدها در خروجی. به صورت پیشفرض، از فاصله برای جداسازی اشیاء خروجی استفاده میشود (برای نمونه وقتی --hierarchical یا --largest داده شده است) در حالی که از کاما برای جداسازی نمایهها استفاده میگردد (مثلاً زمانی که --intersect مشخص شده است).
- --single
- تکعضوی کردن خروجی به یک پردازنده واحد.
- --cpuset-output-format <hwloc|list|taskset|systemd-dbus-api> --cof <hwloc|list|taskset|systemd-dbus-api>
- تغییر قالب
رشتههای
بیتمپ
نمایشدادهشده
(مجموعه
پردازنده
یا nodeset). به
صورت
پیشفرض،
از قالب
اختصاصی hwloc
استفاده
میشود. اگر
list داده
شود، خروجی
به صورت
اعدادی
مجزا یا
بازههایی
جداشده با
کاما خواهد
بود، مانند
2,4-5,8. اگر taskset
داده شود،
خروجی با
برنامه taskset
سازگار
خواهد بود
(جایگزین
گزینه
پیشین --taskset).
اگر systemd-dbus-api
داده شود،
خروجی با
رابط D-Bus
نرمافزار
systemd سازگار
خواهد بود،
مانند "ay 0x0002 0x78 0x04"
برای فهرست
مجموعه
پردازنده
"3-6,10".
برای راحتی بیشتر، --nodeset-output-format (یا --nof) رفتار یکسانی دارد اما گزینه --nodeset-output را نیز فعال میکند.
این گزینه هیچ تاثیری بر قالب رشتههای مجموعه پردازنده ورودی ندارد؛ به --cpuset-input-format مراجعه کنید.
- --cpuset-input-format <hwloc|list|taskset> --cif <hwloc|list|taskset>
- تغییر قالب
رشتههای
بیتمپ
ورودی
(مجموعه
پردازنده
یا nodeset). به طور
پیشفرض،
این ابزار
تلاش
میکند تا
قالب را به
طور خودکار
میان
فرمتهای
hwloc، list یا taskset
تشخیص دهد.
این گزینه
برای
جلوگیری از
ابهام،
قالب تجزیه
را اجبار
میکند؛
برای نمونه
زمانی که
"1,3,5" ممکن
است به
عنوان یک cpuset
در hwloc به صورت
"0x1,0x00000003,0x00000005" یا به
عنوان یک
فهرست به
صورت "1-1,3-3,5-5"
تفسیر شود.
این گزینه هیچ تاثیری بر قالب رشتههای خروجی مجموعه پردازنده ندارد؛ به --cpuset-output-format مراجعه کنید.
- -q --quiet
- پنهانسازی پیامهای خطای غیربحرانی. این خطاها اغلب شامل موقعیتهایی هستند که به اشیاء ناموجود اشاره میکنند.
- -v --verbose
- نمایش خروجی با جزئیات کامل.
- --version
- نمایش نسخه و خروج.
- -h --help
- نمایش پیام راهنما و خروج.
توضیحات (DESCRIPTION)
ابزار hwloc-calc رشتههای ماسک پردازنده و اشیاء توپولوژی را تولید و پردازش میکند. هر دو بخش ورودی و خروجی میتوانند شامل اشیاء (با نمایههای فیزیکی یا منطقی)، فهرست پردازندهها (با نمایههای فیزیکی یا منطقی)، یا رشتههای ماسک پردازنده (که همواره با نمایه فیزیکی هستند) باشند. نحوه تعیین موقعیت ورودی در hwloc(7) توصیف شده است.
اگر اشیاء یا رشتههای ماسک پردازنده در خط فرمان مشخص شوند، با یکدیگر ترکیب شده و یک خروجی واحد چاپ میشود. در صورتی که هیچ شیء یا ماسک پردازندهای در خط فرمان داده نشود، برنامه ورودی استاندارد را میخواند. این برنامه اشیاء چندگانه یا رشتههای ماسک پردازندهای را که در یک خط از ورودی استاندارد با فاصله از هم جدا شدهاند ترکیب میکند. خطوط ورودی مختلف به طور جداگانه پردازش خواهند شد.
آرگومانها و گزینههای خط فرمان به ترتیب پردازش میشوند. ابتدا باید گزینههای پیکربندی توپولوژی مشخص شوند. سپس برای نمونه، تغییر نوع نمایههای ورودی با --li یا تغییر توپولوژی ورودی با -i تنها بر پردازش آرگومانهای بعدی تأثیر میگذارد.
نکته: اکیداً توصیه میشود پیش از مطالعه این صفحه، صفحه مروری hwloc(7) را مطالعه کنید. بیشتر مفاهیم شرح دادهشده در hwloc(7) مستقیماً در ابزار hwloc-calc کاربرد دارند.
مثالها (EXAMPLES)
عملکرد hwloc-calc با چند مثال به بهترین شکل شرح داده میشود.
برای نمایش ماسک پردازنده (فیزیکی) متناظر با پکیج دوم:
$ hwloc-calc package:1
0x000000f0
برای نمایش ماسک پردازنده (فیزیکی) متناظر با پکیج سوم، به استثنای پردازندههای منطقی با شماره زوج:
$ hwloc-calc package:2 ~PU:even
0x00000c00
برای نمایش ماسک پردازنده (فیزیکی) کل توپولوژی به جز پکیج سوم:
$ hwloc-calc all ~package:3
0x0000f0ff
برای ترکیب دو ماسک پردازنده (فیزیکی):
$ hwloc-calc 0x0000ffff 0xff000000
0xff00ffff
مثالهای فهرست کردن یا شمارش اشیاء (Examples of listing or counting objects)
برای نمایش فهرست شمارههای منطقی پردازندههای موجود در پکیج دوم:
$ hwloc-calc --intersect PU package:1
4,5,6,7
برای مقید کردن ریسمانهای GNU OpenMP به طور منطقی در کل ماشین، باید از خروجی شمارههای فیزیکی استفاده کنیم:
$ export GOMP_CPU_AFFINITY=`hwloc-calc --physical-output --intersect PU all`
$ echo $GOMP_CPU_AFFINITY
0,4,1,5,2,6,3,7
برای نمایش فهرست گرههای NUMA، بر اساس نمایههای فیزیکی، که با یک ماسک پردازنده (فیزیکی) دادهشده همپوشانی دارند:
$ hwloc-calc --physical --intersect NUMAnode 0xf0f0f0f0
0,2
برای یافتن تعداد هستهها در نوع دوم پردازنده (این هستهها احتمالاً کارایی بالاتر و مصرف توان بیشتری نسبت به هستههای نوع اول دارند):
$ hwloc-calc --cpukind 1 -N core all
4
برای تبدیل یک ماسک پردازنده به خروجی خوانا برای انسان، گزینه -H میتواند برای تولید فهرستی از موقعیتها با جداکننده فاصله استفاده شود:
$ echo 0x000000f0 | hwloc-calc -q -H package.core
Package:1.Core1 Package:1.Core:1 Package:1.Core:2 Package:1.Core:3
برای استفاده از کاراکتری دیگر (مثلاً کاما) به جای فاصله در خروجی، از گزینه --sep استفاده کنید:
$ echo 0x000000f0 | hwloc-calc -q -H package.core --sep ,
Package:1.Core1,Package:1.Core:1,Package:1.Core:2,Package:1.Core:3
برای ادغام مجموعهای از هستهها در بزرگترین اشیاء روی ماشینی با ۲ گره، ۲ پکیج و ۲ هسته:
$ hwloc-calc core:0 --largest
Core:0
$ hwloc-calc core:0-1 --largest
Package:0
$ hwloc-calc core:4-7 --largest
L3Cache:1
$ hwloc-calc core:2-6 --largest
Package:1 Package:2 Core:6
$ hwloc-calc pack:2 --largest
Package:2
$ hwloc-calc package:2-3 --largest
L3Cache:1
برای به دست آوردن مجموعه نخستین ریسمانهای تمامی هستهها:
$ hwloc-calc core:all.pu:0
0xffff0000
$ hwloc-calc --no-smt all -I pu
0,2,4,6,8,10,12,14
برای دریافت تعداد انواع پردازنده در یک پکیج:
$ hwloc-calc -N cpukind package:0
2
مثالهای فهرست کردن یا شمارش گرههای NUMA (Examples of listing or counting NUMA nodes)
برای نمایش فهرست گرههای NUMA، بر اساس نمایههای فیزیکی، که محلیسازی آنها دقیقاً برابر با یک پکیج است:
$ hwloc-calc --local-memory-flags 0 --physical-output pack:1
4,7
برای نمایش فهرست گرههای NUMA پیشفرض، بر اساس نمایههای منطقی، در کل ماشین:
$ hwloc-calc --default-nodes -I numa all
0,2,4,6
برای نمایش گره(های) NUMA با بیشترین ظرفیت حافظه، بر اساس نمایههای فیزیکی، که محلیسازی آنها دقیقاً برابر با یک پکیج است:
$ hwloc-calc --local-memory-flags 0 --best-memattr capacity --physical-output
pack:1
4
برای یافتن تعداد گرههای NUMA با زیرنوع "HBM":
$ hwloc-calc -N "numa[hbm]" all
4
برای یافتن تعداد گرههای NUMA در رده حافظه ۱ (گرههای DRAM روی سروری با حافظههای HBM و DRAM):
$ hwloc-calc -N "numa[tier=1]" all
4
برای یافتن گره NUMA با زیرنوع MCDRAM (در KNL) در نزدیکی یک واحد پردازش (PU):
$ hwloc-calc -I "numa[mcdram]" --oo pu:157
NUMANode:1
برای یافتن رده حافظه یک گره NUMA:
$ hwloc-calc -I memorytier node:2
1
مثالها با نمایههای فیزیکی و منطقی (Examples with physical and logical indexes)
تبدیل نمایههای منطقی شیء (پیشفرض) از/به نمایههای فیزیکی/سیستمعامل میتواند با --intersect همراه با --physical-output (تبدیل منطقی به فیزیکی) یا --physical-input (تبدیل فیزیکی به منطقی) انجام شود:
$ hwloc-calc --physical-output PU:2 --intersect PU
3
$ hwloc-calc --physical-input PU:3 --intersect PU
2
این روش میتواند برای تبدیل نمایههای اشیاء حافظه نیز استفاده شود، حتی با حافظه ناهمگن:
$ hwloc-calc --physical-output node:2 --intersect node
3
$ hwloc-calc --physical-input node:3 --intersect node
2
برای ترکیب هر دو نمایههای فیزیکی و منطقی در ورودی:
$ hwloc-calc PU:2 --physical-input PU:3
0x0000000c
مثالها با دستگاههای ورودی/خروجی (Examples with I/O devices)
برای نمایش مجموعه پردازندههای نزدیک به رابط شبکه eth0:
$ hwloc-calc os=eth0
0x00005555
برای نمایش نمایههای پکیجهای نزدیک به دستگاه PCI با شناسه گذرگاه 0000:01:02.0:
$ hwloc-calc pci=0000:01:02.0 --intersect Package
1
دستگاههای سیستمعامل همچنین میتوانند بر اساس زیرنوع فیلتر شوند. در این مثال، ۸ دستگاه سیستمعامل در سیستم وجود دارد که ۴ تای آنها نزدیک گره NUMA شماره ۱ هستند و فقط ۲ تای آنها پردازنده کمکی (CoProcessor) هستند:
$ utils/hwloc/hwloc-calc -I osdev all
0,1,2,3,4,5,6,7,8
$ utils/hwloc/hwloc-calc -I osdev node:1
5,6,7,8
$ utils/hwloc/hwloc-calc -I coproc node:1
7,8
مثالها با ابزارهای دیگر (Examples with other tools)
برای اینکه GNU OpenMP دقیقاً از یک ریسمان به ازای هر هسته و به ترتیب منطقی هستهها استفاده کند:
$ export OMP_NUM_THREADS=`hwloc-calc --number-of core all`
$ echo $OMP_NUM_THREADS
4
$ export GOMP_CPU_AFFINITY=`hwloc-calc --physical-output --intersect PU
--no-smt all`
$ echo $GOMP_CPU_AFFINITY
0,2,1,3
برای استخراج بیتماسک در قالبی که توسط زیرسیستم resctrl در لینوکس پذیرفته شود (جهت پیکربندی پارتیشنبندی کش و غیره)، یک عبارت باقاعده sed را روی خروجی hwloc-calc اعمال کنید:
$ hwloc-calc pack:all.core:7-9.pu:0
0x00000380,,0x00000380 <this format cannot be given to resctrl>
$ hwloc-calc pack:all.core:7-9.pu:0 | sed -e 's/0x//g' -e 's/,,/,0,/g' -e
's/,,/,0,/g'
00000380,0,00000380
# echo 00000380,0,00000380 > /sys/fs/resctrl/test/cpus
# cat /sys/fs/resctrl/test/cpus
00000000,00000380,00000000,00000380 <the modified bitmask was corrected
parsed by resctrl>
مثال استفاده از قالب خروجیهای cpuset و nodeset در systemd-dbus-api (Example of use of the systemd-dbus-api cpuset and nodeset outputs format)
ابزار hwloc-calc امکان تولید رشتههای بسیار پیچیده AllowedCPUs و AllowedMemoryNodes را که رابط D-Bus نرمافزار systemd انتظار دارد، از سایر نمایشهای hwloc فراهم میکند. این امر بهویژه زمانی مفید است که دستور systemd-run (که فهرستهای عددی را متوجه میشود) قابل استفاده نباشد.
ابتدا، یک slice در systemd ایجاد کنید:
$ busctl call org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager StartUnit ss my_slice.slice fail
سپس مجموعههای پردازنده و گره این slice را پیکربندی کرده و از hwloc-calc برای ترجمه ساختار نحوی استفاده نمایید:
$ busctl call org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager SetUnitProperties 'sba(sv)' my_slice.slice 1 1 AllowedCPUs $(hwloc-calc pu:0 pu:31 pu:32 pu:63 pu:64 pu:77 --cpuset-output-format systemd-dbus-api) $ busctl call org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager SetUnitProperties 'sba(sv)' my_slice.slice 1 1 AllowedMemoryNodes $(hwloc-calc pu:0 pu:31 pu:32 pu:63 pu:64 pu:77 --nodeset-output-format systemd-dbus-api)
در نهایت، پردازش جاری را به slice اضافه کنید:
$ busctl call org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager StartTransientUnit 'ssa(sv)a(sa(sv))' my_scope.scope fail 3 Delegate b 1 PIDs au 1 $$ Slice s my_slice.slice 0
اطلاعات بیشتر در صفحه راهنمای org.freedesktop.systemd1(5) موجود است.
مقدار بازگشتی (RETURN VALUE)
در صورت اجرای موفقیتآمیز، hwloc-calc رشته ماسک پردازنده (فیزیکی)، فهرست اشیاء (فیزیکی یا منطقی)، یا فهرست شمارههای اشیاء (فیزیکی یا منطقی) را نمایش میدهد. مقدار بازگشتی 0 است.
در صورت بروز هرگونه خطا مانند (اما نه محدود به) عدم موفقیت در تجزیه خط فرمان، hwloc-calc مقدار غیرصفر بازمیگرداند.
همچنین ببینید (SEE ALSO)
| June 8, 2026 | 2.14.0 |