Торрент, исошник, плейонлинукс, сетап.екзе, далее-далее-далее, лончер-опции-1280х960-игра, чтотонетак, winecfg, повторить лончер-опции… Короче, встал Morrowind. «Новая игра». Тыц. Заставка, мутный ролик про меня, Избранного Спасти Мир. Ну, поехали…
Джиуб, еще не святой. "-Говорят, мы уже приплыли в Морровинд. Нас выпустят, это точно! Тихо, стражник идёт..."
…… ээээ, чёзанах! Черный экран, монитор мигает лампочой- «нет сигнала». Из колонок по прежнему музыка Джереми Соула и шаги охранника. «Мы прибыли туда, где Вас выпустят. Следуйте за мной.»
А… куда следовать-то? Экран потух, выйти из игры клавишами не выходит, горячие клавиши иксов в вайне не срабатывают… «Ну и чо??? Выпустите меня! ВолкИ позорные! Свободу Нереварину!!!»
Не выпускают. Даже ведьмачий знак АльтКонтрДел бесполезен. Ну что ж, резет.
И так каждый раз, раньше или позже. В логе отладки ничего внятного нет.
Наконец замечаю что при работающей игре подозрительно громко шумит какой-то кулер в системнике. Смотрю на датчики вентиляторов проца и корпуса- нормально. Игра меж тем в очередной раз вылетает, Перезагружаюсь, сразу запускаю
nvidia-settings (то что в меню называется «NVIDIA X Server Settings»), гляжу на «Thermal Settings»… Вот оно! Обороты кулера и температура чипа весьма высоки, хотя постепенно падают. Похоже, видеокарта отключается от перегрева. Ну да, Морровинд- место жаркое. Все же на вулкане живем, это вам не Скайрим…
Запускаю игру, температура видеочипа стремительно прыгает вверх, а кулер разгоняется неспешно, явно не успевая охладить чип. На отметке 96С градусов срабатывает защита и видеокарта опять отключается.
Достаю системник, берусь за отвертку. Ну, я так и предполагал… Видеокарта стоит радиатором вниз, крепление радиатора- с пружинками. Радиатор от видеочипа отвалился и болтается на ослабевших пружинках винтов крепления. Термопаста высохла. Кулер-то крутится, а толку чуть.
Вытряхиваю из корпуса пыль- давно пора, лет пять как не заглядывал… Снимаю видеокарту. Разбираю, меняю термопасту, подтягиваю винты радиатора, фиксирую локтейтом. Собираю обратно.
Запускаю комп. О, как всё изменилось- в холостом режиме nvidia-settings показывает тнмпературу 30-35 градусов, обороты кулера — ровно 30%. С игрой- около 60-70С и кулер 80%. А если нагрузить? Запускаю
gputest /test=pixmark_volplosion, температура медленно растет до 84С, кулер быстрее 80 не разгоняется.
Хорошо! А если выключить нагрузку? Температура быстро снижается до 60С, потом кулер с 80% переходит сразу на 30%, скорость падения температуры снижается, и за пару минут опускается до 35С. Снова запускаю gputest, вижу такую картину: температура возрастает быстро и линейно при постоянных оборотах кулера в 30% вплоть до 60С. Потом кулер скачком разгоняется до 80%, рост температуры замедляется, но всё-же через минуту температура доходит до 84С. И всё стабилизируется. 84С температура и 80% обороты кулера. Дальше не растёт, даже если добавить нагрузки запустив несколько штук gputest.
Отлично!
Но…
Мне не очень нравится как кулер видеокарты автоматически выбирает обороты. Конечно, при приближении к опасным температурным значениям он разгоняется и свою работу делает, но в Морровинд играть мешает- температура в игре гуляет как раз около порога его режимов, и кулер постоянно переключается с тихого режима на высокоскоростной. Стоишь спокойно- тишина. Побежал, подпрыгивая или кастанул фаербол в скального наездника- кулер взвыл. Убил гада- через несколько секунд кулер снова затих, переключившись в медленный режим. В общем, основную музыкальную тему я слышу нормально, а боевую музыку- с аккомпанементом завывающего кулера. Отвлекает. Уж лучше бы он постоянно выл, что-ли…
А что, можно и так. Только вот в nvidia-settings опция ручного управления оборотами кулера по дефолту заблокирована. Что ж, начинается акробатика с кульбитами. А ну-ка…
Создаю файлик
/etc/X11/xorg.conf.d/30-nvidia.conf
Section "Device"
Identifier "Device 0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "IDENTIFIER FOR YOUR GPU"
Option "Coolbits" "4"
EndSection
Перегружаюсь, смотрю в nvidia-settings- порядок, кульбит сработал. На вкладке «Thermal Settings» появилась возможность ручного регулирования оборотов кулера. Это хорошо, но вдруг где-то под Гнисисом налетят на меня штук пять скальных наездников, парочка гончих и компания бандитов-ашлендеров? Или запущу игру, а выставить повышенные обороты в nvidia-settings тупо забуду? Температура поднимется, а кулер на постоянных оборотах может и не справится. Как-бы видяху не сжечь… В NVIDIA дураков мало, не зря они эту опцию заблокировали!
Можно, конечно, кинуть в автозагрузку скрипт с командой
"nvidia-settings -a [gpu:0]/GPUFanControlState=1 -a [fan:0]/GPUCurrentFanSpeed=80"
чтобы включить эту опцию и выставить обороты кулера в 80%…
Но это решит лишь половину задачи. Есть ведь и обратный вариант: не всегда же мне играть хочется. А даже если хочется- выйду я на минутку из игры, отвлекусь часа на три- а кулер так и будет вхолостую воздух молотить? Нет,
автоматизация нужна не половинчатая, а именно полная.
Хорошо что в АУРе есть такая утилитка-
nvfancontrol. Правда чтобы работала ее еще настраивать нужно. Что-ж делать, придется заморочиться.
yaourt -S nvfancontrol
при установке ругается на ключ, но тут всё как обычно, поможет
gpg --recv-keys 44EB0D4FC6E01280
Сперва посмотрим справку, там все просто:
$ nvfancontrol -h
Usage: nvfancontrol [options]
Options:
-d, --debug Enable debug messages
-l, --limits LOWER,UPPER
Comma separated lower and upper limits, use 0 to
disable, default: 20,80
-f, --force Always use the custom curve even if the fan is already
spinning in auto mode
-m, --monitor-only Do not update the fan speed and control mode; just log
temperatures and fan speeds
-j, --json-output Print a json representation of the data to stdout
(useful for parsing)
-t, --tcp-server [PORT]
Print a json representation of the data over a tcp
port. Can be optionally followed by the port number
over which the server will listen for incoming
connections
-h, --help Print this help message
Можно запустить его как обычную команду в debug-режиме и посмотреть как он работает
$ nvfancontrol -d
WARN - No config file found; using default curve
DEBUG - Curve points: [(41, 20), (49, 30), (57, 45), (66, 55), (75, 63), (78, 72), (80, 80)]
INFO - NVIDIA driver version: 390.42
INFO - NVIDIA graphics adapter #1: GeForce GTX 550 Ti
DEBUG - Fan is enabled on auto control; doing nothing
DEBUG - Temp: 34; Speed: 1440 RPM (30%); Load: 2%; Mode: Auto
Всё здорово, но стандартная шкала «температура-обороты» несколько странная, и лучше все-же создать свой конфигурационный файл
~/.config/nvfancontrol.conf Например, такой:
30 30
40 40
50 50
60 60
70 70
80 80
85 90
90 100
Проверим.
$ nvfancontrol -d
DEBUG - Curve points: [(30, 30), (40, 40), (50, 50), (60, 60), (70, 70), (80, 80), (85, 90), (90, 100)]
INFO - NVIDIA driver version: 390.42
INFO - NVIDIA graphics adapter #1: GeForce GTX 550 Ti
DEBUG - Fan is enabled on auto control; doing nothing
DEBUG - Temp: 34; Speed: 1440 RPM (34%); Load: 1%; Mode: Auto
Вот, теперь шкала более внятная.
Проверим в деле. В окошке терминала запустим
nvfancontrol -fd и оставим работать.
Запустим
nvidia-settings. Опция «Enable GPU Fan Settings» должна включиться автоматически, за это отвечает ключ -f. Теперь запустим
gputest /test=pixmark_volplosion и посмотрим как работает кулер под нагрузкой. Смотреть можно и в терминальном окне с запущенным nvfancontrol, и в nvidia-settings. Но в nvidia-settings будет гораздо нагляднее. Обороты кулера должны изменяться в соответствии с нашей шкалой, ползунок «Fan 0 speed» — будучи передвинут куда-либо вручную должен отскакивать обратно, снятая вручную галочка «Enable GPU Fan Settings» — восстанавливаться.
У меня так оно и заработало. Правда, полностью протестировать всю шкалу не удалось- со свежей термопастой и вычищенным от пыли радиатором карта напрочь отказывалась греться выше 84С под любой нагрузкой. Ну и ладно, будет запас на будущее.
До полной автоматизации осталось всего пара шагов. Нужно всё зафиксировать и запустить. И лучше не просто так, а
в виде сервиса.
Тут тоже тонкости. Сам
nvfancontrol использует библиотеку
xnvctrl, а она без запущенных иксов не работает. Значит, запускать сервис нужно после запуска иксов, а иксы запускаются от пользователя. Хорошо что сервис можно запустить и так, это в общем не сложнее чем стартовать обыкновенный системный сервис.
В каталоге
~/.config/systemd/user создадим новый юнит- текстовый файл с именем
nvfancontrol.service
[Unit]
Description="NVIDIA Dynamic fan control"
After=graphical.target
[Service]
Type=simple
ExecStart=/usr/bin/nvfancontrol -f
[Install]
WantedBy=default.target
Потом в терминале стартуем его
systemctl --user enable nvfancontrol.service
systemctl --user daemon-reload
systemctl --user start nvfancontrol.service
и проверим запустился ли он
[mmk@tal02 ~]$ systemctl --user status nvfancontrol.service
● nvfancontrol.service - "NVIDIA Dynamic fan control"
Loaded: loaded (/home/mmk/.config/systemd/user/nvfancontrol.service; enabled; vendor preset: enabled)
Active: active (running) since Th 2018-04-12 18:38:29 MSK; 1h 18min ago
Main PID: 1090 (nvfancontrol)
CGroup: /user.slice/user-1000.slice/user@1000.service/nvfancontrol.service
└─1090 /usr/bin/nvfancontrol -f
апр 12 18:38:29 tal02 systemd[954]: Started "NVIDIA Dynamic fan control".
апр 12 18:38:29 tal02 nvfancontrol[1090]: INFO - NVIDIA driver version: 390.42
апр 12 18:38:29 tal02 nvfancontrol[1090]: INFO - NVIDIA graphics adapter #1: GeForce GTX 550 Ti
Ага, запустился. В «Диспетчере задач» должен появиться новый процесс с именем "
nvfancontrol -f"
Но такой сервис сам собою не стартует, поэтому еще потребуется кинуть в автозагрузку команду
systemctl --user start nvfancontrol.service или скрипт с этой командой, зависит от окружения.
Перезагрузимся. Заглянем в nvidia-settings. Всё должно работать так как работало когда мы запускали nvfancontrol -fd вручную.
Всё, теперь автоматизация полная, кулер работает именно так как я и хотел- плавно поднимает обороты вслед за растущей температурой и так же плавно их опускает при снижении нагрузки на видеочип. Примерно до 50% его абсолютно не слышно, далее шум плавно нарастает и при снижении нагрузки так-же плавно стихает, резких рывков уровня шума больше нету, и я уверен что при тяжелых моментах в игре кулер сделает все что сможет, но аварийных вылетов графики по перегреву не допустит. И в то же время при работе компьютера в обычном режиме кулера видеокарты совершенно не слышно.
Красота!
Результатом я вполне доволен- уже дошел до Вивека. Я, блин, стану лордом Нереварином и главой всех гильдий, и никакие кулеры меня не остановят! И пусть ординаторы следят за мной и обзывают «ничтожеством» — я еще сочиню специально для них заклинание вроде ФузРоДаха! А этот бешеный чупачупс ДаготУр непременно получит напророченных ему грандиознейших люлей!
И не раз, а дважды. Во имя Азуры, королевы Заката и Рассвета!