Фотогалереи

Услуги

Помощь при использовании сайта

Разгон и энергосбережение видеокарт nVidia в GNU/Linux

Для начала опишу самый простой способ который подойдет для десктопа, так как в этом случае не приходится думать о энергосбережении. Данный способ будет работоспособен только при условии что Вы уже установили проприетарный драйвер nvidia и GUI мордочку nvidia-settings к нему. (Обычно устанавливается по зависимостям)

Для начала нужно определиться с тактовой частотой и сделать возможным оверклокинг, так как по умолчанию эта опция отключена.

Для этого нужно открыть файл

/etc/X11/xorg.conf

и в секцию Device вписать опцию Coolbits.

Option "Coolbits" "1"

После чего открыть в домашней директории файл ~/.xinitrc и вписать в него следующее:

nvidia-settings --assign [gpu:0]/GPUOverclockingState=1

Останавливаем X сервер и выгружаем ядреный модуль nVidia. Заново стартуем X сервер и видим что в nvidia-settings появилось новое меню под названием Clock Frequencies с помощью которого теперь можно менять частоты графического процессора, видеопамяти в разных режимах (2D, 3D). Теперь нужно определить частоту до которой можно разогнать железку без ущерба стабильности. Я рекомендую делать это с помощью "Auto detect" находящееся в том же самом меню, ибо подбирая частоты наугад вы можете потерять гораздо больше времени прежде чем заставите работать видеокарту стабильно. В моем случае для nVidia GT 240 частоты в 2D режиме (GPU - 270 Mhz, Memory - 162 Mhz). В режиме 3D (GPU - 610 Mhz, Memory - 1123 Mhz). В вашем случае конечно эти значения будут отличаться. Выявив оптимальные частоты в обоих режимах следует их на время запомнить (или записать) потому как они понадобятся для того, чтобы выставлять эти значения при старте системы, так как после рестарта X сервера эти значения будут сбрасываться на умолчальные. Для предотвращения этого откроем уже известный нам ~/.xinitrc и приведем его к такому виду заменив мои значения частот на свои.

nvidia-settings --assign [gpu:0]/GPUOverclockingState=1
sleep 5 &
nvidia-settings --assign [gpu:0]/GPU2DClockFreqs="270,162" 
nvidia-settings --assign [gpu:0]/GPU3DClockFreqs="610,1123"

Думаю ничего объяснять дополнительно не надо. При старте системы все содержимое ~/.xinitrc будет выполняться и изменять частоты на нужные нам.

Теперь о PowerMizer.
В моем случае возможны только два режима Power Mizer. Это Adaptive (адаптивный -- изменение уровня производительности в зависимости от нагрузки) и Maximum Perfomance (максимальная производительность -- работа всегда на повышенных частотах). В Вашем случае опять же их может быть больше, тем более если у Вас ноутбучный видеоадаптер.

Настраивая частоты также невозможно не увидеть, что в меню Power Mizer имеются и уровни производительности. Эти уровни (частоты на которых работает видеокарта) изменяются в соответствии с установленным режимом Power Mizer. Для примера скажу, что в режиме Adaptive при отсутствии нагрузки частоты будут соответствовать "нулевому" уровню и будут минимально возможными, а при запуске 3D приложений частоты поднимутся до максимума и будут соответствовать уровню 2.
Чтобы узнать какие "уровни производительности" доступны для Вашей видеокарты нужно ввести в терминале

nvidia-settings -q GPUPerfModes -t
perf=0, nvclock=270, memclock=162, processorclock=540 ; perf=1, nvclock=405, memclock=324, processorclock=810 ; perf=2, nvclock=610, memclock=1123, processorclock=1220

Для моей десктопной видеокарты имеются три различных уровня производительности. Отличаются они как Вы уже заметили частотами. Нулевой (perf=0) это самые низкие частоты и самое низкое энергопотребление и соотвественно второй (perf=2) самые высокие частоты и самое высокое энергопотребление.

Для домашнего компа и максимального разгона видеокарты не требуется особой мудрости и нужно лишь выбрать глобальную политику "Всегда использовать максимальные частоты" с помощью Power Mizer Mode добавив код

nvidia-settings --assign [gpu:0]/GPUPowerMizerMode=1

в самую первую строку уже открытого файла ~/.xinitrc. Эту переменную можно поменять и из nvidia-settings, но опять же после рестарта иксов все эти значения сбросятся.

Для пользователей ноутбуков несколько сложнее, так как продлить время жизни от батареи за счет снижения частот GPU тогда когда это нужно -- задача первостепенная. Самое плохое то, что у меня нет ноутбука с nVidia карточкой на борту поэтому напишу лишь только теорию. В принципе все шаги описанные выше применимы и для ноутбуков. Разница лишь в том, что в случае с ноутбуком полезно настроить поведение видеокарты при различных источниках питания.
При настройке политик следует задать следующие опции в /etc/X11/xorg.conf в секции Device:

