2 мин чтения

DGX Spark: как вернуть 1,5 ГБ памяти через UEFI

DGX SparkUEFIуправление памятью

На DGX Spark с UEFI 1.111.17 и OTA2610 режим Auto может сократить резерв дисплейного буфера с 2 ГБ до 0,5 ГБ, если монитор не подключен при загрузке. Это возвращает примерно 1,5 ГБ общей памяти операционной системе и CUDA, но требует корректной записи request-переменной и перезагрузки.

Что именно меняется в UEFI

Я бы не называл это мелким твиком: на DGX Spark прошивка по умолчанию резервирует 2 ГБ общей памяти под дисплейный буфер, даже когда монитор не используется. На системе без дисплея режим Auto уменьшает резерв до 0,5 ГБ и возвращает примерно 1,5 ГБ операционной системе, CUDA и обычным приложениям.

В публичной документации NVIDIA по DGX Spark для управления резервом указана переменная NvidiaDispFrmSizeRequest. Это одноразовый запрос прошивке: она проверяет значение при следующей загрузке, применяет его и удаляет переменную. Поддержка такого механизма заявлена начиная с OTA2610; в исходной конфигурации также указана версия UEFI 1.111.17.

Здесь есть байтовая ловушка. Код Auto равен 0x00, а 0x07 обозначает атрибуты EFI-переменной: non-volatile, boot-service и runtime access. Поэтому последовательность 07 00 00 00 00 корректна как четыре байта атрибутов и один байт данных, но считать 0x07 кодом Auto нельзя.

Переменная NvidiaDispFrmStatus служит только для чтения результата. После четырехбайтового заголовка efivarfs идут код выбранного режима и размер резерва в МиБ. Для Auto без подключенного монитора ожидаются данные 00 00 02 00 00: режим 0x00 и 512 МиБ в little-endian.

После записи request-переменной нужна перезагрузка. Результат проверяется через NvidiaDispFrmStatus и MemTotal в /proc/meminfo. Фактическая прибавка может немного отличаться от теоретических 1536 МиБ из-за других зарезервированных областей и учета памяти ядром.

Где выигрыш и где можно обжечься

Выигрыш вполне реальный, особенно для локальных моделей, которым не хватает последних сотен мегабайт. DGX Spark использует объединенную память CPU и GPU, поэтому дисплейный резерв напрямую уменьшает объем, видимый системе и вычислительным нагрузкам.

Но Auto не означает динамическое перераспределение на лету. Прошивка оценивает подключенные дисплеи во время загрузки; монитор, подключенный позже, автоматически резерв не увеличит.

  • Для нескольких дисплеев или высокого разрешения 0,5 ГБ может оказаться мало и вызвать ошибки драйвера либо нехватку дисплейной памяти.
  • Менять следует request-переменную, а не сгенерированный прошивкой статус.
  • При работе с efivarfs разумно учитывать риск некорректной записи и иметь путь восстановления настроек UEFI.

В этом трюке главный ресурс не память, а точность: один байт выбирает режим, а неверная интерпретация соседних байтов превращает полезные 1,5 ГБ в эксперимент с прошивкой.

Мы ранее разбирали Rust LocalGPT — локального ассистента в одном бинарнике с постоянной памятью и HTTP API. Этот пример показывает, почему оптимизация потребления ресурсов особенно важна при запуске ИИ-нагрузок локально.