'\" t .\" Title: daxctl-reconfigure-device .\" Author: [see the "AUTHOR(S)" section] .\" Generator: Asciidoctor 2.0.26 .\" Date: 2026-06-30 .\" Manual: daxctl Manual .\" Source: daxctl .\" Language: English .\" .TH "DAXCTL\-RECONFIGURE\-DEVICE" "1" "2026-06-30" "daxctl" "daxctl Manual" .ie \n(.g .ds Aq \(aq .el .ds Aq ' .ss \n[.ss] 0 .nh .ad l .de URL \fI\\$2\fP <\\$1>\\$3 .. .als MTO URL .if \n[.g] \{\ . mso www.tmac . am URL . ad l . . . am MTO . ad l . . . LINKSTYLE blue R < > .\} .SH "نام (NAME)" daxctl-reconfigure-device \- پیکربندی مجدد یک دستگاه dax به حالتی متفاوت .SH "خلاصه دستور (SYNOPSIS)" .sp .nf \fIdaxctl reconfigure\-device\fP [.\|.\|.] [<گزینه‌ها>] .fi .br .SH "توضیحات (DESCRIPTION)" .sp پیکربندی مجدد حالت عملیاتی یک دستگاه dax. از این دستور می‌توان برای تبدیل یک دستگاه معمولی در حالت \fIdevdax\fP به حالت \fIsystem\-ram\fP استفاده کرد که بازهٔ dax را به عنوان حافظهٔ معمولی به سیستم متصل گرم (hot-plug) می‌کند. یک دستگاه در حالت \fIdevdax\fP همچنین می‌تواند به حالت \fIfamfs\fP تبدیل شود، که آن را برای استفاده توسط سیستم‌فایل حافظه اشتراکی famfs به درایور fsdev_dax متصل (bind) می‌کند (ببینید \c .URL "https://famfs.org" "" ")." .if n .sp .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 .B نکته .ps -1 .br .sp این یک عملیات مخرب است. تمام داده‌های روی دستگاه dax از دست \fBخواهند\fP رفت. .sp .5v .RE .if n .sp .RS 4 .it 1 an-trap .nr an-no-space-flag 1 .nr an-break-flag 1 .br .ps +1 .B نکته .ps -1 .br .sp پیکربندی مجدد دستگاه به مدل دستگاه dax\-bus وابسته است. برای اطلاعات بیشتر daxctl\-migrate\-device\-model(1) را ببینید. اگر dax\-class در حال استفاده باشد (از طریق درایور dax_pmem_compat)، پیکربندی مجدد با خطایی مانند مورد زیر با شکست مواجه خواهد شد: .sp .5v .RE .sp .if n .RS 4 .nf .fam C # daxctl reconfigure\-device \-\-mode=system\-ram \-\-region=0 all libdaxctl: daxctl_dev_disable: dax3.0: error: device model is dax\-class dax3.0: disable failed: Operation not supported error reconfiguring devices: Operation not supported reconfigured 0 devices .fam .fi .if n .RE .sp دستور \fIdaxctl\-reconfigure\-device\fP به طور اسمی انتظار دارد که بلوک‌های حافظه جدید را به عنوان \fImovable\fP برخط (online) کند، تا داده‌های هسته وارد این حافظه نشوند. با این حال، عوامل بالقوه دیگری نیز ممکن است به گونه‌ای پیکربندی شده باشند که حافظه جدید متصل گرم شده (hot-plugged) را به محض ظاهر شدن به طور خودکار برخط کنند. از برجسته‌ترین این موارد می‌توان به پیکربندی \fI/sys/devices/system/memory/auto_online_blocks\fP یا قوانین udev سیستم اشاره کرد. اگر چنین عاملی برای برخط کردن بخش‌های حافظه پیش‌دستی کند (race condition)، daxctl بررسی می‌کند که آیا بلوک‌ها به عنوان حافظه \fImovable\fP برخط شده‌اند یا خیر. اگر این‌طور نباشد و مشخص شود که بلوک‌های حافظه در ناحیه (zone) متفاوتی قرار دارند، هشداری نمایش داده می‌شود. اگر تمایل دارید که عامل دیگری برخط‌سازی بلوک‌های حافظه و ناحیه حافظه مربوطه را کنترل کند، توصیه می‌شود از گزینه \-\-no\-online که در زیر شرح داده شده استفاده کنید. این کار عملیات پیکربندی مجدد دستگاه را تنها به اتصال گرم حافظه خلاصه کرده و از برخط کردن بعدی آن خودداری می‌کند. .sp در صورتی که daxctl تشخیص دهد یک سیاست در هسته برای برخط‌سازی خودکار بلوک‌ها وجود دارد (از طریق /sys/devices/system/memory/auto_online_blocks)، بازپیکربندی به system\-ram با شکست مواجه خواهد شد. این رفتار را می‌توان با \fI\-\-force\fP نادیده گرفت (override کرد)..SH "مبانی عملکرد (THEORY OF OPERATION)" .sp زیرسیستم device\-dax در کرنل، دستگاه‌های نویسه‌ای را ارائه می‌دهد که دسترسی DAX (نگاشت‌های مستقیم بدون بافرینگ حافظه پنهان صفحه یا page\-cache) را به یک ناحیه حافظه مشخص فراهم می‌کنند. این دستگاه‌ها به صورت /dev/daxX.Y نام‌گذاری می‌شوند که در آن X شناسه ناحیه (region\-id) و Y شناسه نمونه (instance\-id) درون آن ناحیه است. دو سازوکار وجود دارد که باعث ظاهر شدن نمونه‌های device\-dax می‌شوند: .sp .RS 4 .ie n \{\ \h'-04' 1.\h'+01'\c .\} .el \{\ . sp -1 . IP " 1." 4.2 .\} فضای نام حافظه پایدار (PMEM) که در حالت "devdax" پیکربندی شده است. به "ndctl create\-namespace \-\-help" و .URL "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/dax/Kconfig" "CONFIG_DEV_DAX_PMEM" "." مراجعه کنید. در این حالت، اندازه نمونه device\-dax به صورت ایستا متناسب با ناحیه حافظه میزبان آن تعیین می‌شود که به محدوده آدرس فیزیکی فضای نام میزبان محدود است. .RE .sp .RS 4 .ie n \{\ \h'-04' 2.\h'+01'\c .\} .el \{\ . sp -1 . IP " 2." 4.2 .\} حافظه رزرو نرم (Soft Reserved) که توسط سفت‌افزار پلتفرم شمارش شده است. در سیستم‌های EFI این موضوع از طریق مشخصه موسوم به EFI_MEMORY_SP "Special Purpose" گزارش می‌شود. به .URL "https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/dax/Kconfig" "CONFIG_DEV_DAX_HMEM" "." مراجعه کنید. در این حالت، نمونه(های) device\-dax مرتبط با ناحیه حافظه داده شده را می‌توان تغییر اندازه داد و به چندین دستگاه تقسیم کرد. .RE .sp در مورد رزرو نرم (Soft Reservation)، انتظار در پلتفرم‌های مبتنی بر EFI + ACPI این است که علاوه بر مشخصه EFI_MEMORY_SP، سفت‌افزار همچنین دامنه‌های مجاورت (proximity domains) مجزای ACPI را برای هر محدوده آدرسی که مشخصات عملکردی متفاوتی نسبت به "System RAM" پیش‌فرض دارد ایجاد کند. بنابراین، SRAT دامنه مجاورت را تعریف می‌کند، SLIT فاصله نسبی را تا سایر دامنه‌های مجاورت گزارش می‌دهد، و HMAT با داده‌های تاخیر خواندن/نوشتن و پهنای باند خواندن/نوشتن اسمی پر می‌شود. آن داده‌های HMAT در هنگام بوت در لاگ کرنل ثبت شده و همچنین به sysfs صادر می‌شوند. به .URL "https://www.kernel.org/doc/html/latest/admin\-guide/mm/numaperf.html" "NUMAPERF" "،" برای نمایش جزئیات عملکرد گره پردازنده به حافظه در زمان اجرا مراجعه کنید. .sp به غیر از جزئیات عملکرد NUMA که در بالا پیوند داده شد، روش دیگر برای تشخیص وجود حافظه "Soft Reserved"، بررسی محتوای /proc/iomem و جستجوی محدوده‌های "Soft Reserved" است. اگر کرنل با CONFIG_EFI_SOFT_RESERVE ساخته نشده باشد، قبل از معرفی CONFIG_EFI_SOFT_RESERVE (نسخه 5.5) باشد، یا با خط فرمان efi=nosoftreserve بوت شده باشد، آنگاه device\-dax متصل نخواهد شد و انتظار می‌رود حافظه به صورت یک گره NUMA فقط-حافظه ظاهر شود. در غیر این صورت، حافظه به عنوان یک نمونه device\-dax ظاهر می‌شود و می‌توان از DAXCTL(1) برای پارتیشن‌بندی اختیاری آن و تخصیص مجدد حافظه به کرنل به عنوان "System RAM" استفاده کرد، یا دستگاه می‌تواند مستقیماً به عنوان پسانه (back end) یک تخصیص‌دهنده حافظه در فضای کاربری مانند \c .URL "https://pmem.io/vmem/libvmem" "LIBVMEM" "." نگاشت شود. .SH "مثال‌ها (EXAMPLES)" .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} پیکربندی مجدد dax0.0 به حالت system\-ram، بدون برخط (online) کردن حافظه .RE .sp .if n .RS 4 .nf .fam C # daxctl reconfigure\-device \-\-mode=system\-ram \-\-no\-online dax0.0 [ { "chardev":"dax0.0", "size":16777216000, "target_node":2, "mode":"system\-ram" } ] .fam .fi .if n .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} پیکربندی مجدد dax0.0 به حالت devdax، تلاش برای برون‌خط (offline) کردن حافظه .RE .sp .if n .RS 4 .nf .fam C # daxctl reconfigure\-device \-\-human \-\-mode=devdax \-\-force dax0.0 { "chardev":"dax0.0", "size":"15.63 GiB (16.78 GB)", "target_node":2, "mode":"devdax" } .fam .fi .if n .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} پیکربندی مجدد dax0.0 (در حال حاضر در حالت devdax) به حالت famfs .RE .sp .if n .RS 4 .nf .fam C # daxctl reconfigure\-device \-\-mode=famfs dax0.0 [ { "chardev":"dax0.0", "size":16777216000, "target_node":2, "mode":"famfs" } ] .fam .fi .if n .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} پیکربندی مجدد تمام دستگاه‌های dax در region0 به حالت system\-ram .RE .sp .if n .RS 4 .nf .fam C # daxctl reconfigure\-device \-\-mode=system\-ram \-\-region=0 all [ { "chardev":"dax0.0", "size":16777216000, "target_node":2, "mode":"system\-ram" }, { "chardev":"dax0.1", "size":16777216000, "target_node":3, "mode":"system\-ram" } ] .fam .fi .if n .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} اجرای فرآیندی به نام \fIsome\-service\fP با استفاده از numactl برای محدود کردن گره‌های پردازنده آن به \fI0\fP و \fI1\fP، و تخصیص‌های حافظه به گره 2 (تعیین شده با استفاده از daxctl_dev_get_target_node() یا \fIdaxctl list\fP) .RE.sp .if n .RS 4 .nf .fam C # daxctl reconfigure\-device \-\-mode=system\-ram dax0.0 [ { "chardev":"dax0.0", "size":16777216000, "target_node":2, "mode":"system\-ram" } ] # numactl \-\-cpunodebind=0\-1 \-\-membind=2 \-\- some\-service \-\-opt1 \-\-opt2 .fam .fi .if n .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} تغییر اندازه یک دستگاه dax .RE .sp .if n .RS 4 .nf .fam C # daxctl reconfigure\-device dax0.1 \-s 16G reconfigured 1 device # daxctl reconfigure\-device dax0.1 \-s 0 reconfigured 1 device .fam .fi .if n .RE .SH "گزینه‌ها (OPTIONS)" .sp \-r, \-\-region= .RS 4 عملیات را به دستگاه‌های متعلق به ناحیه(های) مشخص‌شده محدود می‌کند. یک ناحیه device\-dax یک محدوده پیوسته از حافظه است که میزبان یک یا چند دستگاه /dev/daxX.Y می‌باشد، که در آن X شناسه ناحیه و Y شناسه نمونه دستگاه است. .RE .sp \-s, \-\-size= .RS 4 برای ناحیه‌هایی که از ایجاد دستگاه dax پشتیبانی می‌کنند، اندازه دستگاه را به بایت تغییر می‌دهد. این گزینه از پسوندهای "k" یا "K" برای KiB، "m" یا "M" برای MiB، "g" یا "G" برای GiB و "t" یا "T" برای TiB پشتیبانی می‌کند. .sp .if n .RS 4 .nf .fam C اندازه باید مضربی از تراز ناحیه باشد. .fam .fi .if n .RE .sp .if n .RS 4 .nf .fam C این گزینه با \-m یا \-\-mode مانعة‌الجمع است. .fam .fi .if n .RE .RE .sp \-a, \-\-align .RS 4 برنامه‌هایی که مایلند نگاشت‌های حافظه dax را با مدخل‌های جدول صفحه بزرگ‌تر از اندازه صفحه پایه سیستم (۴K در معماری x86) برقرار کنند، به دستگاهی نیاز دارند که به اندازه کافی تراز شده باشد. مقدار پیش‌فرض این گزینه 2M است. توجه داشته باشید که حالت "devdax" تمامی نگاشت‌ها را ملزم به تراز بودن با این مقدار می‌کند، بدین معنا که تلاش‌ها برای نگاشت‌های ترازنشده با شکست مواجه می‌شود. .sp .if n .RS 4 .nf .fam C این گزینه با \-m یا \-\-mode مانعة‌الجمع است. .fam .fi .if n .RE .RE .sp \-m, \-\-mode= .RS 4 حالتی را که دستگاه(های) dax باید به آن بازپیکربندی شوند مشخص می‌کند. .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} "system\-ram": اتصال گرم (hotplug) دستگاه به حافظه سیستم. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} "devdax": تغییر به حالت عادی "device dax". این حالت مستلزم آن است که کرنل از جداسازی گرم (hot\-unplugging) حافظه‌های مبتنی بر \fIkmem\fP پشتیبانی کند. اگر این قابلیت در دسترس نباشد، راه‌اندازی مجدد سیستم تنها راه بازگشت به حالت \fIdevdax\fP خواهد بود. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} "famfs": اتصال دستگاه به درایور fsdev_dax جهت استفاده توسط سیستم‌فایل حافظه اشتراکی famfs (\c .URL "https://famfs.org" "" ")." دستگاه در حال حاضر باید در حالت "devdax" باشد؛ تبدیل مستقیم از حالت "system\-ram" رد می‌شود. .RE .RE .sp \-N, \-\-no\-online .RS 4 به‌طور پیش‌فرض، بخش‌های حافظه ارائه‌شده توسط دستگاه‌های system\-ram به‌صورت خودکار و بلافاصله با خط‌مشی \fIonline_movable\fP برخط (online) می‌شوند. از این گزینه برای غیرفعال کردن این رفتار برخط‌سازی خودکار استفاده کنید. .RE .sp \-C, \-\-check\-config .RS 4 پارامترهای بازپیکربندی را از فایل پیکربندی سراسری daxctl دریافت می‌کند. این گزینه معمولاً زمانی به کار می‌رود که daxctl\-reconfigure\-device از یک فایل واحد دستگاه systemd\-udevd فراخوانی شود. بازپیکربندی تنها در صورتی ادامه می‌یابد که پارامترهای تطبیق در بخش \fIreconfigure\-device\fP فایل پیکربندی با دستگاه dax مشخص‌شده در خط فرمان همخوانی داشته باشند. برای جزئیات بیشتر به بخش \fIPERSISTENT RECONFIGURATION\fP مراجعه کنید. .RE .sp \-\-no\-movable .RS 4 گزینه \fI\-\-movable\fP حالت پیش‌فرض است. می‌توان آن را لغو کرد تا حافظه جدید به گونه‌ای آنلاین شود که \fImovable\fP (قابل جابجایی) نباشد. این کار اجازه می‌دهد هرگونه تخصیصی بالقوه از این حافظه پاسخ داده شود، اما ممکن است از حذف بعدی آن جلوگیری به عمل آورد. با رفتار \fI\-\-movable\fP (که پیش‌فرض است)، تخصیص‌های کرنل این حافظه را در نظر نخواهند گرفت و صرفاً برای استفاده برنامه‌ها رزرو خواهد شد. .RE .sp \-f, \-\-force .RS 4 .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} هنگام تبدیل از حالت "system\-ram" به "devdax"، انتظار می‌رود که تمامی بخش‌های حافظه ابتدا برون‌خط (offline) شوند. به‌طور پیش‌فرض، daxctl به حافظه آنلاین دست نخواهد زد. با این حال با استفاده از این گزینه، قبل از تبدیل مجدد آن به حالت "devdax"، تلاش می‌شود تا حافظه روی گره NUMA مرتبط با دستگاه dax آفلاین شود. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ . sp -1 . IP \(bu 2.3 .\} علاوه بر این، چنانچه یک خط‌مشی کرنل مبنی بر برخط‌سازی خودکار بلوک‌ها شناسایی شود، بازپیکربندی به حالت system\-ram با شکست مواجه می‌شود. با این گزینه می‌توان از این خطا صرف‌نظر کرد تا بازپیکربندی صرف‌نظر از خط‌مشی کرنل انجام پذیرد. انجام این کار ممکن است منجر به بازپیکربندی موفقیت‌آمیز شود، اما ممکن است آفلاین کردن بعدی حافظه بدون راه‌اندازی مجدد سیستم ممکن نباشد. .RE .RE.sp \-u, \-\-human .RS 4 به‌طور پیش‌فرض این دستور داده‌ها را به‌صورت اعداد صحیح خام و ماشین‌پسند خروجی می‌دهد. در عوض، با این پرچم، اعداد نشان‌دهنده اندازه فضای ذخیره‌سازی به‌صورت رشته‌های خوانا برای انسان همراه با یکاها قالب‌بندی می‌شوند و سایر فیلدها به رشته‌های هگزادسیمال تبدیل می‌گردند. .RE .sp \-v, \-\-verbose .RS 4 نمایش پیام‌های اشکال‌زدایی بیشتر .RE .SH "پیکربندی مجدد پایدار (PERSISTENT RECONFIGURATION)" .sp حالت (\fImode\fP) یک دستگاه daxctl به‌طور پیش‌فرض پس از راه‌اندازی مجدد سیستم پایدار نمی‌ماند. علت این است که خود دستگاه هیچ فراداده‌ای که مشخص کند روی چه حالتی تنظیم شده بوده یا قرار است در چه حالتی استفاده شود را نگه نمی‌دارد. حالت پیش‌فرض برای چنین دستگاهی هنگام راه‌اندازی سیستم، \fIdevdax\fP است. .sp مدیر سیستم می‌تواند سیاستی تنظیم کند که دستگاه‌های dax مشخصی در هر بار راه‌اندازی، همیشه به یک پیکربندی هدف تغییر وضعیت یابند. این کار از طریق یک فایل پیکربندی daxctl انجام می‌شود. .sp فایل پیکربندی ممکن است شامل چندین بخش باشد که بر جنبه‌های گوناگون عملکرد daxctl اثر می‌گذارند. بخش مورد نظر برای پیکربندی مجدد پایدار، \fIreconfigure\-device\fP است. قالب این بخش به‌صورت زیر است: .sp .if n .RS 4 .nf .fam C [reconfigure\-device ] nvdimm.uuid = mode = (default: system\-ram) online = (default: true) movable = (default: true) .fam .fi .if n .RE .sp در اینجا نمونه‌ای از یک قطعه پیکربندی برای مدیریت سه فضای نام devdax آورده شده است؛ اولی در حالت devdax باقی مانده، دومی با گزینه‌های پیش‌فرض (online، movable) به حالت system\-ram تغییر یافته، و سومی روی حالت system\-ram تنظیم شده و حافظه آن برخط (online) شده اما غیرقابل جابه‌جایی (not movable) است. .sp توجه داشته باشید که \fIنام زیربخش\fP می‌تواند اختیاری باشد و تنها برای شناسایی یک بخش پیکربندی خاص به‌کار می‌رود. این نام نیازی نیست با \fIنام دستگاه\fP (مانند \fIdax0.0\fP و غیره) مطابقت داشته باشد. .sp .if n .RS 4 .nf .fam C [reconfigure\-device dax0] nvdimm.uuid = ed93e918\-e165\-49d8\-921d\-383d7b9660c5 mode = devdax [reconfigure\-device dax1] nvdimm.uuid = f36d02ff\-1d9f\-4fb9\-a5b9\-8ceb10a00fe3 mode = system\-ram [reconfigure\-device dax2] nvdimm.uuid = f36d02ff\-1d9f\-4fb9\-a5b9\-8ceb10a00fe3 mode = system\-ram online = true movable = false .fam .fi .if n .RE .sp از مثال زیر می‌توان برای ایجاد یک فضای نام در حالت devdax و افزودن هم‌زمان فضای نام تازه ایجادشده به فایل پیکربندی جهت تبدیل به system\-ram استفاده کرد. .sp .if n .RS 4 .nf .fam C ndctl create\-namespace \-\-mode=devdax | \(rs jq \-r "\(rs"[reconfigure\-device $(uuidgen)]\(rs", \(rs"nvdimm.uuid = \(rs(.uuid)\(rs", \(rs"mode = system\-ram\(rs"" >> $config_path .fam .fi .if n .RE .sp مسیر پیش‌فرض برای فایل‌های پیکربندی daxctl در /etc/daxctl.conf.d/ است و هر فایلی با پسوند \fI.conf\fP در این مسیر بررسی می‌شود. داشتن چندین فایل حاوی بخش‌های پیکربندی به سبک ini بلامانع است، اما چندتایی {section, subsection} باید در تمام فایل‌های پیکربندی موجود در /etc/daxctl.conf.d/ یکتا باشد..SH "کپی‌رایت و تکثیر (COPYRIGHT)" .sp کپی‌رایت \(co 2016 \- 2022, Intel Corporation. مجوز GPLv2: GNU GPL نسخه 2 \c .URL "http://gnu.org/licenses/gpl.html" "" "." این یک نرم‌افزار آزاد است: شما مجاز به تغییر و توزیع مجدد آن هستید. هیچ ضمانتی وجود ندارد، تا حدی که قانون اجازه می‌دهد. .SH "همچنین ببینید (SEE ALSO)" .sp daxctl\-list(1),daxctl\-migrate\-device\-model[1]