Browse Source

Decrease avalon frequency in auto mode if we are unable to maintain the temperature in the optimal range.

nfactor-troky
Con Kolivas 11 years ago
parent
commit
ce214e1270
  1. 26
      driver-avalon.c
  2. 1
      driver-avalon.h

26
driver-avalon.c

@ -885,15 +885,19 @@ static void *avalon_send_tasks(void *userdata)
if (opt_avalon_auto && info->auto_queued >= AVALON_AUTO_CYCLE) { if (opt_avalon_auto && info->auto_queued >= AVALON_AUTO_CYCLE) {
mutex_lock(&info->lock); mutex_lock(&info->lock);
if (info->auto_nonces >= (AVALON_AUTO_CYCLE * 19 / 20) && if (!info->optimal) {
info->auto_nonces <= (AVALON_AUTO_CYCLE * 21 / 20)) { applog(LOG_WARNING, "AVA%i: Above optimal temperature, throttling",
int total = info->auto_nonces + info->auto_hw; avalon->device_id);
avalon_dec_freq(info);
/* Try to keep hw errors ~1% */ } else if (info->auto_nonces >= (AVALON_AUTO_CYCLE * 19 / 20) &&
if (info->auto_hw * 200 < total) info->auto_nonces <= (AVALON_AUTO_CYCLE * 21 / 20)) {
avalon_inc_freq(info); int total = info->auto_nonces + info->auto_hw;
else if (info->auto_hw * 100 > total)
avalon_dec_freq(info); /* Try to keep hw errors ~1% */
if (info->auto_hw * 200 < total)
avalon_inc_freq(info);
else if (info->auto_hw * 100 > total)
avalon_dec_freq(info);
} }
avalon_reset_auto(info); avalon_reset_auto(info);
mutex_unlock(&info->lock); mutex_unlock(&info->lock);
@ -1083,6 +1087,10 @@ static inline void adjust_fan(struct avalon_info *info)
temp_drop(info, temp_new); temp_drop(info, temp_new);
} }
info->temp_old = temp_new; info->temp_old = temp_new;
if (info->temp_old <= opt_avalon_temp)
info->optimal = true;
else
info->optimal = false;
} }
static void avalon_update_temps(struct cgpu_info *avalon, struct avalon_info *info, static void avalon_update_temps(struct cgpu_info *avalon, struct avalon_info *info,

1
driver-avalon.h

@ -134,6 +134,7 @@ struct avalon_info {
bool idle; bool idle;
bool reset; bool reset;
bool overheat; bool overheat;
bool optimal;
}; };
#define AVALON_WRITE_SIZE (sizeof(struct avalon_task)) #define AVALON_WRITE_SIZE (sizeof(struct avalon_task))

Loading…
Cancel
Save