mirror of
https://github.com/hashcat/hashcat.git
synced 2024-11-26 09:58:16 +00:00
Switch CPU affinity stuff to event_log_*
This commit is contained in:
parent
42677df2a6
commit
88565b4a5e
@ -17,12 +17,13 @@
|
|||||||
#if defined (__APPLE__)
|
#if defined (__APPLE__)
|
||||||
#include <mach-o/dyld.h>
|
#include <mach-o/dyld.h>
|
||||||
#include <mach/mach.h>
|
#include <mach/mach.h>
|
||||||
|
#include <mach/thread_policy.h>
|
||||||
#endif // __APPLE__
|
#endif // __APPLE__
|
||||||
|
|
||||||
#if defined (_WIN)
|
#if defined (_WIN)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif // _WIN
|
#endif // _WIN
|
||||||
|
|
||||||
void set_cpu_affinity (char *cpu_affinity);
|
int set_cpu_affinity (hashcat_ctx_t *hashcat_ctx);
|
||||||
|
|
||||||
#endif // _AFFINITY_H
|
#endif // _AFFINITY_H
|
||||||
|
120
src/affinity.c
120
src/affinity.c
@ -10,7 +10,7 @@
|
|||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "logging.h"
|
#include "event.h"
|
||||||
#include "affinity.h"
|
#include "affinity.h"
|
||||||
|
|
||||||
#if defined (__APPLE__)
|
#if defined (__APPLE__)
|
||||||
@ -29,7 +29,7 @@ static int CPU_ISSET (int num, cpu_set_t *cs)
|
|||||||
return (cs->count & (1 << num));
|
return (cs->count & (1 << num));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pthread_setaffinity_np (pthread_t thread, size_t cpu_size, cpu_set_t *cpu_set)
|
static int pthread_setaffinity_np (hashcat_ctx_t *hashcat_ctx, pthread_t thread, size_t cpu_size, cpu_set_t *cpu_set)
|
||||||
{
|
{
|
||||||
int core;
|
int core;
|
||||||
|
|
||||||
@ -40,78 +40,86 @@ static int pthread_setaffinity_np (pthread_t thread, size_t cpu_size, cpu_set_t
|
|||||||
|
|
||||||
thread_affinity_policy_data_t policy = { core };
|
thread_affinity_policy_data_t policy = { core };
|
||||||
|
|
||||||
const int rc = thread_policy_set (pthread_mach_thread_np (thread), THREAD_AFFINITY_POLICY, (thread_policy_t) &policy, 1);
|
return thread_policy_set (pthread_mach_thread_np (thread), THREAD_AFFINITY_POLICY, (thread_policy_t) &policy, 1);
|
||||||
|
|
||||||
if (rc != KERN_SUCCESS)
|
|
||||||
{
|
|
||||||
log_error ("ERROR: %s : %d", "thread_policy_set()", rc);
|
|
||||||
|
|
||||||
exit (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void set_cpu_affinity (char *cpu_affinity)
|
#if defined (__FreeBSD__)
|
||||||
|
typedef cpuset_t cpu_set_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int set_cpu_affinity (hashcat_ctx_t *hashcat_ctx)
|
||||||
{
|
{
|
||||||
#if defined(_WIN)
|
const user_options_t *user_options = hashcat_ctx->user_options;
|
||||||
|
|
||||||
|
if (user_options->cpu_affinity == NULL) return 0;
|
||||||
|
|
||||||
|
#if defined (_WIN)
|
||||||
DWORD_PTR aff_mask = 0;
|
DWORD_PTR aff_mask = 0;
|
||||||
#elif defined(__FreeBSD__)
|
#else
|
||||||
cpuset_t cpuset;
|
|
||||||
CPU_ZERO (&cpuset);
|
|
||||||
#elif defined(_POSIX)
|
|
||||||
cpu_set_t cpuset;
|
cpu_set_t cpuset;
|
||||||
CPU_ZERO (&cpuset);
|
CPU_ZERO (&cpuset);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (cpu_affinity)
|
char *devices = mystrdup (user_options->cpu_affinity);
|
||||||
|
|
||||||
|
char *next = strtok (devices, ",");
|
||||||
|
|
||||||
|
do
|
||||||
{
|
{
|
||||||
char *devices = mystrdup (cpu_affinity);
|
int cpu_id = atoi (next);
|
||||||
|
|
||||||
char *next = strtok (devices, ",");
|
if (cpu_id == 0)
|
||||||
|
|
||||||
do
|
|
||||||
{
|
{
|
||||||
int cpu_id = atoi (next);
|
|
||||||
|
|
||||||
if (cpu_id == 0)
|
|
||||||
{
|
|
||||||
#if defined (_WIN)
|
|
||||||
aff_mask = 0;
|
|
||||||
#elif defined (_POSIX)
|
|
||||||
CPU_ZERO (&cpuset);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (cpu_id > 32)
|
|
||||||
{
|
|
||||||
log_error ("ERROR: Invalid cpu_id %u specified", cpu_id);
|
|
||||||
|
|
||||||
exit (-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined (_WIN)
|
#if defined (_WIN)
|
||||||
aff_mask |= 1u << (cpu_id - 1);
|
aff_mask = 0;
|
||||||
#elif defined (_POSIX)
|
#else
|
||||||
CPU_SET ((cpu_id - 1), &cpuset);
|
CPU_ZERO (&cpuset);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} while ((next = strtok (NULL, ",")) != NULL);
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
myfree (devices);
|
if (cpu_id > 32)
|
||||||
|
{
|
||||||
|
event_log_error (hashcat_ctx, "ERROR: Invalid cpu_id %u specified", cpu_id);
|
||||||
|
|
||||||
|
return (-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined (_WIN)
|
||||||
|
aff_mask |= 1u << (cpu_id - 1);
|
||||||
|
#else
|
||||||
|
CPU_SET ((cpu_id - 1), &cpuset);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} while ((next = strtok (NULL, ",")) != NULL);
|
||||||
|
|
||||||
|
myfree (devices);
|
||||||
|
|
||||||
|
#if defined (_WIN)
|
||||||
|
|
||||||
|
SetProcessAffinityMask (GetCurrentProcess (), aff_mask);
|
||||||
|
|
||||||
|
if (SetThreadAffinityMask (GetCurrentThread (), aff_mask) == 0)
|
||||||
|
{
|
||||||
|
event_log_error (hashcat_ctx, "ERROR: %s", "SetThreadAffinityMask()");
|
||||||
|
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined( _WIN)
|
#else
|
||||||
SetProcessAffinityMask (GetCurrentProcess (), aff_mask);
|
|
||||||
SetThreadAffinityMask (GetCurrentThread (), aff_mask);
|
|
||||||
#elif defined(__FreeBSD__)
|
|
||||||
pthread_t thread = pthread_self ();
|
pthread_t thread = pthread_self ();
|
||||||
pthread_setaffinity_np (thread, sizeof (cpuset_t), &cpuset);
|
|
||||||
#elif defined(_POSIX)
|
if (pthread_setaffinity_np (thread, sizeof (cpu_set_t), &cpuset) == -1)
|
||||||
pthread_t thread = pthread_self ();
|
{
|
||||||
pthread_setaffinity_np (thread, sizeof (cpu_set_t), &cpuset);
|
event_log_error (hashcat_ctx, "ERROR: %s", "pthread_setaffinity_np()");
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -845,10 +845,24 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, char *install_folder, char *shared_fold
|
|||||||
|
|
||||||
user_options_extra_init (hashcat_ctx);
|
user_options_extra_init (hashcat_ctx);
|
||||||
|
|
||||||
// from here all user configuration is pre-processed so we can start logging
|
// from here all user configuration is pre-processed so we can start logging if we want to
|
||||||
|
|
||||||
EVENT (EVENT_LOGFILE_TOP_INITIALIZE);
|
EVENT (EVENT_LOGFILE_TOP_INITIALIZE);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cpu affinity
|
||||||
|
*/
|
||||||
|
|
||||||
|
const int rc_affinity = set_cpu_affinity (hashcat_ctx);
|
||||||
|
|
||||||
|
if (rc_affinity == -1) return -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* prepare seeding for random number generator, required by logfile and rules generator
|
||||||
|
*/
|
||||||
|
|
||||||
|
setup_seeding (user_options->rp_gen_seed_chgd, user_options->rp_gen_seed);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* To help users a bit
|
* To help users a bit
|
||||||
*/
|
*/
|
||||||
@ -857,12 +871,6 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, char *install_folder, char *shared_fold
|
|||||||
|
|
||||||
setup_umask ();
|
setup_umask ();
|
||||||
|
|
||||||
/**
|
|
||||||
* prepare seeding for random number generator, required by logfile and rules generator
|
|
||||||
*/
|
|
||||||
|
|
||||||
setup_seeding (user_options->rp_gen_seed_chgd, user_options->rp_gen_seed);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* tuning db
|
* tuning db
|
||||||
*/
|
*/
|
||||||
@ -912,6 +920,7 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, char *install_folder, char *shared_fold
|
|||||||
const int rc_potfile_init = potfile_init (hashcat_ctx);
|
const int rc_potfile_init = potfile_init (hashcat_ctx);
|
||||||
|
|
||||||
if (rc_potfile_init == -1) return -1;
|
if (rc_potfile_init == -1) return -1;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dictstat init
|
* dictstat init
|
||||||
*/
|
*/
|
||||||
@ -938,15 +947,6 @@ int hashcat (hashcat_ctx_t *hashcat_ctx, char *install_folder, char *shared_fold
|
|||||||
|
|
||||||
if (rc_debugfile_init == -1) return -1;
|
if (rc_debugfile_init == -1) return -1;
|
||||||
|
|
||||||
/**
|
|
||||||
* cpu affinity
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (user_options->cpu_affinity)
|
|
||||||
{
|
|
||||||
set_cpu_affinity (user_options->cpu_affinity);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Init OpenCL library loader
|
* Init OpenCL library loader
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user