Разгон и энергосбережение видеокарт 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 лучше -- жду Ваши комменты.
Доброго времени суток!
Подскажите, как выгрузить модуль нвидии, а то после правки xorg и ~/.xinitrc и последующего перезапуска Хов, в nvidia-settings ничего нового не появляется. Так же не помогает прописывание в ~/.xinitrc немного завышенных частот( по крайней мере nvidia-settings показывает дефолтные). Спасибо.
или
Иксы стартуете через startx?
хм, все равно не получается, вот что выходит
~$ sudo rmmod nvidia
ERROR: Module nvidia is in use
~$ sudo modprobe -r nvidia
FATAL: Module nvidia is in use.
иксы перезапускал просто по ctrl+alt+backspace
да, система kubuntu, драйвер ставит вручную с сайта нвидии
Иксы нужно остановить, а после этого выгружать модуль.
Если используете GNOME и Display Manager GDM,то в Ubuntu ЕМНИП
Иксы нужно остановить, а после этого выгружать модуль.
так это понятно, все равно не получается
останавливаю вот так
Покажите
Скорее всего nvidia модуль не выгружается по причине того, что используется другим модулем. Вывод команды покажет каким модулям нужна nvidia. Попробуйте их выгрузить вручную, а потом попробовать снова. У меня почему то выгружается без каких то эксцессов сразу же.
В любом случае можно просто перезагрузиться и это решит проблемы. Но в Вашем случае (так как используется KDE) ковыряние .xinitrc ни к чему не приведет, так как при запуске KDE содержимое файла .xinitrc не выполняется.
Нужно добавить в .xinitrc
Остановить иксы. Переключиться в фреймбуфер Ctrl+Alt+F2 и стартануть иксы через startx. Возможно после правки .xinitrc потребуется перезагрузка или перелогин.
Если заработает, то добавляем вышеприведенное содержимое .xinitrc в директорию
Куда именно я сказать не могу, потому как никогда не пользовался KDE.
ага, спасибо, сейчас попробую. В том то и фишка, что перезагрузка тоже не помогает.
К сожалению ничего не вышло. Кстати после правки xorg даже не появились дополнительные ползунки (для изменения частот).
А вот если добавить в xorg в секцию "Screen" строку Option "Coolbits" "4", то в nvidia-settings появляется ползунок регулировки оборотов кулера (правда после перезагрузки он все время сбрасывается по умолчанию.
Может быть в BIOS видеокарты не предусмотрено изменение частот? В Windows разгон имеется? Попробуйте значение Coolbits 5. Сбрасываться он и должен я об этом писал в статье. Для этого и прописываются параметры при старте иксов.