DGX Spark: как вернуть 1,5 ГБ памяти через UEFI
DGX SparkUEFIуправление памятью
Что именно меняется в 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 ГБ в эксперимент с прошивкой.