private void CardsMonitoring() { var messageBus = _messageBusFactory.Create(); Task.Factory.StartNew(async() => { do { _lockEvent.WaitOne(); try { var ctrlGpu = new ControlMemory(); var voltageMonitor = new HardwareMonitor(); var voltage = new List <VoltageInfo>(); var temp = new List <TempInfo>(); foreach (var vol in voltageMonitor.Entries.Where(x => x.SrcId == 96)) { voltage.Add(new VoltageInfo { Current = vol.Data, Max = vol.MaxLimit, CardId = vol.GPU }); } messageBus.Handle(new AutobernerVoltageCardsInfoMessage { VoltageInfoModel = voltage.ToArray() }); foreach (var vol in voltageMonitor.Entries.Where(x => x.SrcId == 0)) { temp.Add(new TempInfo { Current = vol.Data, CardId = vol.GPU }); } messageBus.Handle(new AutobernerTempCardsInfoMessage { TempInfoModel = temp.ToArray() }); ctrlGpu.Connect(); ctrlGpu.ReloadAll(); ctrlGpu.Reinitialize(); var actualList = FindCards(ctrlGpu); messageBus.Handle(new AutobernerInformationMessage { CurrentInfoCards = actualList.ToList() }); ctrlGpu.Disconnect(); } catch (Exception ex) { _logger.Error($"CardsMonitoring error: {ex.Message}"); } await Task.Delay(_config.MonitoringInterval, _token.Token); } while (!_token.IsCancellationRequested); }, _token.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default) .ContinueWith((x) => { messageBus.Handle <AutobernerStopWatchingMessage>(); }, TaskContinuationOptions.OnlyOnFaulted); }
private void CardsMonitoring(CardParam[] configCards) { var messageBus = _messageBusFactory.Create(); Task.Factory.StartNew(async() => { do { _lockEvent.WaitOne(); try { var ctrlGpu = new ControlMemory(); ctrlGpu.Connect(); ctrlGpu.ReloadAll(); ctrlGpu.Reinitialize(); var actualList = FindCards(ctrlGpu); ctrlGpu.Disconnect(); if (_config.WatchDog) { WatchDog(configCards, actualList); } } catch (Exception ex) { _logger.Error($"CardsMonitoring error: {ex.Message}"); } await Task.Delay(_config.MonitoringInterval, _token.Token); } while (!_token.IsCancellationRequested); }, _token.Token, TaskCreationOptions.LongRunning, TaskScheduler.Default) .ContinueWith((x) => { messageBus.Publish <AutobernerStopWatchingMessage>(); }, TaskContinuationOptions.OnlyOnFaulted); }
private void RestoreCard(CardPramsMessageModel card) { const int divider = 1000; var messageBus = _messageBusFactory.Create(); try { var lmacm = new ControlMemory(); lmacm.Connect(); var flags = lmacm.GpuEntries[card.Id].Flags; var voltageBoost = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.CORE_VOLTAGE_BOOST); var coreclockBoost = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.CORE_CLOCK_BOOST); var memoryclockBoost = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.MEMORY_CLOCK_BOOST); lmacm.GpuEntries[card.Id].ThermalLimitCur = (int)card.TempLimit; lmacm.GpuEntries[card.Id].PowerLimitCur = (int)card.PowerLimit; lmacm.GpuEntries[card.Id].FanSpeedCur = (uint)card.FanSpeed; if (voltageBoost) { lmacm.GpuEntries[card.Id].CoreVoltageBoostCur = (int)card.Voltage; } else { lmacm.GpuEntries[card.Id].CoreVoltageCur = (uint)card.Voltage; } if (coreclockBoost) { lmacm.GpuEntries[card.Id].CoreClockBoostCur = (int)card.CoreClock * divider; } else { lmacm.GpuEntries[card.Id].CoreClockCur = (uint)card.CoreClock * divider; } if (memoryclockBoost) { lmacm.GpuEntries[card.Id].MemoryClockBoostCur = (int)card.MemoryClock * divider; } else { lmacm.GpuEntries[card.Id].MemoryClockCur = (uint)card.MemoryClock * divider; } lmacm.CommitChanges(); lmacm.Disconnect(); if (_logger.IsWarnEnabled) { _logger.Warn($"Restore card > {card}"); } messageBus.Handle(new AutobernerWatchdogResetMessage { Status = MessageStatus.Ok }); } catch (Exception ex) { _logger.Error($"inner exception: {ex.InnerException?.Message ?? string.Empty} > exception: {ex.Message}", ex); messageBus.Handle(new AutobernerWatchdogResetMessage { Status = MessageStatus.Error }); } }
private void RestoreCard(CardParam[] configCards, CardParam card) { const int divider = 1000; var messageBus = _messageBusFactory.Create(); try { if (card == null) { _logger.Error("card for restore is null!, ret <"); return; } var lmacm = new ControlMemory(); lmacm.Connect(); var configCardParam = configCards.FirstOrDefault(x => x.Id == card.Id); if (configCardParam == null) { if (_logger.IsDebugEnabled) { _logger.Debug($"Try restore card > {card} - error > not found in config"); } return; } var flags = lmacm.GpuEntries[card.Id].Flags; var voltageBoost = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.CORE_VOLTAGE_BOOST); var coreclockBoost = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.CORE_CLOCK_BOOST); var memoryclockBoost = flags.HasFlag(MACM_SHARED_MEMORY_GPU_ENTRY_FLAG.MEMORY_CLOCK_BOOST); lmacm.GpuEntries[card.Id].ThermalLimitCur = (int)configCardParam.TempLimit.Current; lmacm.GpuEntries[card.Id].PowerLimitCur = (int)configCardParam.PowerLimit.Current; lmacm.GpuEntries[card.Id].FanSpeedCur = (uint)configCardParam.FanSpeed.Current; if (voltageBoost) { lmacm.GpuEntries[card.Id].CoreVoltageBoostCur = (int)configCardParam.Voltage.Current; } else { lmacm.GpuEntries[card.Id].CoreVoltageCur = (uint)configCardParam.Voltage.Current; } if (coreclockBoost) { lmacm.GpuEntries[card.Id].CoreClockBoostCur = (int)configCardParam.CoreClock.Current * divider; } else { lmacm.GpuEntries[card.Id].CoreClockCur = (uint)configCardParam.CoreClock.Current * divider; } if (memoryclockBoost) { lmacm.GpuEntries[card.Id].MemoryClockBoostCur = (int)configCardParam.MemoryClock.Current * divider; } else { lmacm.GpuEntries[card.Id].MemoryClockCur = (uint)configCardParam.MemoryClock.Current * divider; } lmacm.CommitChanges(); lmacm.Disconnect(); if (_logger.IsWarnEnabled) { _logger.Warn($"Restore card > {card}"); } messageBus.Publish(new AutobernerWatchdogResetMessage { Status = MessageStatus.Ok }); } catch (Exception ex) { _logger.Error($"inner exception: {ex.InnerException.Message} > exception: {ex.Message}", ex); messageBus.Publish(new AutobernerWatchdogResetMessage { Status = MessageStatus.Error }); } }
//private void a private bool ShowMsiState() { txtLog.Clear(); //lvMsi.Items.Clear(); //lvMsi.Clear(); int normalColumnWidth = 20; dgvMSI.Rows.Clear(); dgvMSI.Columns.Clear(); dgvMSI.AutoGenerateColumns = false; dgvMSI.RowHeadersVisible = false; dgvMSI.MultiSelect = false; dgvMSI.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dgvMSI.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; dgvMSI.DefaultCellStyle.WrapMode = DataGridViewTriState.True; //dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() {HeaderText = "Index", ReadOnly = true, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = normalColumnWidth }); //dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() {HeaderText = "Device", ReadOnly = true, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = normalColumnWidth }); //dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() {HeaderText = "GpuId", ReadOnly = true, AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "Index", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "Device", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "GpuId", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "Val", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "FanSpeed", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "CoreClock", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "ShaderClock", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "MemoryClock", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "CoreVoltage", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "MemoryVoltage", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "AuxVoltage", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "CoreVoltageBoost", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "MemoryVoltageBoost", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "AuxVoltageBoost", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "PowerLimit", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "CoreClockBoost", ReadOnly = true, FillWeight = normalColumnWidth }); dgvMSI.Columns.Add(new DataGridViewTextBoxColumn() { HeaderText = "MemoryClockBoost", ReadOnly = true, FillWeight = normalColumnWidth }); //lvMsi.Columns.Add("Index", normalColumnWidth); //lvMsi.Columns.Add("Device", normalColumnWidth); //lvMsi.Columns.Add("GpuId", normalColumnWidth); //foreach (ColumnHeader cl in lvMsi.Columns) //{ // //cl. //} bool result = true; try { if (macm == null) { macm = new ControlMemory(); } else { macm.Disconnect(); macm.Connect(); } } catch (Exception e) { Wr(e.Message); result = false; //return false; } try { if (mahm == null) { mahm = new HardwareMonitor(); } else { mahm.Disconnect(); mahm.Connect(); } } catch (Exception e) { Wr(e.Message); result = false; //return false; } if (!result) { return(result); } for (int i = 0; i < mahm.Header.GpuEntryCount; i++) { //wr("***** MSI AFTERTERBURNER GPU " + i + " *****"); ControlMemoryGpuEntry ge = macm.GpuEntries[i]; dgvMSI.Rows.Add(new String[] { i.ToString(), mahm.GpuEntries[i].Index.ToString(), mahm.GpuEntries[i].Device, mahm.GpuEntries[i].GpuId, "Cur:" + "\n" + "Min:" + "\n" + "Max:" + "\n" + "Def:", ge.FanSpeedCur.ToString() + "\n" + ge.FanSpeedMin.ToString() + "\n" + ge.FanSpeedMax.ToString() + "\n" + ge.FanSpeedDef.ToString(), ge.CoreClockCur.ToString() + "\n" + ge.CoreClockMin.ToString() + "\n" + ge.CoreClockMax.ToString() + "\n" + ge.CoreClockDef.ToString(), ge.ShaderClockCur.ToString() + "\n" + ge.ShaderClockMin.ToString() + "\n" + ge.ShaderClockMax.ToString() + "\n" + ge.ShaderClockDef.ToString(), ge.MemoryClockCur.ToString() + "\n" + ge.MemoryClockMin.ToString() + "\n" + ge.MemoryClockMax.ToString() + "\n" + ge.MemoryClockDef.ToString(), ge.CoreVoltageCur.ToString() + "\n" + ge.CoreVoltageMin.ToString() + "\n" + ge.CoreVoltageMax.ToString() + "\n" + ge.CoreVoltageDef.ToString(), ge.MemoryVoltageCur.ToString() + "\n" + ge.MemoryVoltageMin.ToString() + "\n" + ge.MemoryVoltageMax.ToString() + "\n" + ge.MemoryVoltageDef.ToString(), ge.AuxVoltageCur.ToString() + "\n" + ge.AuxVoltageMin.ToString() + "\n" + ge.AuxVoltageMax.ToString() + "\n" + ge.AuxVoltageDef.ToString(), ge.CoreVoltageBoostCur.ToString() + "\n" + ge.CoreVoltageBoostMin.ToString() + "\n" + ge.CoreVoltageBoostMax.ToString() + "\n" + ge.CoreVoltageBoostDef.ToString(), ge.MemoryVoltageBoostCur.ToString() + "\n" + ge.MemoryVoltageBoostMin.ToString() + "\n" + ge.MemoryVoltageBoostMax.ToString() + "\n" + ge.MemoryVoltageBoostDef.ToString(), ge.AuxVoltageBoostCur.ToString() + "\n" + ge.AuxVoltageBoostMin.ToString() + "\n" + ge.AuxVoltageBoostMax.ToString() + "\n" + ge.AuxVoltageBoostDef.ToString(), ge.PowerLimitCur.ToString() + "\n" + ge.PowerLimitMin.ToString() + "\n" + ge.PowerLimitMax.ToString() + "\n" + ge.PowerLimitDef.ToString(), ge.CoreClockBoostCur.ToString() + "\n" + ge.CoreClockBoostMin.ToString() + "\n" + ge.CoreClockBoostMax.ToString() + "\n" + ge.CoreClockBoostDef.ToString(), ge.MemoryClockBoostCur.ToString() + "\n" + ge.MemoryClockBoostMin.ToString() + "\n" + ge.MemoryClockBoostMax.ToString() + "\n" + ge.MemoryClockBoostDef.ToString() }); //ListViewItem li = lvMsi.Items.Add(mahm.GpuEntries[i].Index.ToString()); //li.SubItems.Add(mahm.GpuEntries[i].Device); //li.SubItems.Add(mahm.GpuEntries[i].GpuId); //li.SubItems.Add(mahm.Entries[i].); } Wr("***** macm.Header.MasterGpu " + macm.Header.MasterGpu.ToString()); Wr(); for (int i = 0; i < macm.Header.GpuEntryCount; i++) { Wr("***** MSI AFTERTERBURNER GPU " + i + " *****"); Wr("Index: " + macm.GpuEntries[i].Index.ToString()); Wr(macm.GpuEntries[i].ToString().Replace(";", Environment.NewLine)); Wr(); } Wr(); Wr("****************************************************************"); Wr(); for (int i = 0; i < mahm.Header.EntryCount; i++) { Wr("***** MSI AFTERTERBURNER DATA SOURCE " + i + " *****"); Wr(mahm.Entries[i].ToString());//.Replace(";", "\n")); Wr(); } return(true); }