set(SIMGRID_SRC
src/simgrid/sg_config.c
+ src/simgrid/host.cpp
)
set(MSG_SRC
\see m_host_management
@{ */
-typedef struct s_smx_host_priv *smx_host_priv_t;
typedef enum {
SIMIX_WAITING,
SIMIX_READY,
XBT_PUBLIC_DATA(int) ROUTING_HOST_LEVEL; //Routing level
XBT_PUBLIC_DATA(int) SURF_CPU_LEVEL; //Surf cpu level
XBT_PUBLIC_DATA(int) SURF_HOST_LEVEL; //Surf workstation level
-XBT_PUBLIC_DATA(int) SIMIX_HOST_LEVEL; //Simix host level
XBT_PUBLIC_DATA(int) SIMIX_STORAGE_LEVEL; //Simix storage level
XBT_PUBLIC_DATA(int) MSG_HOST_LEVEL; //Msg level
XBT_PUBLIC_DATA(int) SD_HOST_LEVEL; //Simdag host level
if(data[SURF_HOST_LEVEL]){
XBT_DEBUG("\tSee surf host %s",name);
SIMIX_host_create(name, NULL);
- __MSG_host_create((sg_host_t)data[SIMIX_HOST_LEVEL]);
+ // THIS IS BRAINDEAD. There is no sg_host_t in that level, but a smx_host_priv. So commenting out for now.
+ // Lua is broken anyway. Christian will fix it
+ // __MSG_host_create((sg_host_t)data[SIMIX_HOST_LEVEL]);
}
}
/* Initialize MSG hosts */
xbt_lib_foreach(host_lib, cursor, name, data) {
- if(data[SIMIX_HOST_LEVEL])
+ if(sg_host_simix((sg_host_t)data))
__MSG_host_create(xbt_dict_cursor_get_elm(cursor));
}
/* make sure the VM of the same name does not exit */
{
xbt_dictelm_t ind_host_tmp = xbt_lib_get_elm_or_null(host_lib, name);
- if (ind_host_tmp && xbt_lib_get_level(ind_host_tmp, SIMIX_HOST_LEVEL) != NULL) {
+ if (ind_host_tmp && sg_host_simix(ind_host_tmp) != NULL) {
XBT_ERROR("host %s already exits", name);
return NULL;
}
arg->name = xbt_strdup(arg->argv[0]);
arg->kill_time = kill_time;
arg->properties = current_property_set;
- if (!SIMIX_host_priv(host)->boot_processes) {
- SIMIX_host_priv(host)->boot_processes = xbt_dynar_new(sizeof(smx_process_arg_t), _SIMIX_host_free_process_arg);
+ if (!sg_host_simix(host)->boot_processes) {
+ sg_host_simix(host)->boot_processes = xbt_dynar_new(sizeof(smx_process_arg_t), _SIMIX_host_free_process_arg);
}
- xbt_dynar_push_as(SIMIX_host_priv(host)->boot_processes,smx_process_arg_t,arg);
+ xbt_dynar_push_as(sg_host_simix(host)->boot_processes,smx_process_arg_t,arg);
if (start_time > SIMIX_get_clock()) {
arg = xbt_new0(s_smx_process_arg_t, 1);
simix_timers = xbt_heap_new(8, &free);
}
- SIMIX_HOST_LEVEL = xbt_lib_add_level(host_lib,SIMIX_host_destroy);
+ sg_host_init();
SIMIX_STORAGE_LEVEL = xbt_lib_add_level(storage_lib, SIMIX_storage_destroy);
if (sg_cfg_get_boolean("clean_atexit"))
* \param name name of the host to create
* \param data some user data (may be NULL)
*/
-sg_host_t SIMIX_host_create(const char *name, void *data)
+sg_host_t SIMIX_host_create(const char *name, void *killme) // FIXME: braindead prototype. Take sg_host as first arg
{
+ sg_host_t host = xbt_lib_get_elm_or_null(host_lib, name);
smx_host_priv_t smx_host = xbt_new0(s_smx_host_priv_t, 1);
s_smx_process_t proc;
xbt_swag_new(xbt_swag_offset(proc, host_proc_hookup));
/* Update global variables */
- xbt_lib_set(host_lib,name,SIMIX_HOST_LEVEL,smx_host);
+ sg_host_simix_set(host, smx_host);
- return xbt_lib_get_elm_or_null(host_lib, name);
+ return host;
}
/**
*/
void SIMIX_host_on(sg_host_t h)
{
- smx_host_priv_t host = SIMIX_host_priv(h);
+ smx_host_priv_t host = sg_host_simix(h);
xbt_assert((host != NULL), "Invalid parameters");
*/
void SIMIX_host_off(sg_host_t h, smx_process_t issuer)
{
- smx_host_priv_t host = SIMIX_host_priv(h);
+ smx_host_priv_t host = sg_host_simix(h);
xbt_assert((host != NULL), "Invalid parameters");
}
xbt_swag_t SIMIX_host_get_process_list(sg_host_t host){
- smx_host_priv_t host_priv = SIMIX_host_priv(host);
+ smx_host_priv_t host_priv = sg_host_simix(host);
return host_priv->process_list;
}
xbt_dict_t properties,
int auto_restart)
{
- if (!SIMIX_host_priv(host)->auto_restart_processes) {
- SIMIX_host_priv(host)->auto_restart_processes = xbt_dynar_new(sizeof(smx_process_arg_t),_SIMIX_host_free_process_arg);
+ if (!sg_host_simix(host)->auto_restart_processes) {
+ sg_host_simix(host)->auto_restart_processes = xbt_dynar_new(sizeof(smx_process_arg_t),_SIMIX_host_free_process_arg);
}
smx_process_arg_t arg = xbt_new(s_smx_process_arg_t,1);
arg->name = xbt_strdup(name);
xbt_dict_set(watched_hosts_lib,sg_host_name(host),host,NULL);
XBT_DEBUG("Have pushed host %s to watched_hosts_lib because state == SURF_RESOURCE_OFF",sg_host_name(host));
}
- xbt_dynar_push_as(SIMIX_host_priv(host)->auto_restart_processes,smx_process_arg_t,arg);
+ xbt_dynar_push_as(sg_host_simix(host)->auto_restart_processes,smx_process_arg_t,arg);
}
/**
* \brief Restart the list of processes that have been registered to the host
{
unsigned int cpt;
smx_process_arg_t arg;
- xbt_dynar_t process_list = SIMIX_host_priv(host)->auto_restart_processes;
+ xbt_dynar_t process_list = sg_host_simix(host)->auto_restart_processes;
if (!process_list)
return;
SG_BEGIN_DECL()
-/** @brief Host datatype */
+/** @brief Host datatype from SIMIX POV */
typedef struct s_smx_host_priv {
xbt_swag_t process_list;
xbt_dynar_t auto_restart_processes;
- xbt_dynar_t boot_processes;
+ xbt_dynar_t boot_processes;
} s_smx_host_priv_t;
-static inline smx_host_priv_t SIMIX_host_priv(sg_host_t host){
- return (smx_host_priv_t) xbt_lib_get_level(host, SIMIX_HOST_LEVEL);
-}
-
void _SIMIX_host_free_process_arg(void *);
sg_host_t SIMIX_host_create(const char *name, void *data);
void SIMIX_host_destroy(void *host);
XBT_DEBUG("%p should not be run anymore",process);
xbt_swag_remove(process, simix_global->process_list);
- xbt_swag_remove(process, SIMIX_host_priv(process->host)->process_list);
+ xbt_swag_remove(process, sg_host_simix(process->host)->process_list);
xbt_swag_insert(process, simix_global->process_to_destroy);
process->context->iwannadie = 0;
(*process)->properties = properties;
/* Add the process to it's host process list */
- xbt_swag_insert(*process, SIMIX_host_priv(host)->process_list);
+ xbt_swag_insert(*process, sg_host_simix(host)->process_list);
XBT_DEBUG("Start context '%s'", (*process)->name);
sg_host_t dest)
{
xbt_assert((process != NULL), "Invalid parameters");
- xbt_swag_remove(process, SIMIX_host_priv(process->host)->process_list);
+ xbt_swag_remove(process, sg_host_simix(process->host)->process_list);
process->host = dest;
- xbt_swag_insert(process, SIMIX_host_priv(dest)->process_list);
+ xbt_swag_insert(process, sg_host_simix(dest)->process_list);
}
if (SIMIX_vm_get_state(ind_vm) != SURF_VM_STATE_RUNNING)
THROWF(vm_error, 0, "VM(%s) is not running", name);
- XBT_DEBUG("suspend VM(%s), where %d processes exist", name, xbt_swag_size(SIMIX_host_priv(ind_vm)->process_list));
+ XBT_DEBUG("suspend VM(%s), where %d processes exist", name, xbt_swag_size(sg_host_simix(ind_vm)->process_list));
/* jump to vm_ws_suspend. The state will be set. */
surf_vm_suspend(ind_vm);
smx_process_t smx_process, smx_process_safe;
- xbt_swag_foreach_safe(smx_process, smx_process_safe, SIMIX_host_priv(ind_vm)->process_list) {
+ xbt_swag_foreach_safe(smx_process, smx_process_safe, sg_host_simix(ind_vm)->process_list) {
XBT_DEBUG("suspend %s", smx_process->name);
SIMIX_process_suspend(smx_process, issuer);
}
if (SIMIX_vm_get_state(ind_vm) != SURF_VM_STATE_SUSPENDED)
THROWF(vm_error, 0, "VM(%s) was not suspended", name);
- XBT_DEBUG("resume VM(%s), where %d processes exist", name, xbt_swag_size(SIMIX_host_priv(ind_vm)->process_list));
+ XBT_DEBUG("resume VM(%s), where %d processes exist", name, xbt_swag_size(sg_host_simix(ind_vm)->process_list));
/* jump to vm_ws_resume() */
surf_vm_resume(ind_vm);
smx_process_t smx_process, smx_process_safe;
- xbt_swag_foreach_safe(smx_process, smx_process_safe, SIMIX_host_priv(ind_vm)->process_list) {
+ xbt_swag_foreach_safe(smx_process, smx_process_safe, sg_host_simix(ind_vm)->process_list) {
XBT_DEBUG("resume %s", smx_process->name);
SIMIX_process_resume(smx_process, issuer);
}
THROWF(vm_error, 0, "VM(%s) is not running", name);
- XBT_DEBUG("save VM(%s), where %d processes exist", name, xbt_swag_size(SIMIX_host_priv(ind_vm)->process_list));
+ XBT_DEBUG("save VM(%s), where %d processes exist", name, xbt_swag_size(sg_host_simix(ind_vm)->process_list));
/* jump to vm_ws_save() */
surf_vm_save(ind_vm);
smx_process_t smx_process, smx_process_safe;
- xbt_swag_foreach_safe(smx_process, smx_process_safe, SIMIX_host_priv(ind_vm)->process_list) {
+ xbt_swag_foreach_safe(smx_process, smx_process_safe, sg_host_simix(ind_vm)->process_list) {
XBT_DEBUG("suspend %s", smx_process->name);
SIMIX_process_suspend(smx_process, issuer);
}
if (SIMIX_vm_get_state(ind_vm) != SURF_VM_STATE_SAVED)
THROWF(vm_error, 0, "VM(%s) was not saved", name);
- XBT_DEBUG("restore VM(%s), where %d processes exist", name, xbt_swag_size(SIMIX_host_priv(ind_vm)->process_list));
+ XBT_DEBUG("restore VM(%s), where %d processes exist", name, xbt_swag_size(sg_host_simix(ind_vm)->process_list));
/* jump to vm_ws_restore() */
surf_vm_resume(ind_vm);
smx_process_t smx_process, smx_process_safe;
- xbt_swag_foreach_safe(smx_process, smx_process_safe, SIMIX_host_priv(ind_vm)->process_list) {
+ xbt_swag_foreach_safe(smx_process, smx_process_safe, sg_host_simix(ind_vm)->process_list) {
XBT_DEBUG("resume %s", smx_process->name);
SIMIX_process_resume(smx_process, issuer);
}
THROWF(vm_error, 0, "VM(%s) is not running", name);
XBT_DEBUG("shutdown %s", name);
- XBT_DEBUG("%d processes in the VM", xbt_swag_size(SIMIX_host_priv(ind_vm)->process_list));
+ XBT_DEBUG("%d processes in the VM", xbt_swag_size(sg_host_simix(ind_vm)->process_list));
smx_process_t smx_process, smx_process_safe;
- xbt_swag_foreach_safe(smx_process, smx_process_safe, SIMIX_host_priv(ind_vm)->process_list) {
+ xbt_swag_foreach_safe(smx_process, smx_process_safe, sg_host_simix(ind_vm)->process_list) {
XBT_DEBUG("kill %s", smx_process->name);
SIMIX_process_kill(smx_process, issuer);
}
XBT_DEBUG("destroy %s", hostname);
/* this will call the registered callback function, i.e., SIMIX_host_destroy(). */
- xbt_lib_unset(host_lib, hostname, SIMIX_HOST_LEVEL, 1);
+ sg_host_simix_destroy(ind_vm);
/* jump to vm_ws_destroy(). The surf level resource will be freed. */
surf_vm_destroy(ind_vm);
return edge->getName();
}
-#ifdef CONTEXT_THREADS
-//FIXME:keeporremove static xbt_parmap_t surf_parmap = NULL; /* parallel map on models */
-#endif
-
extern double NOW;
extern double *surf_mins; /* return value of share_resources for each model */
extern int surf_min_index; /* current index in surf_mins */
int ROUTING_HOST_LEVEL; //Routing level
int SURF_CPU_LEVEL; //Surf cpu level
int SURF_HOST_LEVEL; //Surf host level
-int SIMIX_HOST_LEVEL; //Simix host level
int SIMIX_STORAGE_LEVEL; //Simix storage level
int MSG_HOST_LEVEL; //Msg host level
int MSG_STORAGE_LEVEL; //Msg storage level