Exemplo n.º 1
0
extern int acct_gather_energy_unpack(acct_gather_energy_t **energy, Buf buffer,
				     uint16_t protocol_version)
{
	acct_gather_energy_t *energy_ptr = acct_gather_energy_alloc();
	*energy = energy_ptr;

	if (protocol_version >= SLURM_2_6_PROTOCOL_VERSION) {
		safe_unpack32(&energy_ptr->base_consumed_energy, buffer);
		safe_unpack32(&energy_ptr->base_watts, buffer);
		safe_unpack32(&energy_ptr->consumed_energy, buffer);
		safe_unpack32(&energy_ptr->current_watts, buffer);
		safe_unpack32(&energy_ptr->previous_consumed_energy, buffer);
		safe_unpack_time(&energy_ptr->poll_time, buffer);
	} else {
		safe_unpack32(&energy_ptr->base_consumed_energy, buffer);
		safe_unpack32(&energy_ptr->base_watts, buffer);
		safe_unpack32(&energy_ptr->consumed_energy, buffer);
		safe_unpack32(&energy_ptr->current_watts, buffer);
	}

	return SLURM_SUCCESS;

unpack_error:
	acct_gather_energy_destroy(energy_ptr);
	*energy = NULL;
	return SLURM_ERROR;
}
Exemplo n.º 2
0
extern int fini(void)
{
	if (!_run_in_daemon())
		return SLURM_SUCCESS;

	acct_gather_energy_destroy(local_energy);
	local_energy = NULL;
	return SLURM_SUCCESS;
}
Exemplo n.º 3
0
static int _get_joules_task(uint16_t delta)
{
	acct_gather_energy_t *last_energy = NULL;
	time_t now;
	static bool first = true;
	static uint32_t start_current_energy = 0;
	uint32_t adjustment = 0;

	last_energy = local_energy;
	local_energy = NULL;

	if (slurm_get_node_energy(NULL, delta, &local_energy)) {
		error("_get_joules_task: can't get info from slurmd");
		local_energy = last_energy;
		return SLURM_ERROR;
	}
	now = time(NULL);

	local_energy->previous_consumed_energy = last_energy->consumed_energy;

	if (slurm_ipmi_conf.adjustment)
		adjustment = _get_additional_consumption(
			local_energy->poll_time, now,
			local_energy->current_watts,
			local_energy->current_watts);

	if (!first) {
		local_energy->consumed_energy -= start_current_energy;

		local_energy->base_consumed_energy =
			(local_energy->consumed_energy
			 - last_energy->consumed_energy)
			+ adjustment;
	} else {
		/* This is just for the step, so take all the pervious
		   consumption out of the mix.
		*/
		start_current_energy =
			local_energy->consumed_energy + adjustment;
		local_energy->base_consumed_energy = 0;
		first = false;
	}

	local_energy->consumed_energy = local_energy->previous_consumed_energy
		+ local_energy->base_consumed_energy;

	acct_gather_energy_destroy(last_energy);

	if (debug_flags & DEBUG_FLAG_ENERGY)
		info("_get_joules_task: consumed %u Joules "
		     "(received %u(%u watts) from slurmd)",
		     local_energy->consumed_energy,
		     local_energy->base_consumed_energy,
		     local_energy->current_watts);

	return SLURM_SUCCESS;
}
Exemplo n.º 4
0
/* Purge the contents of a node record */
extern void purge_node_rec (struct node_record *node_ptr)
{
	xfree(node_ptr->arch);
	xfree(node_ptr->comm_name);
	xfree(node_ptr->features);
	xfree(node_ptr->gres);
	if (node_ptr->gres_list)
		list_destroy(node_ptr->gres_list);
	xfree(node_ptr->name);
	xfree(node_ptr->node_hostname);
	xfree(node_ptr->os);
	xfree(node_ptr->part_pptr);
	xfree(node_ptr->reason);
	acct_gather_energy_destroy(node_ptr->energy);
	select_g_select_nodeinfo_free(node_ptr->select_nodeinfo);
}
Exemplo n.º 5
0
extern int fini(void)
{
	if (!_run_in_daemon())
		return SLURM_SUCCESS;

	flag_energy_accounting_shutdown = true;

	slurm_mutex_lock(&ipmi_mutex);
	if (thread_ipmi_id_run)
		pthread_cancel(thread_ipmi_id_run);
	if (cleanup_handler_thread)
		pthread_join(cleanup_handler_thread, NULL);
	slurm_mutex_unlock(&ipmi_mutex);

	acct_gather_energy_destroy(local_energy);
	local_energy = NULL;
	return SLURM_SUCCESS;
}
Exemplo n.º 6
0
extern int acct_gather_energy_unpack(acct_gather_energy_t **energy, Buf buffer,
				     uint16_t protocol_version, bool need_alloc)
{
	uint32_t uint32_tmp;
	acct_gather_energy_t *energy_ptr;

	if (need_alloc) {
		energy_ptr = acct_gather_energy_alloc(1);
		*energy = energy_ptr;
	} else {
		energy_ptr = *energy;
	}

	if (protocol_version >= SLURM_15_08_PROTOCOL_VERSION) {
		safe_unpack64(&energy_ptr->base_consumed_energy, buffer);
		safe_unpack32(&energy_ptr->base_watts, buffer);
		safe_unpack64(&energy_ptr->consumed_energy, buffer);
		safe_unpack32(&energy_ptr->current_watts, buffer);
		safe_unpack64(&energy_ptr->previous_consumed_energy, buffer);
		safe_unpack_time(&energy_ptr->poll_time, buffer);
	} else if (protocol_version >= SLURM_MIN_PROTOCOL_VERSION) {
		safe_unpack32(&uint32_tmp, buffer);
		energy_ptr->base_consumed_energy = (uint64_t) uint32_tmp;
		safe_unpack32(&energy_ptr->base_watts, buffer);
		safe_unpack32(&uint32_tmp, buffer);
		energy_ptr->consumed_energy = (uint64_t) uint32_tmp;
		safe_unpack32(&energy_ptr->current_watts, buffer);
		safe_unpack32(&uint32_tmp, buffer);
		energy_ptr->previous_consumed_energy = (uint64_t) uint32_tmp;
		safe_unpack_time(&energy_ptr->poll_time, buffer);
	}

	return SLURM_SUCCESS;

unpack_error:
	if (need_alloc) {
		acct_gather_energy_destroy(energy_ptr);
		*energy = NULL;
	} else
		memset(energy_ptr, 0, sizeof(acct_gather_energy_t));

	return SLURM_ERROR;
}
Exemplo n.º 7
0
/* Purge the contents of a node record */
extern void purge_node_rec (struct node_record *node_ptr)
{
	xfree(node_ptr->arch);
	xfree(node_ptr->comm_name);
	xfree(node_ptr->cpu_spec_list);
	xfree(node_ptr->features);
	xfree(node_ptr->gres);
	FREE_NULL_LIST(node_ptr->gres_list);
	xfree(node_ptr->name);
	xfree(node_ptr->node_hostname);
	FREE_NULL_BITMAP(node_ptr->node_spec_bitmap);
	xfree(node_ptr->os);
	xfree(node_ptr->part_pptr);
	xfree(node_ptr->power);
	xfree(node_ptr->reason);
	xfree(node_ptr->version);
	acct_gather_energy_destroy(node_ptr->energy);
	ext_sensors_destroy(node_ptr->ext_sensors);
	select_g_select_nodeinfo_free(node_ptr->select_nodeinfo);
	xfree(node_ptr->tres_str);
}