From 7b33e9d03f09b1474cf98945d2f634fc7021c773 Mon Sep 17 00:00:00 2001 From: alegrand Date: Wed, 15 Dec 2004 06:20:08 +0000 Subject: [PATCH] Starting MSG. To ensure backward compability, those two headers won't really change. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@640 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- include/Makefile.am | 3 + include/msg/datatypes.h | 127 ++++++++++++++++++++++++++++++++++++++++ include/msg/msg.h | 115 ++++++++++++++++++++++++++++++++++++ 3 files changed, 245 insertions(+) create mode 100644 include/msg/datatypes.h create mode 100644 include/msg/msg.h diff --git a/include/Makefile.am b/include/Makefile.am index 154bba3f08..2fdc13c312 100644 --- a/include/Makefile.am +++ b/include/Makefile.am @@ -15,6 +15,9 @@ nobase_include_HEADERS = \ surf/trace_mgr.h \ surf/surf.h \ \ + msg/msg.h \ + msg/datatypes.h \ + \ gras/core.h \ gras/datadesc.h gras/transport.h \ gras/virtu.h gras/cond.h gras/process.h \ diff --git a/include/msg/datatypes.h b/include/msg/datatypes.h new file mode 100644 index 0000000000..7d01a0d727 --- /dev/null +++ b/include/msg/datatypes.h @@ -0,0 +1,127 @@ +/* $Id$ */ + +/* Copyright (c) 2002,2003,2004 Arnaud Legrand. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#ifndef MSG_DATATYPE_H +#define MSG_DATATYPE_H + +/********************************* Host **************************************/ + +struct s_m_host { + char *name; /* host name if any */ + void *simdata; /* simulator data */ + void *data; /* user data */ +}; +/** \brief Host datatype + \ingroup m_datatypes_management + + A location (or host) is any possible place where + a process may run. Thus it is represented as a physical + resource with computing capabilities, some mailboxes + to enable running process to communicate with remote ones, and + some private data that can be only accessed by local + process. + + \see m_host_management +*/ +typedef struct s_m_host *m_host_t; + +/********************************* Link **************************************/ +struct s_m_link { + char *name; /* link name if any */ + void *simdata; /* simulator data */ + void *data; /* user data */ +}; + +/** \brief Link datatype + \ingroup m_datatypes_management + + A link is an agglomeration of communicating resources + representing a set of physical network links. + + \see m_link_management +*/ +typedef struct s_m_link *m_link_t; + +/********************************* Task **************************************/ + +struct s_m_task { + char *name; /* host name if any */ + void *simdata; /* simulator data */ + void *data; /* user data */ +}; +/** \brief Task datatype + \ingroup m_datatypes_management + + A task may then be defined by a computing + amount, a message size and some private + data. + \see m_task_management +*/ +typedef struct s_m_task *m_task_t; + +/** \brief Default value for an uninitialized #m_task_t. + \ingroup m_datatypes_management +*/ +#define MSG_TASK_UNINITIALIZED NULL +/******************************* Process *************************************/ + +struct s_m_process { + char *name; /* process name if any */ + void *simdata; /* simulator data */ + void *data; /* user data */ +}; +/** \brief Agent datatype + \ingroup m_datatypes_management + An agent may be defined as a code, with some private + data, executing in a location. + \see m_process_management +*/ +typedef struct s_m_process *m_process_t; +/** \brief Agent code datatype + \ingroup m_datatypes_management + The code of an agent is a m_process_code_t, i.e. a function with no arguments + returning no value. + \see m_process_management +*/ +typedef int(*m_process_code_t)(int argc,char *argv[]) ; + +/********************************** Channel **********************************/ +/** \brief Channel datatype + \ingroup m_datatypes_management + A channel is a number and identifies a mailbox type (just as a + port number does). + \see m_channel_management +*/ +typedef int m_channel_t; + +/****************************** Error handling *******************************/ +/** \brief Error handling +*/typedef enum { + MSG_OK = 0, /**< Everything is right. Keep on going this way ! */ + MSG_WARNING, /**< Mmmh! Something must be not perfectly clean. But I + may be a paranoid freak... ! */ + MSG_TRANSFER_FAILURE, /**< There has been a problem during you task + transfer. Either the network is down or the remote host has been + shutdown. */ + MSG_HOST_FAILURE, /**< System shutdown. The host on which you are + running has just been rebooted. Free your datastructures and + return now !*/ + MSG_FATAL /**< You've done something wrong. You'd better look at it... */ +} MSG_error_t; + +typedef enum { + MSG_SILENT = 0, + MSG_SOME, + MSG_VERBOSE +} MSG_outputmode_t; + +typedef enum { + MSG_STORE_AND_FORWARD = 1, /* 0 means uninitialized value */ + MSG_TCP +} MSG_sharing_t; + +#endif diff --git a/include/msg/msg.h b/include/msg/msg.h new file mode 100644 index 0000000000..ac4b7da88c --- /dev/null +++ b/include/msg/msg.h @@ -0,0 +1,115 @@ +/* $Id$ */ + +/* Copyright (c) 2002,2003,2004 Arnaud Legrand. All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#ifndef MSG_H +#define MSG_H + +#include "msg/datatypes.h" + +/************************** MSG **********************************************/ +void MSG_global_init(void); +void MSG_set_verbosity(MSG_outputmode_t mode); +MSG_error_t MSG_set_channel_number(int number); +MSG_error_t MSG_set_sharing_policy(MSG_sharing_t mode, long double param); +int MSG_get_channel_number(void); +MSG_error_t MSG_main(void); +MSG_error_t MSG_clean(void); + +MSG_error_t MSG_routing_table_init(void); +MSG_error_t MSG_routing_table_set(m_host_t host1, m_host_t host2, + m_link_t link); +m_link_t MSG_routing_table_get(m_host_t host1, m_host_t host2); + +/************************** Management ***************************************/ +m_host_t MSG_host_create(const char *name, + char *trace_file, + long double fixed_cpu, + char* failure_trace, + long double fixed_failure, + void *data); + +MSG_error_t MSG_host_set_data(m_host_t host, void *data); +void *MSG_host_get_data(m_host_t host); +int MSG_host_get_PID(m_host_t host); +int MSG_process_get_PPID(m_process_t process); +const char *MSG_host_get_name(m_host_t host); +m_host_t MSG_host_from_PID(int PID); +m_host_t MSG_host_self(void); +MSG_error_t MSG_host_destroy(m_host_t host); + +int MSG_get_host_msgload(m_host_t host); +int MSG_get_msgload(void); + + +void MSG_link_set_sharing_value(long double alpha); +m_link_t MSG_link_create(const char *name, + char *lat_trace_file, long double fixed_latency, + char *bw_trace_file, long double fixed_bandwidth); +MSG_error_t MSG_link_destroy(m_link_t link); +m_link_t MSG_link_merge(const char *name, m_link_t src1, m_link_t src2); + + +m_task_t MSG_task_create(const char *name, long double compute_duration, + long double message_size, void *data); +void *MSG_task_get_data(m_task_t task); +MSG_error_t MSG_task_destroy(m_task_t task); + +m_process_t MSG_process_create(const char *name, + m_process_code_t code, void *data, + m_host_t host); + +MSG_error_t MSG_process_change_host(m_process_t process, m_host_t host); + +void *MSG_process_get_data(m_process_t process); +MSG_error_t MSG_process_set_data(m_process_t process, void *data); +m_host_t MSG_process_get_host(m_process_t process); +m_process_t MSG_process_from_PID(int PID); +int MSG_process_get_PID(m_process_t process); +const char *MSG_process_get_name(m_process_t process); +int MSG_process_self_PID(void); +int MSG_process_self_PPID(void); +m_process_t MSG_process_self(void); + +MSG_error_t MSG_process_suspend(m_process_t process); +MSG_error_t MSG_process_resume(m_process_t process); +int MSG_process_isSuspended(m_process_t process); + +MSG_error_t MSG_process_start(m_process_t process); + + +/************************** GOS **********************************************/ +MSG_error_t MSG_task_get(m_task_t * task, m_channel_t channel); +MSG_error_t MSG_task_put(m_task_t task, m_host_t dest, + m_channel_t channel); +MSG_error_t MSG_task_execute(m_task_t task); +int MSG_task_Iprobe(m_channel_t channel); +void MSG_process_sleep(long double nb_sec); +void MSG_tracelink(m_host_t dest, const char* **names, int *count); +MSG_error_t MSG_get_errno(void); + +/************************** GIS **********************************************/ +void MSG_create_environment(const char *file); + +m_host_t MSG_get_host_by_name(const char *name); +m_link_t MSG_get_link_by_name(const char *name); +int MSG_get_host_number(void); +m_host_t *MSG_get_host_table(void); +void MSG_function_register(const char *name, m_process_code_t code); +m_process_code_t MSG_get_registered_function(const char *name); +void MSG_launch_application(const char *file); + +MSG_error_t MSG_get_arguments(int *argc, char ***argv); +MSG_error_t MSG_set_arguments(m_process_t process,int argc, char *argv[]); + +long double MSG_getClock(void); + +/************************** FS **********************************************/ +/* MSG_error_t MSG_get_cpu(m_host_t * h, long double time, long double *val); */ +/* MSG_error_t MSG_get_bw(m_link_t * h, long double time, long double *val); */ +/* MSG_error_t MSG_get_lat(m_link_t * h, long double time, long double *val); */ + +#endif -- 2.20.1