Обновление от 23.09.2023 г.
Сообщаю, что в способе, показанном ниже, присутствует баг, описанный здесь:
Доброго времени, уважаемые форумчане.
В связи с очень серьёзным повышением сложности добычи KAS, дуал ERG + KAS уходит в прошлое и на первое место по доходности встают ERG + IRON, CFX + IRON, а так же сама CFX, в последнее время, подбирающаяся к NEXA.
Благодаря конкуренции указанных дуалов и монет между собой, существует неочевидная, на первый взгляд, проблема, которую уже ощущают на себе люди (и я, в том числе), привыкшие пользоваться аргументами майнеров для разгона видеокарт. Из-за необходимости довольно часто переключаться между разными алгоритмами, случается так, что аргументы одного майнера влияют на разгон другого, приводя, например, к резкому снижению хешрейта из-за нарушения оптимальной работы видеокарты.
Разберём ситуацию на примере.
Представим, что, в данный момент, на видеокарте RTX 3060 идёт майнинг NEXA майнером Rigel со следующими аргументами:
--cclock 350 --lock-cclock 1575 --lock-mclock 5000 --fan-control 60
Допустим, что в какой-то момент, по воле рынка, доходность CFX превысила доходность NEXA и возникла необходимость в переключении RTX 3060 на добычу CFX, которая майнится на Gminer с другими аргументами:
--cclock 200 --lock_cclock 1450 --mclock 1200 --fan 60
Что ж, отлично, приложение в автоматическом режиме добросовестно выключает Rigel, включает Gminer и… мы наблюдаем, что хешрейт резко ниже того, что должен быть.
Разберёмся, в чём проблема.
Внимательно смотрим на технические данные, предоставляемые в окне майнера, и видим, что видеокарта работает на частоте видеопамяти 5000 МГц.
Что произошло? Ведь майнеру был ясно указан аргумент --mclock 1200, что означает «сместить частоту видеопамяти на +1200 МГц». Видеопамять должна работать на частоте 8500 МГц (базовая частота памяти 7300 МГц плюс смещение 1200 МГц). И да, так бы оно всё и функционировало, если бы не Rigel, работавший перед этим.
К сожалению, Rigel не умеет сбрасывать настройки видеокарты при выходе, поэтому происходят конфликтные ситуации с аргументами, как самого Rigel, так и других майнеров, запускаемых позже.
Решение
Одним из решений может быть использование команд nvidia-smi или сброс через Афтобёрнер, но по мне, так это всё жутко неудобно, не всегда обеспечивает нужный результат и, главное, неавтоматизировано. Поэтому рассмотрим вариант решения с помощью всё тех же аргументов майнеров.
Используем данные разгонов и технические данные майнеров для анализа ситуации. Составим следующую таблицу, в которой под «первым» и «вторым» майнерами имеется в виду очерёдность запуска:
Наглядно видно, что одинаковые аргументы работают, как положено, а разные – нет.
Например, cclock был 350, стал 200, следовательно, второй майнер без проблем применяет свой аргумент, если такой аргумент уже был применён предыдущим майнером.
А вот с видеопамятью беда: аргумент mclock не может примениться из-за того, что аргументом lock-mclock, который Rigel после себя не сбросил, частота видеопамяти переведена в режим работы 5000 МГц. Видимо, в таком режиме смещение частоты не работает.
Решение, собственно, следует из таблицы. Нужно составлять разгоны таким образом, чтобы задействованы были ОДИНАКОВЫЕ аргументы у ВСЕХ майнеров, с которыми мы планируем работать.
Как-то это не очень понятно, поясним на нашем примере.
Итак, у нас «все» майнеры это два майнера – Rigel и Gminer. Теперь аргументы в разгонах надо сделать «одинаковыми», для этого в таблице нужно заполнить пустые клетки, но так, чтобы это не повредило хешрейту.
Мыслим логически. У Rigel не задействован аргумент mclock, поэтому ставим туда просто наименьшее значение, чтобы никак не повлиять на разгон, пусть это будет единичка. Почему единица, а не ноль? Потому что, у некоторых майнеров «ноль» используется, как символ игнорирования команды, а не как значение ноль, а нам не нужно, чтобы команда игнорировалась, а, наоборот, нужно, чтобы выполнялась.
У Gminer не задействован аргумент lock-mclock. Здесь мы не можем написать единицу, потому что тогда видеопамять перейдёт на самый низкий режим работы (кажется, это 405 МГц) и майнинг работать не будет. Запишем туда значение базовой частоты 7300, для того, чтобы вернуть режим работы видеопамяти с 5000 МГц на основной режим, при котором уже будет работать аргумент mclock.
Таким образом, разгоны приобретают следующий вид:
Rigel NEXA
--cclock 350 --lock-cclock 1575 --lock-mclock 5000 --mclock 1 --fan-control 60
Gminer CFX
--cclock 200 --lock_cclock 1450 --lock_mclock 7300 --mclock 1200 --fan 60
Разгоны стали, как бы, симметричными, только с разными конкретными значениями.
Теперь вбиваем всё это в приложение, запускаем и, о чудо, всё работает.
Такой метод может помочь согласовать разгоны между собой для беспроблемного переключения алгоритмов, но я пока не тестировал всевозможные варианты, так что, не исключено, что разные случаи могут потребовать отдельных решений.
Спасибо за внимание, критические замечания приветствуются.