X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1e73faf0938f7ef712e1711e3b79e0be16441a0e..a1688a8f4d3a06b7dfd59fdcf06c7a198b235fbb:/src/surf/surfxml_parse.c diff --git a/src/surf/surfxml_parse.c b/src/surf/surfxml_parse.c index 95080a44d5..661240fdae 100644 --- a/src/surf/surfxml_parse.c +++ b/src/surf/surfxml_parse.c @@ -109,18 +109,53 @@ double surf_parse_get_time(const char *string) return surf_parse_get_value_with_unit(string, units); } +double surf_parse_get_size(const char *string) +{ + const struct unit_scale units[] = { + { "TiB", pow(1024, 4) }, + { "GiB", pow(1024, 3) }, + { "MiB", pow(1024, 2) }, + { "KiB", 1024 }, + { "TB", 1e12 }, + { "GB", 1e9 }, + { "MB", 1e6 }, + { "kB", 1e3 }, + { "B", 1.0 }, + { "", 1.0 }, /* default unit is bytes*/ + { "Tib", 0.125 * pow(1024, 4) }, + { "Gib", 0.125 * pow(1024, 3) }, + { "Mib", 0.125 * pow(1024, 2) }, + { "Kib", 0.125 * 1024 }, + { "Tb", 0.125 * 1e12 }, + { "Gb", 0.125 * 1e9 }, + { "Mb", 0.125 * 1e6 }, + { "kb", 0.125 * 1e3 }, + { "b", 0.125 }, + { NULL, 0 } + }; + return surf_parse_get_value_with_unit(string, units); +} + double surf_parse_get_bandwidth(const char *string) { const struct unit_scale units[] = { + { "TiBps", pow(1024, 4) }, + { "GiBps", pow(1024, 3) }, + { "MiBps", pow(1024, 2) }, + { "KiBps", 1024 }, { "TBps", 1e12 }, { "GBps", 1e9 }, { "MBps", 1e6 }, - { "KBps", 1e3 }, + { "kBps", 1e3 }, { "Bps", 1.0 }, - { "", 1.0 }, /* default unit is bytes ber second */ - { "tbps", 0.125 * 1e12 }, - { "gbps", 0.125 * 1e9 }, - { "mbps", 0.125 * 1e6 }, + { "", 1.0 }, /* default unit is bytes per second */ + { "Tibps", 0.125 * pow(1024, 4) }, + { "Gibps", 0.125 * pow(1024, 3) }, + { "Mibps", 0.125 * pow(1024, 2) }, + { "Kibps", 0.125 * 1024 }, + { "Tbps", 0.125 * 1e12 }, + { "Gbps", 0.125 * 1e9 }, + { "Mbps", 0.125 * 1e6 }, { "kbps", 0.125 * 1e3 }, { "bps", 0.125 }, { NULL, 0 } @@ -132,19 +167,19 @@ double surf_parse_get_power(const char *string) { const struct unit_scale units[] = { { "yottaflops", 1e24 }, - { "yf", 1e24 }, + { "Yf", 1e24 }, { "zettaflops", 1e21 }, - { "zf", 1e21 }, + { "Zf", 1e21 }, { "exaflops", 1e18 }, - { "ef", 1e18 }, + { "Ef", 1e18 }, { "petaflops", 1e15 }, - { "pf", 1e15 }, + { "Pf", 1e15 }, { "teraflops", 1e12 }, - { "tf", 1e12 }, + { "Tf", 1e12 }, { "gigaflops", 1e9 }, - { "gf", 1e9 }, + { "Gf", 1e9 }, { "megaflops", 1e6 }, - { "mf", 1e6 }, + { "Mf", 1e6 }, { "kiloflops", 1e3 }, { "kf", 1e3 }, { "flops", 1.0 }, @@ -197,6 +232,7 @@ void ETag_surfxml_storage(void) storage.id = A_surfxml_storage_id; storage.type_id = A_surfxml_storage_typeId; storage.content = A_surfxml_storage_content; + storage.content_type = A_surfxml_storage_content___type; storage.properties = current_property_set; sg_platf_new_storage(&storage); current_property_set = NULL; @@ -213,10 +249,11 @@ void ETag_surfxml_storage___type(void) memset(&storage_type,0,sizeof(storage_type)); storage_type.content = A_surfxml_storage___type_content; + storage_type.content_type = A_surfxml_storage___type_content___type; storage_type.id = A_surfxml_storage___type_id; storage_type.model = A_surfxml_storage___type_model; storage_type.properties = current_property_set; - storage_type.size = surf_parse_get_int(A_surfxml_storage___type_size); + storage_type.size = surf_parse_get_size(A_surfxml_storage___type_size); sg_platf_new_storage_type(&storage_type); current_property_set = NULL; } @@ -243,7 +280,7 @@ void ETag_surfxml_mount(void) memset(&mount,0,sizeof(mount)); mount.name = A_surfxml_mount_name; - mount.id = A_surfxml_mount_id; + mount.storageId = A_surfxml_mount_storageId; sg_platf_new_mount(&mount); } @@ -384,16 +421,44 @@ void STag_surfxml_prop(void) void ETag_surfxml_host(void) { s_sg_platf_host_cbarg_t host; + char* buf; memset(&host,0,sizeof(host)); + host.properties = current_property_set; host.id = A_surfxml_host_id; - host.power_peak = get_cpu_power(A_surfxml_host_power); + + buf = A_surfxml_host_power; + XBT_DEBUG("Buffer: %s", buf); + host.power_peak = xbt_dynar_new(sizeof(double), NULL); + if (strchr(buf, ',') == NULL){ + double power_value = get_cpu_power(A_surfxml_host_power); + xbt_dynar_push_as(host.power_peak,double, power_value); + } + else { + xbt_dynar_t pstate_list = xbt_str_split(buf, ","); + int i; + for (i = 0; i < xbt_dynar_length(pstate_list); i++) { + double power_value; + char* power_value_str; + + xbt_dynar_get_cpy(pstate_list, i, &power_value_str); + xbt_str_trim(power_value_str, NULL); + power_value = get_cpu_power(power_value_str); + xbt_dynar_push_as(host.power_peak, double, power_value); + XBT_DEBUG("Power value: %lf", power_value); + } + } + + XBT_DEBUG("pstate: %s", A_surfxml_host_pstate); + //host.power_peak = get_cpu_power(A_surfxml_host_power); host.power_scale = surf_parse_get_double( A_surfxml_host_availability); host.core_amount = surf_parse_get_int(A_surfxml_host_core); host.power_trace = tmgr_trace_new_from_file(A_surfxml_host_availability___file); host.state_trace = tmgr_trace_new_from_file(A_surfxml_host_state___file); + host.pstate = surf_parse_get_int(A_surfxml_host_pstate); + xbt_assert((A_surfxml_host_state == A_surfxml_host_state_ON) || (A_surfxml_host_state == A_surfxml_host_state_OFF), "Invalid state"); if (A_surfxml_host_state == A_surfxml_host_state_ON) @@ -427,9 +492,11 @@ void STag_surfxml_router(void){ sg_platf_new_router(&router); } -void STag_surfxml_cluster(void){ +void ETag_surfxml_cluster(void){ s_sg_platf_cluster_cbarg_t cluster; memset(&cluster,0,sizeof(cluster)); + cluster.properties = current_property_set; + cluster.id = A_surfxml_cluster_id; cluster.prefix = A_surfxml_cluster_prefix; cluster.suffix = A_surfxml_cluster_suffix; @@ -481,6 +548,12 @@ void STag_surfxml_cluster(void){ cluster.availability_trace = A_surfxml_cluster_availability___file; cluster.state_trace = A_surfxml_cluster_state___file; sg_platf_new_cluster(&cluster); + + current_property_set = NULL; +} + +void STag_surfxml_cluster(void){ + xbt_assert(current_property_set == NULL, "Someone forgot to reset the property set to NULL in its closing tag (or XML malformed)"); } void STag_surfxml_cabinet(void){ @@ -669,17 +742,8 @@ void ETag_surfxml_ASroute(void){ ASroute.src = A_surfxml_ASroute_src; ASroute.dst = A_surfxml_ASroute_dst; - if (!strcmp(current_routing->model_desc->name,"RuleBased")) { - // DIRTY PERL HACK AHEAD: with the rulebased routing, the {src,dst}_gateway fields - // store the provided name instead of the entity directly (model_rulebased_parse_ASroute knows) - // - // This is because the user will provide something like "^AS_(.*)$" instead of the proper name of a given entity - ASroute.gw_src = (sg_routing_edge_t) A_surfxml_ASroute_gw___src; - ASroute.gw_dst = (sg_routing_edge_t) A_surfxml_ASroute_gw___dst; - } else { - ASroute.gw_src = sg_routing_edge_by_name_or_null(A_surfxml_ASroute_gw___src); - ASroute.gw_dst = sg_routing_edge_by_name_or_null(A_surfxml_ASroute_gw___dst); - } + ASroute.gw_src = sg_routing_edge_by_name_or_null(A_surfxml_ASroute_gw___src); + ASroute.gw_dst = sg_routing_edge_by_name_or_null(A_surfxml_ASroute_gw___dst); ASroute.link_list = parsed_link_list; @@ -721,17 +785,8 @@ void ETag_surfxml_bypassASroute(void){ ASroute.link_list = parsed_link_list; ASroute.symmetrical = FALSE; - if (!strcmp(current_routing->model_desc->name,"RuleBased")) { - // DIRTY PERL HACK AHEAD: with the rulebased routing, the {src,dst}_gateway fields - // store the provided name instead of the entity directly (model_rulebased_parse_ASroute knows) - // - // This is because the user will provide something like "^AS_(.*)$" instead of the proper name of a given entity - ASroute.gw_src = (sg_routing_edge_t) A_surfxml_bypassASroute_gw___src; - ASroute.gw_dst = (sg_routing_edge_t) A_surfxml_bypassASroute_gw___dst; - } else { - ASroute.gw_src = sg_routing_edge_by_name_or_null(A_surfxml_bypassASroute_gw___src); - ASroute.gw_dst = sg_routing_edge_by_name_or_null(A_surfxml_bypassASroute_gw___dst); - } + ASroute.gw_src = sg_routing_edge_by_name_or_null(A_surfxml_bypassASroute_gw___src); + ASroute.gw_dst = sg_routing_edge_by_name_or_null(A_surfxml_bypassASroute_gw___dst); sg_platf_new_bypassASroute(&ASroute); parsed_link_list = NULL; @@ -898,7 +953,6 @@ void ETag_surfxml_trace___connect(void){} void STag_surfxml_trace(void){} void ETag_surfxml_router(void){} void ETag_surfxml_host___link(void){} -void ETag_surfxml_cluster(void){} void ETag_surfxml_cabinet(void){} void ETag_surfxml_peer(void){} void STag_surfxml_backbone(void){}