У меня есть DIY решение для этого, что я сделал, что вы можете использовать. В основном я сделал сценарий Powershell, который проверяет процент использования GPU и на основе результатов он перезагружает компьютер, хотя вы можете изменить, что перезапустить программу добычи, а также. У меня тоже есть кое-что я использую, чтобы перезапустить программу добычи вместо перезагрузки компьютера, так как иногда этого достаточно.
Трудности с перезапуском горнодобывающего приложения завершают его. Я использую то, что называется closeprog.exe, чтобы закрыть приложение добычи. Я поставил задачу по расписанию, который запускает скрипт, когда происходит сбой драйвера видео. Этот сценарий использует closeprog.exe убить горнодобывающее приложение, а затем повторно запустить его. Я не могу вспомнить, где я получил эту closeprog.exe, я имел это в течение многих лет, и использовал его для различных скриптовых вещей. Вы, наверное, можно понять, как использовать Taskkill, чтобы сделать это также.
Для того, чтобы контролировать использование GPU и перезагрузки, когда конкретный GPU выбывает я использую openhardwaremonitor. Вы можете получить, что здесь:
http://openhardwaremonitor.org/То, что в основном предоставляет статистику датчиков GPU для инструментария управления Windows, которые Powershell может работать. Сценарий PowerShell работает от запланированной задачи каждые 10 минут. Она перебирает все ГПУ ищет низкие результаты использования. Если он получает 9 низкие результаты подряд он перезагружает всю буровую установку. Причина я 9 результатов потому, что если сбой драйвера вызывает другую запланированную задачу для перезапуска приложения добычи, а этот сценарий тестирования использования GPU, то я могу иногда ветер с некоторыми низкими показаниями в то время как вещи перегружаются другой задачей. Кроме того, использование GPU окунет обычно при определенных перезапусках работы из пула. Поэтому я хочу, чтобы убедиться, что я действительно видел постоянный низкий результат, прежде чем я перезагрузку. Сценарий PS это:
$ Log = "LogFile.log"
$ Date = Get-Date
$ TestValue = 0
#test если openhardwaremonitor работает, и если нет, то запустить его
$ ProcessName = "openhardwaremonitor"
если ((получить-процесс $ ProcessName -ErrorAction SilentlyContinue) -eq $ Null)
{Пуск-Процесс -FilePath ". \ OpenHardwareMonitor \ OpenHardwareMonitor.exe" -WindowStyle уменьшенное}
еще
{эхо "Процесс уже запущен" }
#if компьютер только начал он получит нули, а шахтер все еще получает файл даг готов так мы ждать
Start-Sleep 120
# Проверяем нагрузка на GPU
$ FirstGPULoads = Get-WmiObject -namespace ROOT \ openhardwaremonitor -класса датчик | Where-Object {$ _. SensorType -Матч "нагрузка" -И $ _. Идентификатор -как "* * GPU"}
ForEach ($ GPU в $ FirstGPULoads)
{Если ($ GPU.value -lt 10)
{$ FirstGPULoadValue = $ GPU.value
Написать-Host $ FirstGPULoadValue "кажется низкой"
#"$ Date - низкий результат, полученный $ FirstGPULoadValue" >> $ Log
$ TestValue = $ TestValue + 1
}
еще
{$ FirstGPULoadValue = $ GPU.value
Написать-Host $ FirstGPULoadValue "кажется, хорошо"
}
}
#if мы имеем плохое время на аварию водителя (и восстановление) или работа перезагружается мы можем получить низкие результаты, поэтому мы ждать между тестами
Start-Sleep 20
$ SecondGPULoads = Get-WmiObject -namespace ROOT \ openhardwaremonitor -класса датчик | Where-Object {$ _. SensorType -Матч "нагрузка" -И $ _. Идентификатор -как "* * GPU"}
ForEach ($ GPU в $ SecondGPULoads)
{Если ($ GPU.value -lt 10)
{$ SecondGPULoadValue = $ GPU.value
Написать-Host $ SecondGPULoadValue "кажется низкой"
#"$ Date - низкий результат, полученный $ SecondGPULoadValue" >> $ Log
$ TestValue = $ TestValue + 1
}
еще
{$ SecondGPULoadValue = $ GPU.value
Написать-Host $ SecondGPULoadValue "кажется, хорошо"
}
}
#if мы имеем плохое время на аварию водителя (и восстановление) или работа перезагружается мы можем получить низкие результаты, поэтому мы ждать между тестами
Start-Sleep 20
$ ThirdGPULoads = Get-WmiObject -namespace ROOT \ openhardwaremonitor -класса датчик | Where-Object {$ _. SensorType -Матч "нагрузка" -И $ _. Идентификатор -как "* * GPU"}
ForEach ($ GPU в $ ThirdGPULoads)
{Если ($ GPU.value -lt 10)
{$ ThirdGPULoadValue = $ GPU.value
Написать-Host $ ThirdGPULoadValue "кажется низкой"
#"$ Date - низкий результат, полученный $ ThirdGPULoadValue" >> $ Log
$ TestValue = $ TestValue + 1
}
еще
{$ ThirdGPULoadValue = $ GPU.value
Написать-Host $ ThirdGPULoadValue "кажется, хорошо"
}
}
#if мы имеем плохое время на аварию водителя (и восстановление) или работа перезагружается мы можем получить низкие результаты, поэтому мы ждать между тестами
Start-Sleep 20
$ FourthGPULoads = Get-WmiObject -namespace ROOT \ openhardwaremonitor -класса датчик | Where-Object {$ _. SensorType -Матч "нагрузка" -И $ _. Идентификатор -как "* * GPU"}
ForEach ($ GPU в $ FourthGPULoads)
{Если ($ GPU.value -lt 10)
{$ FourthGPULoadValue = $ GPU.value
Написать-Host $ FourthGPULoadValue "кажется низкой"
#"$ Date - низкий результат, полученный $ FourthGPULoadValue" >> $ Log
$ TestValue = $ TestValue + 1
}
еще
{$ FourthGPULoadValue = $ GPU.value
Написать-Host $ FourthGPULoadValue "кажется, хорошо"
}
}
#if мы имеем плохое время на аварию водителя (и восстановление) или работа перезагружается мы можем получить низкие результаты, поэтому мы ждать между тестами
Start-Sleep 20
$ FifthGPULoads = Get-WmiObject -namespace ROOT \ openhardwaremonitor -класса датчик | Where-Object {$ _. SensorType -Матч "нагрузка" -И $ _. Идентификатор -как "* * GPU"}
ForEach ($ GPU в $ FifthGPULoads)
{Если ($ GPU.value -lt 10)
{$ FifthGPULoadValue = $ GPU.value
Написать-Host $ FifthGPULoadValue "кажется низкой"
#"$ Date - низкий результат, полученный $ FifthGPULoadValue" >> $ Log
$ TestValue = $ TestValue + 1
}
еще
{$ FifthGPULoadValue = $ GPU.value
Написать-Host $ FifthGPULoadValue "кажется, хорошо"
}
}
#if мы имеем плохое время на аварию водителя (и восстановление) или работа перезагружается мы можем получить низкие результаты, поэтому мы ждать между тестами
Start-Sleep 20
$ SixthGPULoads = Get-WmiObject -namespace ROOT \ openhardwaremonitor -класса датчик | Where-Object {$ _. SensorType -Матч "нагрузка" -И $ _. Идентификатор -как "* * GPU"}
ForEach ($ GPU в $ SixthGPULoads)
{Если ($ GPU.value -lt 10)
{$ SixthGPULoadValue = $ GPU.value
Написать-Host $ SixthGPULoadValue "кажется низкой"
#"$ Date - низкий результат, полученный $ SixthGPULoadValue" >> $ Log
$ TestValue = $ TestValue + 1
}
еще
{$ SixthGPULoadValue = $ GPU.value
Написать-Host $ SixthGPULoadValue "кажется, хорошо"
}
}
#if мы имеем плохое время на аварию водителя (и восстановление) или работа перезагружается мы можем получить низкие результаты, поэтому мы ждать между тестами
Start-Sleep 20
$ SeventhGPULoads = Get-WmiObject -namespace ROOT \ openhardwaremonitor -класса датчик | Where-Object {$ _. SensorType -Матч "нагрузка" -И $ _. Идентификатор -как "* * GPU"}
ForEach ($ GPU в $ SeventhGPULoads)
{Если ($ GPU.value -lt 10)
{$ SeventhGPULoadValue = $ GPU.value
Написать-Host $ SeventhGPULoadValue "кажется низкой"
#"$ Date - низкий результат, полученный $ SeventhGPULoadValue" >> $ Log
$ TestValue = $ TestValue + 1
}
еще
{$ SeventhGPULoadValue = $ GPU.value
Написать-Host $ SeventhGPULoadValue "кажется, хорошо"
}
}
#if мы имеем плохое время на аварию водителя (и восстановление) или работа перезагружается мы можем получить низкие результаты, поэтому мы ждать между тестами
Start-Sleep 20
$ EightthGPULoads = Get-WmiObject -namespace ROOT \ openhardwaremonitor -класса датчик | Where-Object {$ _. SensorType -Матч "нагрузка" -И $ _. Идентификатор -как "* * GPU"}
ForEach ($ GPU в $ EightthGPULoads)
{Если ($ GPU.value -lt 10)
{$ EightthGPULoadValue = $ GPU.value
Написать-Host $ EightthGPULoadValue "кажется низкой"
#"$ Date - низкий результат, полученный $ EightthGPULoadValue" >> $ Log
$ TestValue = $ TestValue + 1
}
еще
{$ EightthGPULoadValue = $ GPU.value
Написать-Host $ EightthGPULoadValue "кажется, хорошо"
}
}
#if мы имеем плохое время на аварию водителя (и восстановление) или работа перезагружается мы можем получить низкие результаты, поэтому мы ждать между тестами
Start-Sleep 20
$ NinthGPULoads = Get-WmiObject -namespace ROOT \ openhardwaremonitor -класса датчик | Where-Object {$ _. SensorType -Матч "нагрузка" -И $ _. Идентификатор -как "* * GPU"}
ForEach ($ GPU в $ NinthGPULoads)
{Если ($ GPU.value -lt 10)
{$ NinthGPULoadValue = $ GPU.value
Написать-Host $ NinthGPULoadValue "кажется низкой"
#"$ Date - низкий результат, полученный $ NinthGPULoadValue" >> $ Log
$ TestValue = $ TestValue + 1
}
еще
{$ NinthGPULoadValue = $ GPU.value
Написать-Host $ NinthGPULoadValue "кажется, хорошо"
}
}
#all девять тестов должны получить рестарт низкого результата
если ($ TestValue -gt 8)
{"$ Date - Добывается $ TestValue низкие результаты - Кажется мертвым - перезагрузка" >> $ Log
Restart-Computer -force
}
еще
{"$ Date - Добывается $ TestValue низкие результаты - Кажется, хорошо" >> $ Log}
Каждый из тестов девяти GPU будет проверять все GPU, и если любой из них дает результат менее чем на 10%, что увеличивает переменную TestValue. Если переменная TestValue получает значение из девяти в конце, что означает, что каждый из девяти тестов в результате по меньшей мере, один GPU сообщающего использования менее 10%. Поскольку существует также приостанавливается, пока он ожидает между испытаниями, что работает очень хорошо для меня с точки зрения только делать перезагрузку, когда GPU хорошо и действительно разбился. Приложение openhardwaremonitor должен находиться в подкаталоге openhardwaremonitor под которой работает этот скрипт PowerShell (или вам необходимо изменить путь). Сначала он проверяет, что приложение работает, и если это не так запускает его. Таким образом, вы никогда не должны беспокоиться на самом деле убедившись, что приложение openhardwaremonitor работает. Сценарий также имеет длинную паузу в начале, так что, если компьютер действительно получил перезагружается и запускается сразу после перезагрузки он ждет минуты для рудничных приложений, чтобы начать работу (потому что у вас есть те, автоматически запускаемый при загрузке справа?)
Чтобы запустить скрипт Powershell из запланированной задачи я использую пакетный файл для запуска сценария PS (я знаю, запутанным, но это работает). Пакетный файл, который запускает скрипт PS находится в том же каталоге, что и сценарий PS и это выглядит следующим образом:
powershell.exe. \ GPU_Monitor.ps1
EDIT: Я просто глядя на мой лог-файл для этого, и я вижу, что это на самом деле увеличивает переменную TestValue для каждого низкого чтения, так что если у вас есть 6 ГПУ (у меня нет), то это действительно может ударить 9 низкие результаты довольно легко, если тест был запущен в неподходящий момент (как во время аварии водителя видео). Вы можете изменить значение в строке ближе к концу, чтобы определить, сколько низкий результат нужно инициировать перезагрузку. Линия, которая определяет, что
просто измените 8 к любой другой. Вы можете закомментировать рестарт также, поставив # перед ним. Я побежал это в течение нескольких дней с помощью команды перезапуска закомментированной, чтобы убедиться, что это действительно только собирается перезапустить, когда я хотел. Когда я был удовлетворен тем, что он не будет вызывать много ненужных перезагрузок я удалил свой комментарий на этой линии, так что может перезапустить буровую установку. Но, глядя на моем журнале за последние несколько дней это выглядит как сценарий мог бы использовать некоторые уточнения.