static int _ipmi_send_profile(void) { /* * This enum is directly related to the xcc_labels below. If this is * changed it should be altered as well. */ enum { XCC_ENERGY = 0, XCC_CURR_POWER, XCC_LABEL_CNT }; static char *xcc_labels[] = { "Energy", "CurrPower", NULL }; uint16_t i; uint64_t data[XCC_LABEL_CNT]; if (!_running_profile()) return SLURM_SUCCESS; if (dataset_id < 0) { acct_gather_profile_dataset_t dataset[XCC_LABEL_CNT + 1]; for (i = 0; i < XCC_LABEL_CNT; i++) { dataset[i].name = xcc_labels[i]; dataset[i].type = PROFILE_FIELD_UINT64; } dataset[i].name = NULL; dataset[i].type = PROFILE_FIELD_NOT_SET; dataset_id = acct_gather_profile_g_create_dataset( "Energy", NO_PARENT, dataset); if (debug_flags & DEBUG_FLAG_ENERGY) debug("Energy: dataset created (id = %d)", dataset_id); if (dataset_id == SLURM_ERROR) { error("Energy: Failed to create the dataset for IPMI"); return SLURM_ERROR; } } /* pack an array of uint64_t with current power of sensors */ memset(data, 0, sizeof(data)); data[XCC_ENERGY] = xcc_energy.base_consumed_energy; data[XCC_CURR_POWER] = xcc_energy.current_watts; if (debug_flags & DEBUG_FLAG_PROFILE) for (i = 0; i < XCC_LABEL_CNT; i++) info("PROFILE-Energy: %s=%"PRIu64, xcc_labels[i], data[i]); return acct_gather_profile_g_add_sample_data( dataset_id, (void *)data, xcc_energy.poll_time); }
static int _ipmi_send_profile(void) { acct_energy_data_t ener; if (!_running_profile()) return SLURM_SUCCESS; if (debug_flags & DEBUG_FLAG_ENERGY) info("_ipmi_send_profile: consumed %d watts", local_energy->current_watts); memset(&ener, 0, sizeof(acct_energy_data_t)); /*TODO function to calculate Average CPUs Frequency*/ /*ener->cpu_freq = // read /proc/...*/ ener.cpu_freq = 1; ener.time = time(NULL); ener.power = local_energy->current_watts; acct_gather_profile_g_add_sample_data( ACCT_GATHER_PROFILE_ENERGY, &ener); return SLURM_ERROR; }
static int _send_profile(void) { uint64_t curr_watts; acct_gather_profile_dataset_t dataset[] = { { "Power", PROFILE_FIELD_UINT64 }, { NULL, PROFILE_FIELD_NOT_SET } }; static int dataset_id = -1; /* id of the dataset for profile data */ if (!_running_profile()) return SLURM_SUCCESS; if (debug_flags & DEBUG_FLAG_ENERGY) info("_send_profile: consumed %d watts", local_energy->current_watts); if (dataset_id < 0) { dataset_id = acct_gather_profile_g_create_dataset( "Energy", NO_PARENT, dataset); if (debug_flags & DEBUG_FLAG_ENERGY) debug("Energy: dataset created (id = %d)", dataset_id); if (dataset_id == SLURM_ERROR) { error("Energy: Failed to create the dataset for RAPL"); return SLURM_ERROR; } } curr_watts = (uint64_t)local_energy->current_watts; if (debug_flags & DEBUG_FLAG_PROFILE) { info("PROFILE-Energy: power=%u", local_energy->current_watts); } return acct_gather_profile_g_add_sample_data(dataset_id, (void *)&curr_watts, local_energy->poll_time); }