e_surf_cpu_state_t state_initial = SURF_CPU_OFF;
tmgr_trace_t state_trace = NULL;
- surf_parse_get_double(&power_scale, A_surfxml_host_power);
+ power_scale = get_cpu_power(A_surfxml_host_power);
surf_parse_get_double(&power_initial, A_surfxml_host_availability);
surf_parse_get_trace(&power_trace, A_surfxml_host_availability_file);
}
-static void parse_file(const char *file)
+static void add_traces_cpu(void) {
+ xbt_dict_cursor_t cursor=NULL;
+ char *trace_name,*elm;
+
+ static int called = 0;
+
+ if (called) return;
+ called = 1;
+
+
+ /* connect all traces relative to hosts */
+ xbt_dict_foreach(trace_connect_list_host_avail, cursor, trace_name, elm) {
+ tmgr_trace_t trace = xbt_dict_get_or_null(traces_set_list, trace_name);
+ cpu_Cas01_t host = xbt_dict_get_or_null(cpu_set, elm);
+
+ xbt_assert1(host, "Host %s undefined", elm);
+ xbt_assert1(trace, "Trace %s undefined", trace_name);
+
+ host->state_event = tmgr_history_add_trace(history, trace, 0.0, 0, host);
+ }
+
+ xbt_dict_foreach(trace_connect_list_power, cursor, trace_name, elm) {
+ tmgr_trace_t trace = xbt_dict_get_or_null(traces_set_list, trace_name);
+ cpu_Cas01_t host = xbt_dict_get_or_null(cpu_set, elm);
+
+ xbt_assert1(host, "Host %s undefined", elm);
+ xbt_assert1(trace, "Trace %s undefined", trace_name);
+
+ host->power_event = tmgr_history_add_trace(history, trace, 0.0, 0, host);
+ }
+}
+
+static void define_callbacks(const char *file)
{
surf_parse_reset_parser();
surfxml_add_callback(STag_surfxml_host_cb_list, parse_cpu_init);
- surfxml_add_callback(STag_surfxml_prop_cb_list, &parse_properties);
-
- surf_parse_open(file);
- xbt_assert1((!surf_parse()), "Parse error in %s", file);
- surf_parse_close();
+ surfxml_add_callback(STag_surfxml_prop_cb_list, parse_properties);
+ surfxml_add_callback(STag_surfxml_random_cb_list, &init_randomness);
+ surfxml_add_callback(ETag_surfxml_random_cb_list, &add_randomness);
}
static void *name_service(const char *name)
static surf_action_t action_sleep(void *cpu, double duration)
{
surf_action_cpu_Cas01_t action = NULL;
-
+ if (duration>0)
+ duration=MAX(duration,MAXMIN_PRECISION);
XBT_IN2("(%s,%g)", ((cpu_Cas01_t) cpu)->name, duration);
action = (surf_action_cpu_Cas01_t) execute(cpu, 1.0);
action->generic_action.max_duration = duration;
action->suspended = 2;
+
lmm_update_variable_weight(cpu_maxmin_system, action->variable, 0.0);
XBT_OUT;
return (surf_action_t) action;
if (surf_cpu_model)
return;
surf_cpu_model_init_internal();
- parse_file(filename);
+ define_callbacks(filename);
xbt_dynar_push(model_list, &surf_cpu_model);
}