DAXCTL-RECONFIGURE-DEVICE(1) daxctl Manual DAXCTL-RECONFIGURE-DEVICE(1)

daxctl-reconfigure-device - پیکربندی مجدد یک دستگاه dax به حالتی متفاوت

daxctl reconfigure-device <dax0.0> [<dax1.0>...<daxY.Z>] [<گزینه‌ها>]

پیکربندی مجدد حالت عملیاتی یک دستگاه 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 می‌شوند:

1.فضای نام حافظه پایدار (PMEM) که در حالت "devdax" پیکربندی شده است. به "ndctl create-namespace --help" و CONFIG_DEV_DAX_PMEM https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/dax/Kconfig. مراجعه کنید. در این حالت، اندازه نمونه device-dax به صورت ایستا متناسب با ناحیه حافظه میزبان آن تعیین می‌شود که به محدوده آدرس فیزیکی فضای نام میزبان محدود است.
2.حافظه رزرو نرم (Soft Reserved) که توسط سفت‌افزار پلتفرم شمارش شده است. در سیستم‌های EFI این موضوع از طریق مشخصه موسوم به EFI_MEMORY_SP "Special Purpose" گزارش می‌شود. به CONFIG_DEV_DAX_HMEM https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/dax/Kconfig. مراجعه کنید. در این حالت، نمونه(های) 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. نگاشت شود.

•پیکربندی مجدد dax0.0 به حالت system-ram، بدون برخط (online) کردن حافظه
# daxctl reconfigure-device --mode=system-ram --no-online dax0.0
[
  {
    "chardev":"dax0.0",
    "size":16777216000,
    "target_node":2,
    "mode":"system-ram"
  }
]
•پیکربندی مجدد dax0.0 به حالت devdax، تلاش برای برون‌خط (offline) کردن حافظه
# daxctl reconfigure-device --human --mode=devdax --force dax0.0
{
  "chardev":"dax0.0",
  "size":"15.63 GiB (16.78 GB)",
  "target_node":2,
  "mode":"devdax"
}
•پیکربندی مجدد dax0.0 (در حال حاضر در حالت devdax) به حالت famfs
# daxctl reconfigure-device --mode=famfs dax0.0
[
  {
    "chardev":"dax0.0",
    "size":16777216000,
    "target_node":2,
    "mode":"famfs"
  }
]
•پیکربندی مجدد تمام دستگاه‌های dax در region0 به حالت system-ram
# 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"
  }
]
•اجرای فرآیندی به نام some-service با استفاده از numactl برای محدود کردن گره‌های پردازنده آن به 0 و 1، و تخصیص‌های حافظه به گره 2 (تعیین شده با استفاده از daxctl_dev_get_target_node() یا daxctl list)
# 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
•تغییر اندازه یک دستگاه dax
# daxctl reconfigure-device dax0.1 -s 16G
reconfigured 1 device
# daxctl reconfigure-device dax0.1 -s 0
reconfigured 1 device

-r, --region=

عملیات را به دستگاه‌های متعلق به ناحیه(های) مشخص‌شده محدود می‌کند. یک ناحیه device-dax یک محدوده پیوسته از حافظه است که میزبان یک یا چند دستگاه /dev/daxX.Y می‌باشد، که در آن X شناسه ناحیه و Y شناسه نمونه دستگاه است.

-s, --size=

برای ناحیه‌هایی که از ایجاد دستگاه dax پشتیبانی می‌کنند، اندازه دستگاه را به بایت تغییر می‌دهد. این گزینه از پسوندهای "k" یا "K" برای KiB، "m" یا "M" برای MiB، "g" یا "G" برای GiB و "t" یا "T" برای TiB پشتیبانی می‌کند.
اندازه باید مضربی از تراز ناحیه باشد.
این گزینه با -m یا --mode مانعة‌الجمع است.

-a, --align

برنامه‌هایی که مایلند نگاشت‌های حافظه dax را با مدخل‌های جدول صفحه بزرگ‌تر از اندازه صفحه پایه سیستم (۴K در معماری x86) برقرار کنند، به دستگاهی نیاز دارند که به اندازه کافی تراز شده باشد. مقدار پیش‌فرض این گزینه 2M است. توجه داشته باشید که حالت "devdax" تمامی نگاشت‌ها را ملزم به تراز بودن با این مقدار می‌کند، بدین معنا که تلاش‌ها برای نگاشت‌های ترازنشده با شکست مواجه می‌شود.
این گزینه با -m یا --mode مانعة‌الجمع است.

