double power_peak;
double power_scale;
tmgr_trace_event_t power_event;
+ int core;
e_surf_resource_state_t state_current;
tmgr_trace_event_t state_event;
lmm_constraint_t constraint;
s_surf_action_cpu_Cas01_im_t action;
cpu = xbt_new0(s_cpu_Cas01_im_t, 1);
- xbt_assert0(core==1,"Multi-core not handled with this model yet");
-#ifdef HAVE_TRACING
- TRACE_surf_host_declaration(name, power_scale * power_peak);
-#endif
-
xbt_assert1(!surf_model_resource_by_name(surf_cpu_model, name),
"Host '%s' declared several times in the platform file",
name);
if (power_trace)
cpu->power_event =
tmgr_history_add_trace(history, power_trace, 0.0, 0, cpu);
+ cpu->core = core;
+ xbt_assert1(core>0,"Invalid number of cores %d",core);
cpu->state_current = state_initial;
if (state_trace)
cpu->constraint =
lmm_constraint_new(cpu_im_maxmin_system, cpu,
- cpu->power_scale * cpu->power_peak);
+ cpu->core * cpu->power_scale * cpu->power_peak);
xbt_dict_set(surf_model_resource_set(surf_cpu_model), name, cpu,
surf_resource_free);
GENERIC_ACTION(action).finish = surf_get_clock();
/* set the remains to 0 due to precision problems when updating the remaining amount */
#ifdef HAVE_TRACING
- TRACE_surf_host_set_utilization(((cpu_Cas01_im_t)
- (action->cpu))->generic_resource.name,
- action->
- generic_lmm_action.generic_action.data,
- (surf_action_t) action,
- lmm_variable_getvalue
- (GENERIC_LMM_ACTION(action).variable),
- ((cpu_Cas01_im_t)
- (action->cpu))->last_update,
- now -
- ((cpu_Cas01_im_t)
- (action->cpu))->last_update);
+ {
+ cpu_Cas01_im_t cpu = ((cpu_Cas01_im_t)(action->cpu));
+ TRACE_surf_host_set_utilization(cpu->generic_resource.name,
+ action->generic_lmm_action.generic_action.data,
+ (surf_action_t) action,
+ lmm_variable_getvalue (GENERIC_LMM_ACTION(action).variable),
+ cpu->last_update,
+ now - cpu->last_update);
+ }
#endif
GENERIC_ACTION(action).remains = 0;
cpu_im_cpu_action_state_set((surf_action_t) action, SURF_ACTION_DONE);
cpu_im_update_remains(action->cpu, surf_get_clock());
}
+#ifdef HAVE_TRACING
+ {
+ //defining the last timestamp that we can safely dump to trace file
+ //without losing the event ascending order (considering all CPU's)
+ cpu_Cas01_im_t cpu;
+ xbt_dict_cursor_t cursor;
+ char *key;
+ double smaller = -1;
+ xbt_dict_foreach(surf_model_resource_set(surf_cpu_model), cursor, key, cpu){
+ if (smaller < 0){
+ smaller = cpu->last_update;
+ continue;
+ }
+ if (cpu->last_update < smaller){
+ smaller = cpu->last_update;
+ }
+ }
+ if (smaller > 0) {
+ TRACE_last_timestamp_to_dump = smaller;
+ }
+ }
+#endif
return;
}
double value, double date)
{
cpu_Cas01_im_t cpu = id;
+ lmm_variable_t var = NULL;
+ lmm_element_t elem = NULL;
+
if (event_type == cpu->power_event) {
cpu->power_scale = value;
lmm_update_constraint_bound(cpu_im_maxmin_system, cpu->constraint,
- cpu->power_scale * cpu->power_peak);
+ cpu->core * cpu->power_scale * cpu->power_peak);
#ifdef HAVE_TRACING
TRACE_surf_host_set_power(date, cpu->generic_resource.name,
- cpu->power_scale * cpu->power_peak);
+ cpu->core * cpu->power_scale * cpu->power_peak);
#endif
+ while ((var = lmm_get_var_from_cnst
+ (cpu_im_maxmin_system, cpu->constraint, &elem))) {
+ surf_action_cpu_Cas01_im_t action = lmm_variable_id(var);
+ lmm_update_variable_bound(cpu_im_maxmin_system, action->generic_lmm_action.variable,
+ cpu->power_scale * cpu->power_peak);
+ }
xbt_swag_insert(cpu, cpu_im_modified_cpu);
if (tmgr_trace_event_free(event_type))
cpu->power_event = NULL;
GENERIC_LMM_ACTION(action).variable =
lmm_variable_new(cpu_im_maxmin_system, action,
- GENERIC_ACTION(action).priority, -1.0, 1);
+ GENERIC_ACTION(action).priority, CPU->power_scale * CPU->power_peak, 1);
action->index_heap = -1;
action->cpu = CPU;
xbt_swag_insert(CPU, cpu_im_modified_cpu);
XBT_OUT;
}
+#ifdef HAVE_TRACING
+static void cpu_im_action_set_category(surf_action_t action,
+ const char *category)
+{
+ XBT_IN2("(%p,%s)", action, category);
+ action->category = xbt_strdup (category);
+ XBT_OUT;
+}
+#endif
+
static double cpu_im_action_get_remains(surf_action_t action)
{
XBT_IN1("(%p)", action);
tmgr_trace_t state_trace,
xbt_dict_t cpu_properties)
{
- xbt_assert0(core==1,"Multi-core not handled with this model yet");
cpu_im_new(name, power_peak, power_scale, power_trace, core,
state_initial, state_trace, cpu_properties);
}
surf_cpu_model->is_suspended = cpu_im_action_is_suspended;
surf_cpu_model->set_max_duration = cpu_im_action_set_max_duration;
surf_cpu_model->set_priority = cpu_im_action_set_priority;
+#ifdef HAVE_TRACING
+ surf_cpu_model->set_category = cpu_im_action_set_category;
+#endif
surf_cpu_model->get_remains = cpu_im_action_get_remains;
surf_cpu_model->extension.cpu.execute = cpu_im_execute;