LINUX.ORG.RU

Управление вентиляторами и частотами NVIDIA GeForce без Xorg

 ,


0

2

Привет «зелёным».

По состоянию на сейчас (февраль 2024), существует ли в природе какое-либо решение, позволяющее управлять скоростью вентиляторов (и желательно частотами GPU/VRAM) на NVIDIA GeForce RTX 3xxx под управлением проприетарного драйвера, но без использования Xorg-сервера (который требуется для nvidia-settings)?

Вариант «запустить headless иксы» мне известен и ответом не является.

Перемещено hobbit из general

★★★★★

Я конечно догадываюсь, что пишу дичь, но интересно разобраться вместе.

А не получится писать значение напрямую в устройство в /sys/?
Под рукой нет компа с NVIDIA, проверить не могу, пишу с телефона.

Просто на Jetson я так делал. На CPU governor есть. Может для обычной GPU тоже класс лежит?

https://forums.developer.nvidia.com/t/i-cant-change-my-gpu-frequency-on-jetson-orin/230264/4

IIIypuk ★★★★
()
Последнее исправление: IIIypuk (всего исправлений: 1)

По состоянию на сейчас (февраль 2024), существует ли в природе какое-либо решение

Офигеть, до сих пор не? Меня это бесило ещё лет 6 назад.

Dimez ★★★★★
()
From the nvidia docs

Option "NVreg_DynamicPowerManagement=0x00"
	With this setting, the NVIDIA driver will only use the GPU's built-in power management so it
	always is powered on and functional. This is the default option, since this feature is a new
	and highly experimental feature. Actual power usage will vary with the GPU's workload.

Option "NVreg_DynamicPowerManagement=0x01"
	With this setting, the NVIDIA GPU driver will allow the GPU to go into its lowest power state
	when no applications are running that use the nvidia driver stack. Whenever an application
	requiring NVIDIA GPU access is started, the GPU is put into an active state. When the
	application exits, the GPU is put into a low power state.

Option "NVreg_DynamicPowerManagement=0x02"
	With this setting, the NVIDIA GPU driver will allow the GPU to go into its lowest power state
	when no applications are running that use the nvidia driver stack. Whenever an application
	requiring NVIDIA GPU access is started, the GPU is put into an active state. When the
	application exits, the GPU is put into a low power state.

	Additionally, the NVIDIA driver will actively monitor GPU usage while applications using the
	GPU are running. When the applications have not used the GPU for a short period, the driver
	will allow the GPU to be powered down. As soon as the application starts using the GPU, the
	GPU is reactivated.

	It is important to note that the NVIDIA GPU will remain in an active state if it is driving a
	display. In this case, the NVIDIA GPU will go to a low power state only when the X
	configuration option HardDPMS is enabled and the display is turned off by some means - either
	automatically due to an OS setting or manually using commands like xset.

	Similarly, the NVIDIA GPU will remain in an active state if a CUDA application is running.

To enable Dynamic Power Management edit the file /etc/modprobe.d/nvidia.conf and add the setting you want. My configuration is

modprobe nvidia "NVreg_DynamicPowerManagement=0x02"


И после попробовать тюнить частоты\обороты

serg002 ★★★
()
Последнее исправление: serg002 (всего исправлений: 1)
Ответ на: комментарий от intelfx

Там же в иксах, чтобы управлять оборотами\частотами - надо кулбит выставлять. Возможно это можно передавать при инициализации модуля. А дальше в proc менять частоты и управлять вентилятором

serg002 ★★★
()

Узнать с чем конкретно в иксах взаимодействует nvidia-settings выдрать этот код из иксов и оформить в мини библиотечку которую подсунуть на запуске nvidia-settings, на все графические запросы (отображение графики) тупо вставить заглушки в виде пустых функций, а на всякие запросы возвращать константные значения. Профит. Это единственно верный способ отвязать настройки от графики. И в целом не должно быть сложной затеей.

Садись, запускай под дебагом, strace,ltrace,ptrace, дебаг принтами из сорцов иксов. И шаг за шагом пиши заглушки, переноси функции. И через некоторое время, случится вуаля.

anonymous
()
Ответ на: комментарий от anonymous

Можно попробовать менять кулбитс и какие-то параметры через udev rules. Если это не получится - значит драйвера не предоставляют такой возможности. Надо смотреть сорсы этой штуки и пробовать формировать правила для udev https://github.com/bayasdev/envycontrol/blob/main/envycontrol.py

serg002 ★★★
()
Ответ на: комментарий от serg002

А дальше в proc менять частоты и управлять вентилятором

Каким образом я могу «в proc менять частоты и управлять вентилятором»? Где эти магические крутилки которых на самом деле нет?

intelfx ★★★★★
() автор топика
Ответ на: комментарий от intelfx

В /proc их нет и не было, но начиная с 520 драйвера управление вентилятором появилось как функция nvmlDeviceSetFanControlPolicy в libnvidia-ml.so

https://docs.nvidia.com/deploy/nvml-api/group__nvmlDeviceQueries.html#group__nvmlDeviceQueries_1g0e6a294269aa9eee48fd1a5c4147da69

И над этой штукой есть python-обёртка - https://github.com/gpuopenanalytics/pynvml/blob/master/pynvml/nvml.py

До этого единственный документированный способ управления гипотетически был бы - что-то типа создания эмулятора приложения X-сервера, который загружает nvidia_drv.so c расширением NV_CONTROL и дёргают функции этого расширения также как это делает nvidia-settings (который выложен в исходниках самой nvidia)

GPFault ★★
()
Последнее исправление: GPFault (всего исправлений: 2)
Ответ на: комментарий от GPFault

Годнота.

Есть ещё этот чувак, который написал обёртку над NVML на JavaFX, но она проприетарная и собрана только под оффтопик — при том что автор говорит, что он лично разрабатывает и использует её на линуксе (!), но линуксовую сборку выкладывать не хочет и не будет по причинам личной неприязни к линуксоидам (!!).

Так что звучит как рабочая концепция.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 1)

Я через nvidia-smi задал лимит энергопотребления (опция --power-limit) и целевую температуру (опция --gpu-target-temp). Работает нормально.

Для Volta+ дополнительно поддерживаются опции --lock-gpu-clocks и --lock-memory-clocks.

QsUPt7S ★★
()
Ответ на: комментарий от QsUPt7S

У тебя GeForce? Потому что мне nvidia-smi запрещает анус любые попытки сделать что угодно, кроме ограничения потребляемой мощности (но вопрос треда не в этом). RTX 3090.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 2)
Ответ на: комментарий от GPFault

Внутри самой библиотеки nvml идут заполнения достаточно запутанных структур-указателей-прочего и дёргается ioctl на файлы-устройства типа /dev/nvidiactl, /dev/nvidia0, /dev/nvidia1 с передачей ID вызываемого метода.

Обработчиком этих ioctl является функция nvidia_ioctl которая частично видна здесь

https://github.com/NVIDIA/open-gpu-kernel-modules/blob/main/kernel-open/nvidia/nv.c#L2092

И ID вызываемго метода матчится по таблицам вида https://github.com/NVIDIA/open-gpu-kernel-modules/blob/bb2dac1f20a06f78e028c4acdc4df1c7908dd91c/src/nvidia/generated/g_subdevice_nvoc.c#L1740

Однако в открытом драйвере я так понимаю поддержки методов для управлениями вентиляторами в этом списке нет.

GPFault ★★
()