-m, --mode=

حالتی را که دستگاه(های) dax باید به آن بازپیکربندی شوند مشخص می‌کند.
•"system-ram": اتصال گرم (hotplug) دستگاه به حافظه سیستم.
•"devdax": تغییر به حالت عادی "device dax". این حالت مستلزم آن است که کرنل از جداسازی گرم (hot-unplugging) حافظه‌های مبتنی بر kmem پشتیبانی کند. اگر این قابلیت در دسترس نباشد، راه‌اندازی مجدد سیستم تنها راه بازگشت به حالت devdax خواهد بود.
•"famfs": اتصال دستگاه به درایور fsdev_dax جهت استفاده توسط سیستم‌فایل حافظه اشتراکی famfs ( https://famfs.org). دستگاه در حال حاضر باید در حالت "devdax" باشد؛ تبدیل مستقیم از حالت "system-ram" رد می‌شود.

-N, --no-online

به‌طور پیش‌فرض، بخش‌های حافظه ارائه‌شده توسط دستگاه‌های system-ram به‌صورت خودکار و بلافاصله با خط‌مشی online_movable برخط (online) می‌شوند. از این گزینه برای غیرفعال کردن این رفتار برخط‌سازی خودکار استفاده کنید.

-C, --check-config

پارامترهای بازپیکربندی را از فایل پیکربندی سراسری daxctl دریافت می‌کند. این گزینه معمولاً زمانی به کار می‌رود که daxctl-reconfigure-device از یک فایل واحد دستگاه systemd-udevd فراخوانی شود. بازپیکربندی تنها در صورتی ادامه می‌یابد که پارامترهای تطبیق در بخش reconfigure-device فایل پیکربندی با دستگاه dax مشخص‌شده در خط فرمان همخوانی داشته باشند. برای جزئیات بیشتر به بخش PERSISTENT RECONFIGURATION مراجعه کنید.

--no-movable

گزینه --movable حالت پیش‌فرض است. می‌توان آن را لغو کرد تا حافظه جدید به گونه‌ای آنلاین شود که movable (قابل جابجایی) نباشد. این کار اجازه می‌دهد هرگونه تخصیصی بالقوه از این حافظه پاسخ داده شود، اما ممکن است از حذف بعدی آن جلوگیری به عمل آورد. با رفتار --movable (که پیش‌فرض است)، تخصیص‌های کرنل این حافظه را در نظر نخواهند گرفت و صرفاً برای استفاده برنامه‌ها رزرو خواهد شد.

-f, --force

•هنگام تبدیل از حالت "system-ram" به "devdax"، انتظار می‌رود که تمامی بخش‌های حافظه ابتدا برون‌خط (offline) شوند. به‌طور پیش‌فرض، daxctl به حافظه آنلاین دست نخواهد زد. با این حال با استفاده از این گزینه، قبل از تبدیل مجدد آن به حالت "devdax"، تلاش می‌شود تا حافظه روی گره NUMA مرتبط با دستگاه dax آفلاین شود.
•علاوه بر این، چنانچه یک خط‌مشی کرنل مبنی بر برخط‌سازی خودکار بلوک‌ها شناسایی شود، بازپیکربندی به حالت system-ram با شکست مواجه می‌شود. با این گزینه می‌توان از این خطا صرف‌نظر کرد تا بازپیکربندی صرف‌نظر از خط‌مشی کرنل انجام پذیرد. انجام این کار ممکن است منجر به بازپیکربندی موفقیت‌آمیز شود، اما ممکن است آفلاین کردن بعدی حافظه بدون راه‌اندازی مجدد سیستم ممکن نباشد.
-u, --human
به‌طور پیش‌فرض این دستور داده‌ها را به‌صورت اعداد صحیح خام و ماشین‌پسند خروجی می‌دهد. در عوض، با این پرچم، اعداد نشان‌دهنده اندازه فضای ذخیره‌سازی به‌صورت رشته‌های خوانا برای انسان همراه با یکاها قالب‌بندی می‌شوند و سایر فیلدها به رشته‌های هگزادسیمال تبدیل می‌گردند.

-v, --verbose

نمایش پیام‌های اشکال‌زدایی بیشتر

حالت (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. این یک نرم‌افزار آزاد است: شما مجاز به تغییر و توزیع مجدد آن هستید. هیچ ضمانتی وجود ندارد، تا حدی که قانون اجازه می‌دهد.

daxctl-list(1),daxctl-migrate-device-model[1]

2026-06-30 daxctl