mirror of
https://github.com/hashcat/hashcat.git
synced 2025-01-14 09:40:59 +00:00
Added temperature watchdog and utilization for CPU on linux using sysfs and procfs
This commit is contained in:
parent
bfe83ec138
commit
9fc6c26f8c
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
- Added option --markov-inverse to inverse markov statistics, with the idea of reversing the order of the password candidates
|
- Added option --markov-inverse to inverse markov statistics, with the idea of reversing the order of the password candidates
|
||||||
- Added temperature watchdog and fanspeed readings for CPU and GPU on macOS using iokit
|
- Added temperature watchdog and fanspeed readings for CPU and GPU on macOS using iokit
|
||||||
- Added temperature watchdog for CPU on linux using sysfs
|
- Added temperature watchdog and utilization for CPU on linux using sysfs and procfs
|
||||||
|
|
||||||
##
|
##
|
||||||
## Bugs
|
## Bugs
|
||||||
|
@ -15,6 +15,8 @@ static const char SENSOR_K10TEMP[] = "k10temp";
|
|||||||
static const char SENSOR_K8TEMP[] = "k8temp";
|
static const char SENSOR_K8TEMP[] = "k8temp";
|
||||||
static const char SENSOR_ACPITZ[] = "acpitz";
|
static const char SENSOR_ACPITZ[] = "acpitz";
|
||||||
|
|
||||||
|
static const char PROC_STAT[] = "/proc/stat";
|
||||||
|
|
||||||
typedef int HM_ADAPTER_SYSFS_CPU;
|
typedef int HM_ADAPTER_SYSFS_CPU;
|
||||||
|
|
||||||
typedef void *SYSFS_CPU_LIB;
|
typedef void *SYSFS_CPU_LIB;
|
||||||
@ -27,6 +29,21 @@ typedef struct hm_sysfs_cpu_lib
|
|||||||
|
|
||||||
} hm_sysfs_cpu_lib_t;
|
} hm_sysfs_cpu_lib_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned long user;
|
||||||
|
unsigned long nice;
|
||||||
|
unsigned long system;
|
||||||
|
unsigned long idle;
|
||||||
|
unsigned long iowait;
|
||||||
|
unsigned long irq;
|
||||||
|
unsigned long softirq;
|
||||||
|
unsigned long steal;
|
||||||
|
unsigned long guest;
|
||||||
|
unsigned long guest_nice;
|
||||||
|
|
||||||
|
} proc_stat_t;
|
||||||
|
|
||||||
typedef hm_sysfs_cpu_lib_t SYSFS_CPU_PTR;
|
typedef hm_sysfs_cpu_lib_t SYSFS_CPU_PTR;
|
||||||
|
|
||||||
bool sysfs_cpu_init (void *hashcat_ctx);
|
bool sysfs_cpu_init (void *hashcat_ctx);
|
||||||
@ -34,4 +51,7 @@ void sysfs_cpu_close (void *hashcat_ctx);
|
|||||||
char *hm_SYSFS_CPU_get_syspath_hwmon ();
|
char *hm_SYSFS_CPU_get_syspath_hwmon ();
|
||||||
int hm_SYSFS_CPU_get_temperature_current (void *hashcat_ctx, int *val);
|
int hm_SYSFS_CPU_get_temperature_current (void *hashcat_ctx, int *val);
|
||||||
|
|
||||||
|
bool read_proc_stat (void *hashcat_ctx, proc_stat_t *proc_stat);
|
||||||
|
int hm_SYSFS_CPU_get_utilization_current (void *hashcat_ctx, int *val);
|
||||||
|
|
||||||
#endif // _EXT_SYSFS_CPU_H
|
#endif // _EXT_SYSFS_CPU_H
|
||||||
|
@ -132,3 +132,81 @@ int hm_SYSFS_CPU_get_temperature_current (void *hashcat_ctx, int *val)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool read_proc_stat (void *hashcat_ctx, proc_stat_t *proc_stat)
|
||||||
|
{
|
||||||
|
FILE *fd = fopen (PROC_STAT, "r");
|
||||||
|
|
||||||
|
if (fd == NULL) return false;
|
||||||
|
|
||||||
|
const int e = fscanf (fd, "cpu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu\n",
|
||||||
|
&proc_stat->user,
|
||||||
|
&proc_stat->nice,
|
||||||
|
&proc_stat->system,
|
||||||
|
&proc_stat->idle,
|
||||||
|
&proc_stat->iowait,
|
||||||
|
&proc_stat->irq,
|
||||||
|
&proc_stat->softirq,
|
||||||
|
&proc_stat->steal,
|
||||||
|
&proc_stat->guest,
|
||||||
|
&proc_stat->guest_nice);
|
||||||
|
|
||||||
|
fclose (fd);
|
||||||
|
|
||||||
|
if (e != 10)
|
||||||
|
{
|
||||||
|
event_log_error (hashcat_ctx, "%s: unexpected data.", PROC_STAT);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int hm_SYSFS_CPU_get_utilization_current (void *hashcat_ctx, int *val)
|
||||||
|
{
|
||||||
|
static proc_stat_t prev;
|
||||||
|
|
||||||
|
proc_stat_t cur;
|
||||||
|
|
||||||
|
if (read_proc_stat (hashcat_ctx, &cur) == false) return false;
|
||||||
|
|
||||||
|
unsigned long prev_idle = prev.idle
|
||||||
|
+ prev.iowait;
|
||||||
|
|
||||||
|
unsigned long prev_load = prev.user
|
||||||
|
+ prev.nice
|
||||||
|
+ prev.system
|
||||||
|
+ prev.irq
|
||||||
|
+ prev.softirq;
|
||||||
|
|
||||||
|
unsigned long prev_total = prev_idle + prev_load;
|
||||||
|
|
||||||
|
|
||||||
|
unsigned long cur_idle = cur.idle
|
||||||
|
+ cur.iowait;
|
||||||
|
|
||||||
|
unsigned long cur_load = cur.user
|
||||||
|
+ cur.nice
|
||||||
|
+ cur.system
|
||||||
|
+ cur.irq
|
||||||
|
+ cur.softirq;
|
||||||
|
|
||||||
|
unsigned long cur_total = cur_idle + cur_load;
|
||||||
|
|
||||||
|
memcpy (&prev, &cur, sizeof (prev));
|
||||||
|
|
||||||
|
unsigned long rem_total = cur_total - prev_total;
|
||||||
|
unsigned long rem_idle = cur_idle - prev_idle;
|
||||||
|
|
||||||
|
if (rem_total)
|
||||||
|
{
|
||||||
|
const double cpu_percentage = ((double) (rem_total - rem_idle) / (double) rem_total) * 100;
|
||||||
|
|
||||||
|
*val = (int) cpu_percentage;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
19
src/hwmon.c
19
src/hwmon.c
@ -750,6 +750,23 @@ int hm_get_utilization_with_devices_idx (hashcat_ctx_t *hashcat_ctx, const int b
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (backend_ctx->devices_param[backend_device_idx].opencl_device_type & CL_DEVICE_TYPE_CPU)
|
||||||
|
{
|
||||||
|
if (hwmon_ctx->hm_sysfs_cpu)
|
||||||
|
{
|
||||||
|
int utilization = 0;
|
||||||
|
|
||||||
|
if (hm_SYSFS_CPU_get_utilization_current (hashcat_ctx, &utilization) == -1)
|
||||||
|
{
|
||||||
|
hwmon_ctx->hm_device[backend_device_idx].utilization_get_supported = false;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return utilization;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hwmon_ctx->hm_device[backend_device_idx].utilization_get_supported = false;
|
hwmon_ctx->hm_device[backend_device_idx].utilization_get_supported = false;
|
||||||
@ -1482,7 +1499,7 @@ int hwmon_ctx_init (hashcat_ctx_t *hashcat_ctx)
|
|||||||
hm_adapters_sysfs_cpu[device_id].fanpolicy_get_supported = false;
|
hm_adapters_sysfs_cpu[device_id].fanpolicy_get_supported = false;
|
||||||
hm_adapters_sysfs_cpu[device_id].memoryspeed_get_supported = false;
|
hm_adapters_sysfs_cpu[device_id].memoryspeed_get_supported = false;
|
||||||
hm_adapters_sysfs_cpu[device_id].temperature_get_supported = true;
|
hm_adapters_sysfs_cpu[device_id].temperature_get_supported = true;
|
||||||
hm_adapters_sysfs_cpu[device_id].utilization_get_supported = false;
|
hm_adapters_sysfs_cpu[device_id].utilization_get_supported = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user