Option "RegistryDwords" "PowerMizerEnable=0x1 PerfLevelSrc=0x2233 PowerMizerDefault=0x3"

Это будет означать, что при питании от батареи будет использовано максимальное энергосбережение, а при притании от сети частоты будут меняться в зависимости от нагрузки.

Подробнее о приведенных опциях. PowerMizerDefault задает умолчальные политики при питании от батареи. В данном случае 0x3 это режим максимального энергосбережения; 0x1 это максимальная производительность; 0x2 это адаптивный режим;
PowerMizerDefaultAC задает умолчальные политики при питании от сети. Как и в предыдущем случае имеет значения 0xN.

PerfLevelSrc опция задающая уровень производительности при различных источниках питания. Задаются параметры в соответствии со следующим правилом

0x[Уровень производительности при питании от батареи][Уровень производительности при питании от сети]

Учитывая то, что количество доступных профилей Power Mizer и уровней производительности для многих карт будет различным, для достижения результата нужно поиграться с величинами PrefLevelSrc и PowerMizerDefault. У меня лично регулировка частот вообще не работает если ее задавать для определенного источника питания.
Если кто либо разобрался в управлении питанием карт nVidia лучше -- жду Ваши комменты.

5
3 голосов
Ваша оценка: Нет


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".
Аватар пользователя anonymous

Доброго времени суток!
Подскажите, как выгрузить модуль нвидии, а то после правки xorg и ~/.xinitrc и последующего перезапуска Хов, в nvidia-settings ничего нового не появляется. Так же не помогает прописывание в ~/.xinitrc немного завышенных частот( по крайней мере nvidia-settings показывает дефолтные). Спасибо.

Аватар пользователя admin
sudo rmmod nvidia

или

sudo modprobe -r nvidia

Иксы стартуете через startx?

Аватар пользователя rosenrot

хм, все равно не получается, вот что выходит
~$ sudo rmmod nvidia
ERROR: Module nvidia is in use
~$ sudo modprobe -r nvidia
FATAL: Module nvidia is in use.
иксы перезапускал просто по ctrl+alt+backspace
да, система kubuntu, драйвер ставит вручную с сайта нвидии

Аватар пользователя admin

Иксы нужно остановить, а после этого выгружать модуль.

Если используете GNOME и Display Manager GDM,то в Ubuntu ЕМНИП

sudo /etc/init.d/gdm stop
Аватар пользователя rosenrot
admin пишет:

Иксы нужно остановить, а после этого выгружать модуль.

так это понятно, все равно не получается
останавливаю вот так

sudo /etc/init.d/kdm stop
Аватар пользователя admin

Покажите

sudo lsmod |grep nvidia

Скорее всего nvidia модуль не выгружается по причине того, что используется другим модулем. Вывод команды покажет каким модулям нужна nvidia. Попробуйте их выгрузить вручную, а потом попробовать снова. У меня почему то выгружается без каких то эксцессов сразу же.

Аватар пользователя rosenrot
~$ sudo lsmod |grep nvidia
nvidia              12294267  50
Аватар пользователя admin

В любом случае можно просто перезагрузиться и это решит проблемы. Но в Вашем случае (так как используется KDE) ковыряние .xinitrc ни к чему не приведет, так как при запуске KDE содержимое файла .xinitrc не выполняется.
Нужно добавить в .xinitrc

nvidia-settings --assign [gpu:0]/GPUPowerMizerMode=1
nvidia-settings --assign [gpu:0]/GPUOverclockingState=1
sleep 5 &
nvidia-settings --assign [gpu:0]/GPU2DClockFreqs="270,162" 
nvidia-settings --assign [gpu:0]/GPU3DClockFreqs="610,1123"
nvidia-settings -a GlyphCache=1
export GDK_USE_XFT=1
export QT_USE_XFT=1 USE_XFT=1
export QT_XFT=true
exec ck-launch-session startkde

Остановить иксы. Переключиться в фреймбуфер Ctrl+Alt+F2 и стартануть иксы через startx. Возможно после правки .xinitrc потребуется перезагрузка или перелогин.

Если заработает, то добавляем вышеприведенное содержимое .xinitrc в директорию

/usr/share/config/kdm/X*

Куда именно я сказать не могу, потому как никогда не пользовался KDE.

Аватар пользователя rosenrot

ага, спасибо, сейчас попробую. В том то и фишка, что перезагрузка тоже не помогает.

К сожалению ничего не вышло. Кстати после правки xorg даже не появились дополнительные ползунки (для изменения частот).
А вот если добавить в xorg в секцию "Screen" строку Option "Coolbits" "4", то в nvidia-settings появляется ползунок регулировки оборотов кулера (правда после перезагрузки он все время сбрасывается по умолчанию.

Аватар пользователя admin

Может быть в BIOS видеокарты не предусмотрено изменение частот? В Windows разгон имеется? Попробуйте значение Coolbits 5. Сбрасываться он и должен я об этом писал в статье. Для этого и прописываются параметры при старте иксов.

Option "Coolbits" "1"
 Option "Coolbits" "5"