Для начала опишу самый простой способ который подойдет для десктопа, так как в этом случае не приходится думать о энергосбережении. Данный способ будет работоспособен только при условии что Вы уже установили проприетарный драйвер 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 лучше — жду Ваши комменты.