4078
Жара в Морровинде, или Квест про кулер на Nvidia.
Захотелось мне тряхнуть стариной - погонять в теплый ламповый 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% его абсолютно не слышно, далее шум плавно нарастает и при снижении нагрузки так-же плавно стихает, резких рывков уровня шума больше нету, и я уверен что при тяжелых моментах в игре кулер сделает все что сможет, но аварийных вылетов графики по перегреву не допустит. И в то же время при работе компьютера в обычном режиме кулера видеокарты совершенно не слышно.
Красота!
Результатом я вполне доволен- уже дошел до Вивека. Я, блин, стану лордом Нереварином и главой всех гильдий, и никакие кулеры меня не остановят! И пусть ординаторы следят за мной и обзывают «ничтожеством» — я еще сочиню специально для них заклинание вроде ФузРоДаха! А этот бешеный чупачупс ДаготУр непременно получит напророченных ему грандиознейших люлей! И не раз, а дважды. Во имя Азуры, королевы Заката и Рассвета!
7 комментариев
везде где упоминают линукс, так сразу же там намёки на эти игры есть… странные вы люди… на винде люди обо всех играх разговаривают, а у вас всего о 3-ёх — 4-ёх серий игр говорят… странный вы народ…
Так что Винду я знаю будьте-нате, причем на многих уровнях, сертификатов девать некуда. Ну, возможно сейчас слегка отстал- бросил я это дело, не вечно же с бейджиком на лацкане по семинарам мотаться и в окошки учета трафика тупить…
Но и тогда я с удовольствием играл в TES. И первого Ведьмака тоже успел застать. Под виндой тогда играл, конечно. Почти все мы здесь выкресты из Рэдмонта.
И Ваш вопрос «почему где Linux там и TES?» — озадачил. Как и ответить-то… Ну, если в двух словах, то пожалуй так: они внутренне похожи. До того что пользователей на совместимость с Линуксом можно проверять при помощи теста Морровиндом. :)
Пожалуй, стоит объяснить подробней.
Миры «The Elder Scrolls» или «Ведьмака», как и мир Linux — осмысленно сложны и в рамках своих вселенных бесконечно разнообразны. В них можно жить вечно, здесь невозможно устать от рутины. Но при этом в них отсутствует бестолковый ералаш противоречащих друг другу концепций. Они внутренне логичны. При этом широта возможностей этих продуктов, если судить хотя-бы по уже реализованным проектам- потрясает. Ага, моды TES и дистры Линукса, я об этом. Плюс — Open_World & Cotstruction_Set в играх и Open_Source в ПО- несомненное сходство.
Мир Windows и большинства других игр — либо бессмысленно усложнён, либо казуально упорядочен. Разнообразия конечно больше, но внутренняя логика что игр, что ПО- порою отсутствует. На поверхности-то всё наоборот- тут скорее диктатура и строгости. Это декларируется, как декларируется и «простота в использовании», «низкий порог вхождения», «интуитивный интерфейс»- что, если вдуматься, уже странно- порядок при заявленной широте возможностей всё это исключает. Где-то врут маркетологи- либо просто, но тупо, либо продвинуто но сложно. А вникни поглубже, оцени их работу под настоящей нагрузкой- боже, ну и бардак обнаружится… Из всех щелей полезут баги, кругом увидите бесконечные заплатки, костыли и дыры. Что в играх, что в системном ПО. Это я Вам как MSP и даже как MSCE заявляю, а совсем не как сектант-пингвинятник. :)
Хотя без исключений не обходится. Microsoft Flight Simulator- вещь просто отличная. Но все-же это исключение, которое… ну Вы в курсе.
Для иллюстрации моих мыслей посмотрите, plz, хороший ролик про Morrowind. Он хоть и фанатский но весьма смешной. Особенно первая часть, где автор рассказывает о своём первом опыте знакомства с TES. Я когда смотрел, почему-то вспоминал свои первые попытки что-то сделать -ну хоть нормально установить!- c Linux. Если не ошибаюсь, это был ASPLinux-7. Мне было проще, был опыт работы с фряхой и консолями маршрутизаторов. Но в целом ощущения были весьма похожи. Пару лет после этого я шарахался от слова Linux как черт от ладана. А потом познал истину, ибо Патрег- ваистену Бох! :)
Вот ТУТ еще почитать можно.
Выяснилось следующее:
1. В видеокарте прошит лимит на обороты вентилятора- не ниже 30% и не выше 80% оборотов.
2. Не совсем удачно выбрал значения в конфиге ~/.config/nvfancontrol.conf, можно лучше.
Сделал так:
1. Команду в юните ~/.config/systemd/user/nvfancontrol.service переписал как
ExecStart=/usr/bin/nvfancontrol -l 0 -f
флаг -l 0 сбрасывает ограничения на обороты кулера.
2. Таблицу ~/.config/nvfancontrol.conf тоже переписал, теперь так:
Стало тише без ущерба охлаждению.
Теперь наконец всё идеально. :)