.\" -*- nroff -*- .\" SPDX-License-Identifier: BSD-3-Clause .\" Copyright © 2010-2025 Inria. All rights reserved. .\" Copyright © 2009-2020 Cisco Systems, Inc. All rights reserved. .\" Copyright © 2024 CNRS .\" See COPYING in top-level directory. .TH HWLOC-CALC "1" "Jun 08, 2026" "2.14.0" "hwloc" .SH "نام (NAME)" hwloc-calc \- محاسبات و پردازش ماسک‌های پردازنده و توپولوژی سخت‌افزار . .\" ************************** .\" Synopsis Section .\" ************************** .SH "خلاصه دستور (SYNOPSIS)" . .B hwloc-calc [\fIگزینه‌های توپولوژی\fR] [\fIگزینه‌ها\fR] \fI<موقعیت۱> [<موقعیت۲> [...] ]\fR . .PP توجه داشته باشید که .BR hwloc (7) توضیحات مفصلی درباره سامانه hwloc و قالب‌های معتبر ارائه می‌دهد؛ پیشنهاد می‌شود پیش از خواندن این صفحه راهنما، آن را مطالعه فرمایید. . .\" ************************** .\" Options Section .\" ************************** .SH "گزینه‌های توپولوژی (TOPOLOGY OPTIONS)" . تمام گزینه‌های توپولوژی باید پیش از سایر گزینه‌ها مشخص شوند. . .TP 10 \fB\-\-no\-smt\fR, \fB\-\-no\-smt=\fR تنها نخستین واحد پردازش (PU) به ازای هر هسته در موقعیت‌های ورودی حفظ می‌شود. در صورت مشخص شدن .IR ، به جای آن N-امین واحد (در صورت وجود) نگه‌داشته می‌شود. واحدهای PU در طول این فیلترسازی بر اساس نمایه فیزیکی مرتب می‌شوند. توجه داشته باشید که .IR "این گزینه پس از جستجوی موقعیت‌ها اعمال می‌شود" . بنابراین .B \-\-no\-smt pu:2-5 ابتدا واحدهای پردازش شماره ۲ تا ۵ را در ماشین انتخاب کرده و سپس از هر هسته یکی را نگه می‌دارد. برای دریافت واحدهای شماره ۲ تا ۵ پس از فیلتر کردن یکی به ازای هر هسته، باید دستورات را ترکیب کنید: hwloc-calc --restrict $(hwloc-calc --no-smt all) pu:2-5 .TP \fB\-\-cpukind\fR , \fB\-\-cpukind\fR = تنها واحدهای پردازشی (PU) که نوع پردازنده (CPU kind) آن‌ها مطابقت دارد نگه‌داشته می‌شوند. نوع پردازنده می‌تواند به صورت یک نمایه عددی تعیین شود، یا از طریق نام و مقدار ویژگی info برای انتخاب انواع منطبق استفاده گردد. هنگامی که با نمایه مشخص می‌شود، متناظر با رتبه‌بندی انواع پردازنده در hwloc است که هسته‌های کم‌مصرف و بهینه از نظر انرژی را در ابتدا، و هسته‌های با کارایی بالا و پرمصرف را در انتها قرار می‌دهد. فهرست کامل انواع پردازنده را می‌توان با .B lstopo \-\-cpukinds مشاهده کرد. توجه داشته باشید که این گزینه پس از جستجوی موقعیت‌ها اعمال می‌شود. بنابراین .B \-\-cpukind 0 core:1 در صورتی که هسته دوم ماشین از نوع ۰ باشد آن را برمی‌گرداند و در غیر این صورت هیچ‌چیز بازنمی‌گرداند. برای دریافت هسته دوم در میان هسته‌هایی که از نوع ۰ هستند، باید دستورات را ترکیب کنید: hwloc-calc --restrict $(hwloc-calc --cpukind 0 all) core:1 .TP \fB\-\-default\-nodes\fR فقط گره‌های NUMA که به عنوان گره‌های پیش‌فرض در پلتفرم‌های حافظه ناهمگن شناخته می‌شوند را نگه می‌دارد. این معمولاً شامل گره‌های حافظه DRAM (یا گره‌های همان رده حافظه) است و گره‌های دارای مشخصات خاص (مانند HBM، NVM، CXL و غیره) را شامل نمی‌شود. این گزینه برای تفکیک توپولوژی بر اساس دامنه NUMA هنگام مقیدسازی یک وظیفه به ازای هر دامنه کاربرد دارد، حتی اگر برخی دامنه‌های NUMA دارای محلی‌سازی (locality) یکسانی باشند (برای نمونه یک گره DRAM و یک گره HBM روی هر سوکت). برای جزئیات بیشتر به ()hwloc_topology_get_default_nodeset مراجعه کنید. .TP \fB\-\-restrict\fR توپولوژی را به مجموعه پردازنده‌های (cpuset) مشخص‌شده محدود می‌کند. این کار برخی واحدهای PU و والدینی که دیگر فرزندی ندارند را حذف می‌کند. این گزینه هنگام ترکیب دستورات جهت فیلتر کردن برخی اشیاء پیش از انتخاب از میان آن‌ها بسیار مفید است. دقت داشته باشید که محدود کردن واحدهای PU در یک توپولوژی ممکن است نمایه‌های منطقی بسیاری از اشیاء، از جمله گره‌های NUMA را تغییر دهد. .TP \fB\-\-restrict\fR nodeset= توپولوژی را به مجموعه گره‌های (nodeset) داده‌شده محدود می‌کند (مگر آنکه .B \-\-restrict\-flags رفتار متفاوتی را مشخص کرده باشد). این کار برخی گره‌های NUMA و والدین بدون فرزند آن‌ها را حذف می‌کند. دقت داشته باشید که محدود کردن گره‌های NUMA در یک توپولوژی ممکن است نمایه‌های منطقی بسیاری از اشیاء، از جمله واحدهای PU را تغییر دهد. .TP \fB\-\-restrict\-flags\fR اعمال فلگ‌ها هنگام محدودسازی توپولوژی. فلگ‌ها می‌توانند به صورت مقادیر عددی یا فهرستی از نام‌ها که با کاما از هم جدا شده‌اند به .I hwloc_topology_restrict() ارسال شوند. این نام‌ها تا زمانی که به یک مورد یکتا اشاره کنند می‌توانند زیررشته‌ای از نام‌های اصلی فلگ‌ها باشند، برای نمونه .BR bynodeset,memless . مقدار پیش‌فرض .B 0 (یا .BR none ) است. .TP \fB\-\-disallowed\fR شامل کردن اشیائی که به دلیل محدودیت‌های مدیریتی مجاز نیستند. .TP \fB\-i\fR , \fB\-\-input\fR خواندن توپولوژی از .I به جای کشف توپولوژی ماشین محلی. اگر .I یک فایل باشد، می‌تواند یک فایل XML باشد که قبلاً توسط برنامه‌های hwloc استخراج شده است. اگر .I برابر با "\-" باشد، ورودی استاندارد به عنوان فایل XML استفاده می‌شود. در لینوکس، .I می‌تواند دایرکتوری حاوی فایل‌های توپولوژی باشد که از ماشین دیگری با دستور hwloc-gather-topology جمع‌آوری شده است. در معماری x86، .I می‌تواند دایرکتوری حاوی دامپ cpuid جمع‌آوری‌شده با hwloc-gather-cpuid باشد. در صورت در دسترس بودن برنامه archivemount، .I می‌تواند یک فایل فشرده tarball حاوی چنین فایل‌های توپولوژی لینوکس یا x86 باشد. .TP \fB\-i\fR , \fB\-\-input\fR شبیه‌سازی یک سلسله‌مراتب ساختگی (به جای کشف توپولوژی روی ماشین محلی). اگر .I برابر با "node:2 pu:3" باشد، توپولوژی شامل دو گره NUMA خواهد بود که در هر یک ۳ واحد پردازشی وجود دارد. رشته .I باید با تعداد PUها پایان یابد. .TP \fB\-\-if\fR , \fB\-\-input\-format\fR اجبار قالب ورودی به فرمت مشخص‌شده از میان .BR xml ، .BR fsroot ، .B cpuid و .BR synthetic . . .SH "گزینه‌های تبدیل خروجی (OUTPUT CONVERSION OPTIONS)" . به صورت پیش‌فرض، خروجی یک مجموعه پردازنده (یا nodeset) است. این گزینه‌ها این مجموعه را به اشیاء تبدیل کرده، آن‌ها را شمارش می‌کنند و غیره. تمام این گزینه‌ها باید پس از گزینه‌های توپولوژی بالا آورده شوند. . .TP \fB\-N \-\-number\-of \fR تعداد اشیاء از نوع یا عمق داده‌شده که با مجموعه پردازنده اشتراک دارند را گزارش می‌دهد. این گزینه برای یافتن تعداد هسته‌ها، گره‌های NUMA یا واحدهای PU موجود در یک ماشین بسیار کارآمد است. .I می‌تواند حاوی فیلتری برای انتخاب اشیاء خاص از آن نوع باشد. برای نمونه .B \-N "numa[hbm]" گره‌های NUMA با زیرنوع "HBM" را شمارش می‌کند، در حالی که .B \-N "numa[mcdram]" فقط گره‌های NUMA از نوع MCDRAM را در پردازنده‌های KNL می‌شمارد. اگر یک زیرنوع دستگاه سیستم‌عامل مانند .I gpu به جای .I osdev مشخص شود، فقط دستگاه‌های سیستم‌عامل از آن زیرنوع شمارش خواهند شد. مقادیر ویژه‌ای مانند .I cpukind و .I memorytier را می‌توان برای دریافت تعداد انواع پردازنده یا رده‌های حافظه منطبق با موقعیت ورودی استفاده کرد. .TP \fB\-I \-\-intersect \fR فهرست اشیاء از نوع یا عمق داده‌شده که با مجموعه پردازنده اشتراک دارند را پیدا کرده و فهرستی از نمایه‌های آن‌ها را با کاما به جای رشته ماسک پردازنده گزارش می‌دهد. از این گزینه می‌توان برای تعیین فهرست اشیاء بالاتر یا پایین‌تر از اشیاء ورودی استفاده کرد. هنگام ترکیب با .BR \-\-physical ، فهرست خروجی برای ارسال به ابزارهای خارجی مانند taskset یا numactl .RB ( \-\-physcpubind یا .BR \-\-membind ) بسیار مناسب است. این با .B \-\-largest متفاوت است زیرا گزینه اخیر ایجاب می‌کند که تمام اشیاء گزارش‌شده کاملاً درون اشیاء ورودی قرار داشته باشند. .I می‌تواند حاوی فیلتری برای انتخاب اشیاء خاص باشد. برای نمونه .B \-N "numa[hbm]" گره‌های NUMA با زیرنوع "HBM" را فهرست می‌کند، در حالی که .B \-N "numa[mcdram]" تنها گره‌های NUMA از نوع MCDRAM را در KNL لیست می‌کند. توجه داشته باشید که این فیلتر هنگام انتخاب اشیاء اعمال می‌شود نه هنگام چاپ خروجی آن‌ها؛ برای مثال گره NUMA شماره ۳ از نوع MCDRAM به صورت 7 (گره NUMA شماره ۷) نمایش داده می‌شود نه ۳. اگر یک زیرنوع دستگاه سیستم‌عامل مانند .I gpu به جای .I osdev داده شود، تنها دستگاه‌های سیستم‌عامل از آن زیرنوع برگردانده می‌شوند. مقادیر ویژه‌ای مانند .I cpukind و .I memorytier را می‌توان برای برگرداندن فهرست نمایه‌های نوع پردازنده یا رده حافظه منطبق بر موقعیت ورودی به کار برد. در صورت ترکیب با .BR \-\-object\-output ، نمایه‌های اشیاء با نوع آن‌ها پیشوند می‌خورند (مثلاً .I Core:0 به جای .IR 0 ). .TP \fB\-H \-\-hierarchical ....\fR فهرست اشیاء از نوع که با مجموعه پردازنده اشتراک دارند را پیدا کرده و فهرستی از نمایه‌های سلسله‌مراتبی آن‌ها را نسبت به ، و غیره با فاصله گزارش می‌دهد. برای نمونه، اگر .I package.core داده شود، در صورتی که ورودی شامل هسته سوم پکیج دوم و هسته چهارم پکیج سوم باشد، خروجی به صورت .I Package:1.Core:2 Package:2.Core:3 خواهد بود. تنها باید از انواع اشیاء استاندارد سمت پردازنده استفاده شود. گره‌های NUMA نیز قابل استفاده هستند اما ممکن است در پلتفرم‌های با حافظه ناهمگن باعث ایجاد افزونگی در خروجی شوند. برای نمونه، در پلتفرمی با حافظه DRAM و HBM روی یک پکیج، نخستین هسته هم به عنوان هسته اول گره NUMA نخست (DRAM) و هم به عنوان هسته اول گره NUMA دوم (HBM) در نظر گرفته خواهد شد. .TP \fB\-\-largest\fR فهرست بزرگ‌ترین اشیائی که دقیقاً تمام اشیاء ورودی را شامل می‌شوند (با بررسی مجموعه‌های پردازنده آن‌ها) را در قالبی خوانا برای انسان گزارش می‌دهد. هیچ‌یک از این اشیاء خروجی با یکدیگر هم‌پوشانی ندارند و مجموع آن‌ها دقیقاً معادل ورودی است. هیچ شیء بزرگ‌تری در ورودی قرار ندارد. این با .B \-\-intersect متفاوت است، چرا که در آنجا اشیاء گزارش‌شده ممکن است الزاماً به صورت کامل درون ورودی قرار نگرفته باشند. .TP \fB\-\-local\-memory\fR فهرست گره‌های NUMA که نسبت به اشیاء ورودی محلی (local) هستند را گزارش می‌دهد. این گزینه مشابه .B \-I numa است اما روش انتخاب گره‌ها متفاوت است: انتخاب انجام‌شده توسط .B \-\-local\-memory می‌تواند با دقت توسط .B \-\-local\-memory\-flags پیکربندی شود، در حالی که .B \-I numa تنها تمام گره‌هایی را که به نحوی به هر یک از اشیاء ورودی محلی هستند انتخاب می‌کند. در صورت ترکیب با .BR \-\-object\-output ، نمایه‌های اشیاء با نوع آن‌ها پیشوندگذاری می‌شوند (مثلاً .I NUMANode:0 به جای .IR 0 ). .TP \fB\-\-local\-memory\-flags\fR تغییر فلگ‌های مورد استفاده برای انتخاب گره‌های NUMA محلی. فلگ‌ها می‌توانند به صورت مقادیر عددی یا فهرستی از نام‌ها که با کاما جدا شده‌اند به .I hwloc_get_local_numanode_objs() ارسال شوند. این نام‌ها تا زمانی که با یک فلگ منطبق شوند می‌توانند زیررشته‌ای از نام‌های واقعی باشند. مقدار پیش‌فرض .B 0xb (یا .BR smaller,larger,intersects ) است که به این معنی است که گره‌های NUMA در صورتی نمایش داده می‌شوند که محلی‌سازی آن‌ها محلی‌سازی شیء داده‌شده را شامل شود، درون آن قرار گیرد یا با آن اشتراک داشته باشد. این گزینه به طور خودکار .B \-\-local\-memory را فعال می‌کند. .TP \fB\-\-best\-memattr\fR فهرست کردن گره‌های حافظه محلی را با .B \-\-local\-memory فعال می‌کند، اما فقط گره‌های محلی را نمایش می‌دهد که بهترین مقدار را برای ویژگی حافظه مشخص‌شده توسط .I (یا به عنوان یک نمایه) داشته باشند. اگر مقادیر ویژگی حافظه به آغازگر (initiator) بستگی داشته باشد، اشیاء ورودی hwloc-calc به عنوان آغازگر استفاده می‌شوند. نام‌های ویژگی استاندارد عبارتند از .BR Capacity ، .BR Locality ، .B Bandwidth و .BR Latency . تمام ویژگی‌های موجود در توپولوژی جاری را می‌توان با دستور زیر فهرست کرد: $ lstopo --memattrs در صورت ترکیب با .BR \-\-object\-output ، نمایه شیء با نوع آن پیشوند می‌خورد (مثلاً .I NUMANode:0 به جای .IR 0 ). .I می‌تواند دارای پسوندهایی از فلگ‌ها برای تنظیم دقیق انتخاب بهترین گره‌ها باشد، برای نمونه .BR bandwidth,strict,default . گزینه .B default به این معنی است که اگر هیچ بهترین گره‌ای یافت نشد، گره‌های پیش‌فرض گزارش شوند (نگاه کنید به .IR \-\-default\-nodes ). اگر نه بهترین گره و نه گره پیش‌فرض پیدا نشد، تمامی گره‌های محلی گزارش می‌شوند. گزینه .B strict به این معنی است که گره‌ها تنها در صورتی انتخاب می‌شوند که کارایی آن‌ها برای تمامی پردازنده‌های ورودی بهترین باشد. روی یک ماشین دو سوکته با حافظه HBM در هر سوکت، هر دو HBM برای سوکت محلی خود بهترین هستند، اما برای سوکت دوردست این‌گونه نیستند. بنابراین هر دو HBM به صورت پیش‌فرض برای کل ماشین نیز بهترین در نظر گرفته می‌شوند، اما در صورت استفاده از .B strict هیچ‌کدام انتخاب نمی‌شوند. . .SH "گزینه‌های مجموعه‌ها و اشیاء ورودی / خروجی (INPUT / OUTPUT SET AND OBJECT OPTIONS)" . این گزینه‌ها نحوه تجزیه اشیاء و مجموعه‌های پردازنده/گره در ورودی و قالب‌بندی آن‌ها در خروجی را پیکربندی می‌کنند. تمام این گزینه‌ها باید پس از گزینه‌های توپولوژی بالا آورده شوند. . .TP 10 \fB\-p\fR \fB\-\-physical\fR استفاده از نمایه‌های فیزیکی/سیستم‌عامل به جای نمایه‌های منطقی هم برای ورودی و هم برای خروجی. .TP \fB\-l\fR \fB\-\-logical\fR استفاده از نمایه‌های منطقی به جای نمایه‌های فیزیکی/سیستم‌عامل برای ورودی و خروجی (پیش‌فرض). .TP \fB\-\-pi\fR \fB\-\-physical\-input\fR استفاده از نمایه‌های فیزیکی/سیستم‌عامل به جای نمایه‌های منطقی برای ورودی. .TP \fB\-\-li\fR \fB\-\-logical\-input\fR استفاده از نمایه‌های منطقی به جای نمایه‌های فیزیکی/سیستم‌عامل برای ورودی (پیش‌فرض). .TP \fB\-\-po\fR \fB\-\-physical\-output\fR استفاده از نمایه‌های فیزیکی/سیستم‌عامل به جای نمایه‌های منطقی برای خروجی. .TP \fB\-\-lo\fR \fB\-\-logical\-output\fR استفاده از نمایه‌های منطقی به جای نمایه‌های فیزیکی/سیستم‌عامل برای خروجی (پیش‌فرض، به جز cpusets که همیشه فیزیکی هستند). .TP \fB\-n\fR \fB\-\-nodeset\fR تفسیر هر دو مجموعه ورودی و خروجی به عنوان nodeset به جای مجموعه‌های پردازنده (CPU sets). برای جزئیات به .B \-\-nodeset\-output و .B \-\-nodeset\-input در زیر مراجعه کنید. .TP \fB\-\-no\fR \fB\-\-nodeset\-output\fR گزارش مجموعه‌های گره (nodeset) به جای مجموعه‌های پردازنده. هنگامی که محلی‌سازی حافظه اهمیت دارد این خروجی دقیق‌تر از خروجی پیش‌فرض مجموعه پردازنده است، چرا که گره‌های NUMA بدون پردازنده و همچنین گره‌های NUMA که برای چند پردازنده محلی هستند را به درستی توصیف می‌کند. .TP \fB\-\-ni\fR \fB\-\-nodeset\-input\fR تفسیر مجموعه‌های ورودی به عنوان nodeset به جای مجموعه پردازنده‌ها. . .SH "گزینه‌های قالب‌بندی (FORMATTING OPTIONS)" . تمام این گزینه‌ها باید پس از گزینه‌های توپولوژی بالا آورده شوند. . .TP \fB\-\-oo\fR \fB\-\-object\-output\fR هنگام گزارش نمایه‌های اشیاء (برای نمونه با .B \-I یا .BR \-\-local\-memory )، این گزینه پیشوند نوع را به نمایه‌ها اضافه می‌کند (مانند .I Core:0 به جای .IR 0 ). .TP \fB\-\-sep \fR تغییر جداکننده فیلدها در خروجی. به صورت پیش‌فرض، از فاصله برای جداسازی اشیاء خروجی استفاده می‌شود (برای نمونه وقتی .B \-\-hierarchical یا .B \-\-largest داده شده است) در حالی که از کاما برای جداسازی نمایه‌ها استفاده می‌گردد (مثلاً زمانی که .B \-\-intersect مشخص شده است). .TP \fB\-\-single\fR تک‌عضوی کردن خروجی به یک پردازنده واحد. .TP \fB\-\-cpuset\-output\-format\fR \fB\-\-cof\fR تغییر قالب رشته‌های بیت‌مپ نمایش‌داده‌شده (مجموعه پردازنده یا nodeset). به صورت پیش‌فرض، از قالب اختصاصی hwloc استفاده می‌شود. اگر .I list داده شود، خروجی به صورت اعدادی مجزا یا بازه‌هایی جداشده با کاما خواهد بود، مانند 2,4-5,8. اگر .I taskset داده شود، خروجی با برنامه taskset سازگار خواهد بود (جایگزین گزینه پیشین .BR \-\-taskset ). اگر .I systemd-dbus-api داده شود، خروجی با رابط D-Bus نرم‌افزار systemd سازگار خواهد بود، مانند "ay 0x0002 0x78 0x04" برای فهرست مجموعه پردازنده "3-6,10". برای راحتی بیشتر، .B \-\-nodeset\-output\-format (یا .BR \-\-nof ) رفتار یکسانی دارد اما گزینه .B \-\-nodeset\-output را نیز فعال می‌کند. این گزینه هیچ تاثیری بر قالب رشته‌های مجموعه پردازنده ورودی ندارد؛ به .B \-\-cpuset\-input\-format مراجعه کنید. .TP \fB\-\-cpuset\-input\-format\fR \fB\-\-cif\fR تغییر قالب رشته‌های بیت‌مپ ورودی (مجموعه پردازنده یا nodeset). به طور پیش‌فرض، این ابزار تلاش می‌کند تا قالب را به طور خودکار میان فرمت‌های hwloc، list یا taskset تشخیص دهد. این گزینه برای جلوگیری از ابهام، قالب تجزیه را اجبار می‌کند؛ برای نمونه زمانی که "1,3,5" ممکن است به عنوان یک cpuset در hwloc به صورت "0x1,0x00000003,0x00000005" یا به عنوان یک فهرست به صورت "1-1,3-3,5-5" تفسیر شود. این گزینه هیچ تاثیری بر قالب رشته‌های خروجی مجموعه پردازنده ندارد؛ به .B \-\-cpuset\-output\-format مراجعه کنید. .TP \fB\-q\fR \fB\-\-quiet\fR پنهان‌سازی پیام‌های خطای غیربحرانی. این خطاها اغلب شامل موقعیت‌هایی هستند که به اشیاء ناموجود اشاره می‌کنند. .TP \fB\-v\fR \fB\-\-verbose\fR نمایش خروجی با جزئیات کامل. .TP \fB\-\-version\fR نمایش نسخه و خروج. .TP \fB\-h\fR \fB\-\-help\fR نمایش پیام راهنما و خروج. . .\" ************************** .\" Description Section .\" ************************** .SH "توضیحات (DESCRIPTION)" . ابزار hwloc-calc رشته‌های ماسک پردازنده و اشیاء توپولوژی را تولید و پردازش می‌کند. هر دو بخش ورودی و خروجی می‌توانند شامل اشیاء (با نمایه‌های فیزیکی یا منطقی)، فهرست پردازنده‌ها (با نمایه‌های فیزیکی یا منطقی)، یا رشته‌های ماسک پردازنده (که همواره با نمایه فیزیکی هستند) باشند. نحوه تعیین موقعیت ورودی در .BR hwloc (7) توصیف شده است. . .PP اگر اشیاء یا رشته‌های ماسک پردازنده در خط فرمان مشخص شوند، با یکدیگر ترکیب شده و یک خروجی واحد چاپ می‌شود. در صورتی که هیچ شیء یا ماسک پردازنده‌ای در خط فرمان داده نشود، برنامه ورودی استاندارد را می‌خواند. این برنامه اشیاء چندگانه یا رشته‌های ماسک پردازنده‌ای را که در یک خط از ورودی استاندارد با فاصله از هم جدا شده‌اند ترکیب می‌کند. خطوط ورودی مختلف به طور جداگانه پردازش خواهند شد. . .PP آرگومان‌ها و گزینه‌های خط فرمان به ترتیب پردازش می‌شوند. ابتدا باید گزینه‌های پیکربندی توپولوژی مشخص شوند. سپس برای نمونه، تغییر نوع نمایه‌های ورودی با .B \-\-li یا تغییر توپولوژی ورودی با .B \-i تنها بر پردازش آرگومان‌های بعدی تأثیر می‌گذارد. . .PP .B نکته: اکیداً توصیه می‌شود پیش از مطالعه این صفحه، صفحه مروری .BR hwloc (7) را مطالعه کنید. بیشتر مفاهیم شرح داده‌شده در .BR hwloc (7) مستقیماً در ابزار hwloc-calc کاربرد دارند. . . .\" ************************** .\" Examples Section .\" ************************** .SH "مثال‌ها (EXAMPLES)" .PP عملکرد hwloc-calc با چند مثال به بهترین شکل شرح داده می‌شود. . .PP برای نمایش ماسک پردازنده (فیزیکی) متناظر با پکیج دوم: $ 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 listings or counting objects .\" ************************** .SH "مثال‌های فهرست کردن یا شمارش اشیاء (Examples of listing or counting objects)" .PP برای نمایش فهرست شماره‌های منطقی پردازنده‌های موجود در پکیج دوم: $ 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 . .\" ************************** .\" Examples of listing or counting NUMA nodes .\" ************************** .SH "مثال‌های فهرست کردن یا شمارش گره‌های NUMA (Examples of listing or counting NUMA nodes)" .PP برای نمایش فهرست گره‌های 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 .\" ************************** .SH "مثال‌ها با نمایه‌های فیزیکی و منطقی (Examples with physical and logical indexes)" .PP تبدیل نمایه‌های منطقی شیء (پیش‌فرض) از/به نمایه‌های فیزیکی/سیستم‌عامل می‌تواند با .B \-\-intersect همراه با .B \-\-physical\-output (تبدیل منطقی به فیزیکی) یا .B \-\-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 .\" ************************** .SH "مثال‌ها با دستگاه‌های ورودی/خروجی (Examples with I/O devices)" .PP برای نمایش مجموعه پردازنده‌های نزدیک به رابط شبکه 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 .\" ************************** .SH "مثال‌ها با ابزارهای دیگر (Examples with other tools)" .PP برای اینکه 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 $ 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 . .\" ************************** .\" Example of use of the systemd-dbus-api cpuset and nodeset outputs format .\" ************************** .SH "مثال استفاده از قالب خروجی‌های cpuset و nodeset در systemd-dbus-api (Example of use of the systemd-dbus-api cpuset and nodeset outputs format)" .PP ابزار hwloc-calc امکان تولید رشته‌های بسیار پیچیده AllowedCPUs و AllowedMemoryNodes را که رابط D-Bus نرم‌افزار systemd انتظار دارد، از سایر نمایش‌های hwloc فراهم می‌کند. این امر به‌ویژه زمانی مفید است که دستور systemd-run (که فهرست‌های عددی را متوجه می‌شود) قابل استفاده نباشد. . .PP ابتدا، یک slice در systemd ایجاد کنید: .EX $ busctl call org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager StartUnit ss my_slice.slice fail .EE سپس مجموعه‌های پردازنده و گره این slice را پیکربندی کرده و از hwloc-calc برای ترجمه ساختار نحوی استفاده نمایید: .EX $ 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) .EE در نهایت، پردازش جاری را به slice اضافه کنید: .EX $ 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 .EE اطلاعات بیشتر در صفحه راهنمای .BR org.freedesktop.systemd1 (5) موجود است. . .\" ************************** .\" Return value section .\" ************************** .SH "مقدار بازگشتی (RETURN VALUE)" در صورت اجرای موفقیت‌آمیز، hwloc-calc رشته ماسک پردازنده (فیزیکی)، فهرست اشیاء (فیزیکی یا منطقی)، یا فهرست شماره‌های اشیاء (فیزیکی یا منطقی) را نمایش می‌دهد. مقدار بازگشتی 0 است. . . .PP در صورت بروز هرگونه خطا مانند (اما نه محدود به) عدم موفقیت در تجزیه خط فرمان، hwloc-calc مقدار غیرصفر بازمی‌گرداند. . .\" ************************** .\" See also section .\" ************************** .SH "همچنین ببینید (SEE ALSO)" . .ft R .BR hwloc (7), .BR lstopo (1), .BR hwloc-info (1) .sp