| DAXCTL-RECONFIGURE-DEVICE(1) | daxctl Manual | DAXCTL-RECONFIGURE-DEVICE(1) |
نام (NAME)
daxctl-reconfigure-device - پیکربندی مجدد یک دستگاه dax به حالتی متفاوت
خلاصه دستور (SYNOPSIS)
daxctl reconfigure-device <dax0.0> [<dax1.0>...<daxY.Z>] [<گزینهها>]
توضیحات (DESCRIPTION)
پیکربندی مجدد حالت عملیاتی یک دستگاه dax. از این دستور میتوان برای تبدیل یک دستگاه معمولی در حالت devdax به حالت system-ram استفاده کرد که بازهٔ dax را به عنوان حافظهٔ معمولی به سیستم متصل گرم (hot-plug) میکند. یک دستگاه در حالت devdax همچنین میتواند به حالت famfs تبدیل شود، که آن را برای استفاده توسط سیستمفایل حافظه اشتراکی famfs به درایور fsdev_dax متصل (bind) میکند (ببینید https://famfs.org).
نکته
این یک عملیات مخرب است. تمام دادههای روی دستگاه dax از دست خواهند رفت.
نکته
پیکربندی مجدد دستگاه به مدل دستگاه dax-bus وابسته است. برای اطلاعات بیشتر daxctl-migrate-device-model(1) را ببینید. اگر dax-class در حال استفاده باشد (از طریق درایور dax_pmem_compat)، پیکربندی مجدد با خطایی مانند مورد زیر با شکست مواجه خواهد شد:
# 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
دستور daxctl-reconfigure-device به طور اسمی انتظار دارد که بلوکهای حافظه جدید را به عنوان movable برخط (online) کند، تا دادههای هسته وارد این حافظه نشوند. با این حال، عوامل بالقوه دیگری نیز ممکن است به گونهای پیکربندی شده باشند که حافظه جدید متصل گرم شده (hot-plugged) را به محض ظاهر شدن به طور خودکار برخط کنند. از برجستهترین این موارد میتوان به پیکربندی /sys/devices/system/memory/auto_online_blocks یا قوانین udev سیستم اشاره کرد. اگر چنین عاملی برای برخط کردن بخشهای حافظه پیشدستی کند (race condition)، daxctl بررسی میکند که آیا بلوکها به عنوان حافظه movable برخط شدهاند یا خیر. اگر اینطور نباشد و مشخص شود که بلوکهای حافظه در ناحیه (zone) متفاوتی قرار دارند، هشداری نمایش داده میشود. اگر تمایل دارید که عامل دیگری برخطسازی بلوکهای حافظه و ناحیه حافظه مربوطه را کنترل کند، توصیه میشود از گزینه --no-online که در زیر شرح داده شده استفاده کنید. این کار عملیات پیکربندی مجدد دستگاه را تنها به اتصال گرم حافظه خلاصه کرده و از برخط کردن بعدی آن خودداری میکند.
در صورتی که daxctl تشخیص دهد یک سیاست در هسته برای برخطسازی خودکار بلوکها وجود دارد (از طریق /sys/devices/system/memory/auto_online_blocks)، بازپیکربندی به system-ram با شکست مواجه خواهد شد. این رفتار را میتوان با --force نادیده گرفت (override کرد)..SH "مبانی عملکرد (THEORY OF OPERATION)"
زیرسیستم device-dax در کرنل، دستگاههای نویسهای را ارائه میدهد که دسترسی DAX (نگاشتهای مستقیم بدون بافرینگ حافظه پنهان صفحه یا page-cache) را به یک ناحیه حافظه مشخص فراهم میکنند. این دستگاهها به صورت /dev/daxX.Y نامگذاری میشوند که در آن X شناسه ناحیه (region-id) و Y شناسه نمونه (instance-id) درون آن ناحیه است. دو سازوکار وجود دارد که باعث ظاهر شدن نمونههای device-dax میشوند:
در مورد رزرو نرم (Soft Reservation)، انتظار در پلتفرمهای مبتنی بر EFI + ACPI این است که علاوه بر مشخصه EFI_MEMORY_SP، سفتافزار همچنین دامنههای مجاورت (proximity domains) مجزای ACPI را برای هر محدوده آدرسی که مشخصات عملکردی متفاوتی نسبت به "System RAM" پیشفرض دارد ایجاد کند. بنابراین، SRAT دامنه مجاورت را تعریف میکند، SLIT فاصله نسبی را تا سایر دامنههای مجاورت گزارش میدهد، و HMAT با دادههای تاخیر خواندن/نوشتن و پهنای باند خواندن/نوشتن اسمی پر میشود. آن دادههای HMAT در هنگام بوت در لاگ کرنل ثبت شده و همچنین به sysfs صادر میشوند. به NUMAPERF https://www.kernel.org/doc/html/latest/admin-guide/mm/numaperf.html، برای نمایش جزئیات عملکرد گره پردازنده به حافظه در زمان اجرا مراجعه کنید.
به غیر از جزئیات عملکرد 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) یک تخصیصدهنده حافظه در فضای کاربری مانند LIBVMEM https://pmem.io/vmem/libvmem. نگاشت شود.
مثالها (EXAMPLES)
# daxctl reconfigure-device --mode=system-ram --no-online dax0.0
[
{
"chardev":"dax0.0",
"size":16777216000,
"target_node":2,
"mode":"system-ram"
}
]
# daxctl reconfigure-device --human --mode=devdax --force dax0.0
{
"chardev":"dax0.0",
"size":"15.63 GiB (16.78 GB)",
"target_node":2,
"mode":"devdax"
}
# daxctl reconfigure-device --mode=famfs dax0.0
[
{
"chardev":"dax0.0",
"size":16777216000,
"target_node":2,
"mode":"famfs"
}
]
# 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"
}
]
# 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
# daxctl reconfigure-device dax0.1 -s 16G reconfigured 1 device # daxctl reconfigure-device dax0.1 -s 0 reconfigured 1 device
گزینهها (OPTIONS)
-r, --region=
-s, --size=
اندازه باید مضربی از تراز ناحیه باشد.
این گزینه با -m یا --mode مانعةالجمع است.
-a, --align
این گزینه با -m یا --mode مانعةالجمع است.
-m, --mode=
-N, --no-online
-C, --check-config
--no-movable
-f, --force
-v, --verbose
پیکربندی مجدد پایدار (PERSISTENT RECONFIGURATION)
حالت (mode) یک دستگاه daxctl بهطور پیشفرض پس از راهاندازی مجدد سیستم پایدار نمیماند. علت این است که خود دستگاه هیچ فرادادهای که مشخص کند روی چه حالتی تنظیم شده بوده یا قرار است در چه حالتی استفاده شود را نگه نمیدارد. حالت پیشفرض برای چنین دستگاهی هنگام راهاندازی سیستم، devdax است.
مدیر سیستم میتواند سیاستی تنظیم کند که دستگاههای dax مشخصی در هر بار راهاندازی، همیشه به یک پیکربندی هدف تغییر وضعیت یابند. این کار از طریق یک فایل پیکربندی daxctl انجام میشود.
فایل پیکربندی ممکن است شامل چندین بخش باشد که بر جنبههای گوناگون عملکرد daxctl اثر میگذارند. بخش مورد نظر برای پیکربندی مجدد پایدار، reconfigure-device است. قالب این بخش بهصورت زیر است:
[reconfigure-device <unique_subsection_name>] nvdimm.uuid = <NVDIMM namespace uuid> mode = <desired reconfiguration mode> (default: system-ram) online = <true|false> (default: true) movable = <true|false> (default: true)
در اینجا نمونهای از یک قطعه پیکربندی برای مدیریت سه فضای نام devdax آورده شده است؛ اولی در حالت devdax باقی مانده، دومی با گزینههای پیشفرض (online، movable) به حالت system-ram تغییر یافته، و سومی روی حالت system-ram تنظیم شده و حافظه آن برخط (online) شده اما غیرقابل جابهجایی (not movable) است.
توجه داشته باشید که نام زیربخش میتواند اختیاری باشد و تنها برای شناسایی یک بخش پیکربندی خاص بهکار میرود. این نام نیازی نیست با نام دستگاه (مانند dax0.0 و غیره) مطابقت داشته باشد.
[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
از مثال زیر میتوان برای ایجاد یک فضای نام در حالت devdax و افزودن همزمان فضای نام تازه ایجادشده به فایل پیکربندی جهت تبدیل به system-ram استفاده کرد.
ndctl create-namespace --mode=devdax | \
jq -r "\"[reconfigure-device $(uuidgen)]\", \"nvdimm.uuid = \(.uuid)\", \"mode = system-ram\"" >> $config_path
مسیر پیشفرض برای فایلهای پیکربندی daxctl در /etc/daxctl.conf.d/ است و هر فایلی با پسوند .conf در این مسیر بررسی میشود. داشتن چندین فایل حاوی بخشهای پیکربندی به سبک ini بلامانع است، اما چندتایی {section, subsection} باید در تمام فایلهای پیکربندی موجود در /etc/daxctl.conf.d/ یکتا باشد..SH "کپیرایت و تکثیر (COPYRIGHT)"
کپیرایت © 2016 - 2022, Intel Corporation. مجوز GPLv2: GNU GPL نسخه 2 http://gnu.org/licenses/gpl.html. این یک نرمافزار آزاد است: شما مجاز به تغییر و توزیع مجدد آن هستید. هیچ ضمانتی وجود ندارد، تا حدی که قانون اجازه میدهد.
همچنین ببینید (SEE ALSO)
daxctl-list(1),daxctl-migrate-device-model[1]
| 2026-06-30 | daxctl |