/* Pick the right models for CPU, net and host, and call their model_init_preparse */ void surf_config_models_setup() { const char *host_model_name; const char *vm_model_name; int host_id = -1; int vm_id = -1; char *network_model_name = NULL; char *cpu_model_name = NULL; int storage_id = -1; char *storage_model_name = NULL; host_model_name = xbt_cfg_get_string(_sg_cfg_set, "host/model"); vm_model_name = xbt_cfg_get_string(_sg_cfg_set, "vm/model"); network_model_name = xbt_cfg_get_string(_sg_cfg_set, "network/model"); cpu_model_name = xbt_cfg_get_string(_sg_cfg_set, "cpu/model"); storage_model_name = xbt_cfg_get_string(_sg_cfg_set, "storage/model"); /* Check whether we use a net/cpu model differing from the default ones, in which case * we should switch to the "compound" host model to correctly dispatch stuff to * the right net/cpu models. */ if ((!xbt_cfg_is_default_value(_sg_cfg_set, "network/model") || !xbt_cfg_is_default_value(_sg_cfg_set, "cpu/model")) && xbt_cfg_is_default_value(_sg_cfg_set, "host/model")) { host_model_name = "compound"; xbt_cfg_set_string(_sg_cfg_set, "host/model", host_model_name); } XBT_DEBUG("host model: %s", host_model_name); host_id = find_model_description(surf_host_model_description, host_model_name); if (!strcmp(host_model_name, "compound")) { int network_id = -1; int cpu_id = -1; xbt_assert(cpu_model_name, "Set a cpu model to use with the 'compound' host model"); xbt_assert(network_model_name, "Set a network model to use with the 'compound' host model"); if(surf_cpu_model_init_preparse){ surf_cpu_model_init_preparse(); } else { cpu_id = find_model_description(surf_cpu_model_description, cpu_model_name); surf_cpu_model_description[cpu_id].model_init_preparse(); } network_id = find_model_description(surf_network_model_description, network_model_name); surf_network_model_description[network_id].model_init_preparse(); } XBT_DEBUG("Call host_model_init"); surf_host_model_description[host_id].model_init_preparse(); XBT_DEBUG("Call vm_model_init"); vm_id = find_model_description(surf_vm_model_description, vm_model_name); surf_vm_model_description[vm_id].model_init_preparse(); XBT_DEBUG("Call storage_model_init"); storage_id = find_model_description(surf_storage_model_description, storage_model_name); surf_storage_model_description[storage_id].model_init_preparse(); }
/* Pick the right models for CPU, net and workstation, and call their model_init_preparse */ void surf_config_models_setup() { const char *workstation_model_name; const char *vm_workstation_model_name; int workstation_id = -1; int vm_workstation_id = -1; char *network_model_name = NULL; char *cpu_model_name = NULL; int storage_id = -1; char *storage_model_name = NULL; workstation_model_name = xbt_cfg_get_string(_sg_cfg_set, "workstation/model"); vm_workstation_model_name = xbt_cfg_get_string(_sg_cfg_set, "vm_workstation/model"); network_model_name = xbt_cfg_get_string(_sg_cfg_set, "network/model"); cpu_model_name = xbt_cfg_get_string(_sg_cfg_set, "cpu/model"); storage_model_name = xbt_cfg_get_string(_sg_cfg_set, "storage/model"); /* Check whether we use a net/cpu model differing from the default ones, in which case * we should switch to the "compound" workstation model to correctly dispatch stuff to * the right net/cpu models. */ if ((!xbt_cfg_is_default_value(_sg_cfg_set, "network/model") || !xbt_cfg_is_default_value(_sg_cfg_set, "cpu/model")) && xbt_cfg_is_default_value(_sg_cfg_set, "workstation/model")) { XBT_INFO("Switching workstation model to compound since you changed the network and/or cpu model(s)"); workstation_model_name = "compound"; xbt_cfg_set_string(_sg_cfg_set, "workstation/model", workstation_model_name); } XBT_DEBUG("Workstation model: %s", workstation_model_name); workstation_id = find_model_description(surf_workstation_model_description, workstation_model_name); if (!strcmp(workstation_model_name, "compound")) { int network_id = -1; int cpu_id = -1; xbt_assert(cpu_model_name, "Set a cpu model to use with the 'compound' workstation model"); xbt_assert(network_model_name, "Set a network model to use with the 'compound' workstation model"); if(surf_cpu_model_init_preparse){ surf_cpu_model_init_preparse(); } else { cpu_id = find_model_description(surf_cpu_model_description, cpu_model_name); surf_cpu_model_description[cpu_id].model_init_preparse(); } network_id = find_model_description(surf_network_model_description, network_model_name); surf_network_model_description[network_id].model_init_preparse(); } XBT_DEBUG("Call workstation_model_init"); surf_workstation_model_description[workstation_id].model_init_preparse(); XBT_DEBUG("Call vm_workstation_model_init"); vm_workstation_id = find_model_description(surf_vm_workstation_model_description, vm_workstation_model_name); surf_vm_workstation_model_description[vm_workstation_id].model_init_preparse(); XBT_DEBUG("Call storage_model_init"); storage_id = find_model_description(surf_storage_model_description, storage_model_name); surf_storage_model_description[storage_id].model_init_preparse(); }