From: Martin Quinson Date: Fri, 19 Feb 2016 10:54:53 +0000 (+0100) Subject: Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid X-Git-Tag: v3_13~788 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/abc6ac8b859794c5e38b56629674377872c70939?hp=7b03f0c8fed03945bbe5e38c1a81a4560353ba08 Merge branch 'master' of scm.gforge.inria.fr:/gitroot/simgrid/simgrid --- diff --git a/doc/Doxyfile.in b/doc/Doxyfile.in index b034485653..28cca26008 100644 --- a/doc/Doxyfile.in +++ b/doc/Doxyfile.in @@ -683,7 +683,9 @@ INPUT = doxygen/index.doc \ @top_srcdir@/src/xbt/ \ @top_srcdir@/src/surf/ \ @top_srcdir@/src/surf/plugins/ \ + @top_srcdir@/src/s4u/ \ @top_srcdir@/src/msg/ \ + @top_srcdir@/src/smpi/ \ @top_srcdir@/src/simdag \ @top_srcdir@/src/simix \ @bindir@/src diff --git a/doc/Layout.xml b/doc/Layout.xml index d2983b64ed..585a480d76 100644 --- a/doc/Layout.xml +++ b/doc/Layout.xml @@ -1,21 +1,19 @@ - + + - - - - + - - - + + + diff --git a/doc/doxygen/deployment.doc b/doc/doxygen/deployment.doc index 1439a603eb..107b44b3ca 100644 --- a/doc/doxygen/deployment.doc +++ b/doc/doxygen/deployment.doc @@ -1,4 +1,4 @@ -/*! \page deployment Step 3: Deploy the simulation +/*! \page deployment Deploy the simulation \section dep_over Overview diff --git a/doc/doxygen/getting_started.doc b/doc/doxygen/getting_started.doc index 2a4dac169a..878f901d0a 100644 --- a/doc/doxygen/getting_started.doc +++ b/doc/doxygen/getting_started.doc @@ -1,9 +1,9 @@ -/*! @page getting_started Getting started with SimGrid! +/*! @page getting_started Getting started with SimGrid \tableofcontents -Welcome to SimGrid's documentation! %As you may know, SimGrid is (actively -developed) research software and contains many features. This documentation is +Welcome to SimGrid's documentation! %As you may know, SimGrid is an actively +developed research software and contains many features. This documentation is \c "work in progress" (and we need the community's help to improve this documentation! If you're ready to step up and help us, see Section \ref contributing "Contributing"), but many features are already well described. @@ -29,30 +29,31 @@ own needs. This page gives you a brief overview of available resources. | ----------------- | ------------------------------------------------- | | \ref tutorial | Introduces the user to basic features of SimGrid. | | \ref install | Explains how SimGrid can be installed; this covers Windows as well as Linux; plus, it shows how to install from a package or how to install from source. | -| [Tutorials](http://simgrid.gforge.inria.fr/tutorials.html) | These tutorials cover most of the basics and might be valuable for what you want to do, especially the [SimGrid User 101](http://simgrid.gforge.inria.fr/tutorials/simgrid-use-101.pdf). | +| [Online Tutorials](http://simgrid.gforge.inria.fr/tutorials.html) | These tutorials cover most of the basics and might be valuable for what you want to do, especially the [SimGrid User 101](http://simgrid.gforge.inria.fr/tutorials/simgrid-use-101.pdf). | | \ref MSG_examples | This document explains several tests that we wrote for MSG; these tests are working simulations and you may learn something from looking at them. | In order to actually use SimGrid, three steps are necessary: -\li \ref platform -\li \ref options -\li \ref deployment +\li Step 1: \ref platform +\li Step 2: \ref options +\li Step 3: \ref deployment \section gs_experienced_users Documentation for experienced users | Document name | Description | | ----------------- | ------------------------------------------------- | | \ref tracing | Shows how the behavior of a program can be written to a file so that it can be analyzed. | -| \ref bindings | SimGrid supports many different bindings for languages such as Lua, Ruby, Java, ... You can run your simulations with those! | -| \ref pls | Although SimGrid is not a packet level simulator, it does have bindings to two such simulators. | +| \ref bindings | You can write your application in Java, if you prefer. | +| \ref pls | You can use the NS3 simulation models instead of our own. | | \ref inside | If you want to contribute or obtain a deeper understanding of SimGrid, this is the right location. | \section gs_examples Examples shipped with SimGrid -SimGrid ships with many examples. You can find them in the folder -\c examples/. Especially when you're looking for examples on how to -use a specific XML-tag, this will prove valuable, as you can easily -search through all the files with tools like \c grep. +SimGrid ships with many examples, detailed in Section \ref +MSG_examples. You can find them in the folder \c examples/. Especially +when you're looking for examples on how to use a specific XML-tag, +this will prove valuable, as you can easily search through all the +files with tools like \c grep. Here is the output of a quick search for examples for \ref pf_trace "trace_connect": @@ -65,7 +66,4 @@ Here is the output of a quick search for examples for \ref pf_trace "trace_conne ./platforms/two_hosts_platform_with_availability_included.xml:26: \endverbatim -\note - There's also a Section on \ref MSG_examples "examples for MSG". - */ diff --git a/doc/doxygen/options.doc b/doc/doxygen/options.doc index a690ad3957..4488c39acf 100644 --- a/doc/doxygen/options.doc +++ b/doc/doxygen/options.doc @@ -1,4 +1,4 @@ -/*! \page options Step 2: Configure SimGrid +/*! \page options Configure SimGrid A number of options can be given at runtime to change the default SimGrid behavior. For a complete list of all configuration options diff --git a/doc/doxygen/platform.doc b/doc/doxygen/platform.doc index a7b1754fe5..f7f7becc2e 100644 --- a/doc/doxygen/platform.doc +++ b/doc/doxygen/platform.doc @@ -1,4 +1,4 @@ -/*! \page platform Step 1: %Model the underlying platform +/*! \page platform %Model the underlying platform @tableofcontents diff --git a/src/surf/cpu_ti.cpp b/src/surf/cpu_ti.cpp index 93c115c984..ae2984e3ee 100644 --- a/src/surf/cpu_ti.cpp +++ b/src/surf/cpu_ti.cpp @@ -128,10 +128,8 @@ double CpuTiTgmr::integrate(double a, double b) /** * \brief Auxiliary function to compute the integral between a and b. * It simply computes the integrals at point a and b and returns the difference between them. - * \param trace Trace structure - * \param a Initial point + * \param a Initial point * \param b Final point - * \return Integral */ double CpuTiTrace::integrateSimple(double a, double b) { @@ -140,9 +138,7 @@ double CpuTiTrace::integrateSimple(double a, double b) /** * \brief Auxiliary function to compute the integral at point a. - * \param trace Trace structure * \param a point - * \return Integral */ double CpuTiTrace::integrateSimplePoint(double a) { diff --git a/src/surf/surf_routing.cpp b/src/surf/surf_routing.cpp index 5253c9723d..7cee152ca4 100644 --- a/src/surf/surf_routing.cpp +++ b/src/surf/surf_routing.cpp @@ -256,39 +256,31 @@ static void elements_father(sg_netcard_t src, sg_netcard_t dst, AS_t * res_dst) { xbt_assert(src && dst, "bad parameters for \"elements_father\" method"); -#define ELEMENTS_FATHER_MAXDEPTH 16 /* increase if it is not enough */ - simgrid::surf::As *src_as, *dst_as; - simgrid::surf::As *path_src[ELEMENTS_FATHER_MAXDEPTH]; - simgrid::surf::As *path_dst[ELEMENTS_FATHER_MAXDEPTH]; +#define ROUTING_HIERARCHY_MAXDEPTH 16 /* increase if it is not enough */ + simgrid::surf::As *path_src[ROUTING_HIERARCHY_MAXDEPTH]; + simgrid::surf::As *path_dst[ROUTING_HIERARCHY_MAXDEPTH]; int index_src = 0; int index_dst = 0; - simgrid::surf::As *current; simgrid::surf::As *current_src; simgrid::surf::As *current_dst; simgrid::surf::As *father; - /* (1) find the as where the src and dst are located */ - sg_netcard_t src_data = src; - sg_netcard_t dst_data = dst; - src_as = src_data->containingAS(); - dst_as = dst_data->containingAS(); -#ifndef NDEBUG - char* src_name = src_data->name(); - char* dst_name = dst_data->name(); -#endif + /* (1) find the path to root of src and dst*/ + simgrid::surf::As *src_as = src->containingAS(); + simgrid::surf::As *dst_as = dst->containingAS(); - xbt_assert(src_as && dst_as, - "Ask for route \"from\"(%s) or \"to\"(%s) no found", src_name, dst_name); + xbt_assert(src_as, "Host %s must be in an AS", src->name()); + xbt_assert(dst_as, "Host %s must be in an AS", dst->name()); /* (2) find the path to the root routing component */ - for (current = src_as; current != NULL; current = current->father_) { - if (index_src >= ELEMENTS_FATHER_MAXDEPTH) - xbt_die("ELEMENTS_FATHER_MAXDEPTH should be increased for path_src"); + for (simgrid::surf::As *current = src_as; current != NULL; current = current->father_) { + if (index_src >= ROUTING_HIERARCHY_MAXDEPTH) + xbt_die("ROUTING_HIERARCHY_MAXDEPTH should be increased for element %s", src->name()); path_src[index_src++] = current; } - for (current = dst_as; current != NULL; current = current->father_) { - if (index_dst >= ELEMENTS_FATHER_MAXDEPTH) - xbt_die("ELEMENTS_FATHER_MAXDEPTH should be increased for path_dst"); + for (simgrid::surf::As *current = dst_as; current != NULL; current = current->father_) { + if (index_dst >= ROUTING_HIERARCHY_MAXDEPTH) + xbt_die("ROUTING_HIERARCHY_MAXDEPTH should be increased for path_dst"); path_dst[index_dst++] = current; } @@ -309,24 +301,20 @@ static void elements_father(sg_netcard_t src, sg_netcard_t dst, *res_src = current_src; /* second the first different father of src */ *res_dst = current_dst; /* three the first different father of dst */ -#undef ELEMENTS_FATHER_MAXDEPTH +#undef ROUTING_HIERARCHY_MAXDEPTH } -/* Global Business methods */ - /** - * \brief Recursive function for get_route_latency + * \brief Recursive function for get_route_and_latency * * \param src the source host name * \param dst the destination host name * \param *route the route where the links are stored. It is either NULL or a ready to use dynar * \param *latency the latency, if needed * - * This function is called by "get_route" and "get_latency". It allows to walk - * recursively through the ASes tree. + * This function is called by "get_route" and "get_latency". It allows to walk recursively through the ASes tree. */ -static void _get_route_and_latency( - simgrid::surf::NetCard *src, simgrid::surf::NetCard *dst, +static void _get_route_and_latency(simgrid::surf::NetCard *src, simgrid::surf::NetCard *dst, xbt_dynar_t * links, double *latency) { s_sg_platf_route_cbarg_t route = SG_PLATF_ROUTE_INITIALIZER; @@ -341,16 +329,11 @@ static void _get_route_and_latency( XBT_DEBUG("elements_father: common father '%s' src_father '%s' dst_father '%s'", common_father->name_, src_father->name_, dst_father->name_); - /* Check whether a direct bypass is defined */ - sg_platf_route_cbarg_t e_route_bypass = NULL; - //FIXME:REMOVE:if (common_father->get_bypass_route) - - e_route_bypass = common_father->getBypassRoute(src, dst, latency); - - /* Common ancestor is kind enough to declare a bypass route from src to dst -- use it and bail out */ - if (e_route_bypass) { - xbt_dynar_merge(links, &e_route_bypass->link_list); - routing_route_free(e_route_bypass); + /* Check whether a direct bypass is defined. If so, use it and bail out */ + sg_platf_route_cbarg_t bypassed_route = common_father->getBypassRoute(src, dst, latency); + if (bypassed_route) { + xbt_dynar_merge(links, &bypassed_route->link_list); + routing_route_free(bypassed_route); return; } @@ -358,34 +341,25 @@ static void _get_route_and_latency( if (src_father == dst_father) { /* SURF_ROUTING_BASE */ route.link_list = *links; common_father->getRouteAndLatency(src, dst, &route, latency); - // if vivaldi latency+=vivaldi(src,dst) return; } /* Not in the same AS, no bypass. We'll have to find our path between the ASes recursively*/ route.link_list = xbt_dynar_new(sizeof(Link*), NULL); - // Find the net_card corresponding to father - simgrid::surf::NetCard *src_father_netcard = src_father->netcard_; - simgrid::surf::NetCard *dst_father_netcard = dst_father->netcard_; - - common_father->getRouteAndLatency(src_father_netcard, dst_father_netcard, - &route, latency); + common_father->getRouteAndLatency(src_father->netcard_, dst_father->netcard_, &route, latency); xbt_assert((route.gw_src != NULL) && (route.gw_dst != NULL), "bad gateways for route from \"%s\" to \"%s\"", src->name(), dst->name()); - sg_netcard_t src_gateway_net_elm = route.gw_src; - sg_netcard_t dst_gateway_net_elm = route.gw_dst; - /* If source gateway is not our source, we have to recursively find our way up to this point */ - if (src != src_gateway_net_elm) - _get_route_and_latency(src, src_gateway_net_elm, links, latency); + if (src != route.gw_src) + _get_route_and_latency(src, route.gw_src, links, latency); xbt_dynar_merge(links, &route.link_list); /* If dest gateway is not our destination, we have to recursively find our way from this point */ - if (dst_gateway_net_elm != dst) - _get_route_and_latency(dst_gateway_net_elm, dst, links, latency); + if (route.gw_dst != dst) + _get_route_and_latency(route.gw_dst, dst, links, latency); } @@ -423,16 +397,9 @@ void RoutingPlatf::getRouteAndLatency(NetCard *src, NetCard *dst, xbt_dynar_t* r } _get_route_and_latency(src, dst, route, latency); - - xbt_assert(!latency || *latency >= 0.0, - "negative latency on route between \"%s\" and \"%s\"", src->name(), dst->name()); } -xbt_dynar_t RoutingPlatf::getOneLinkRoutes(){ - return recursiveGetOneLinkRoutes(root_); -} - -xbt_dynar_t RoutingPlatf::recursiveGetOneLinkRoutes(As *rc) +static xbt_dynar_t _recursiveGetOneLinkRoutes(As *rc) { xbt_dynar_t ret = xbt_dynar_new(sizeof(Onelink*), xbt_free_f); @@ -446,13 +413,17 @@ xbt_dynar_t RoutingPlatf::recursiveGetOneLinkRoutes(As *rc) xbt_dict_cursor_t cursor = NULL; AS_t rc_child; xbt_dict_foreach(rc->sons_, cursor, key, rc_child) { - xbt_dynar_t onelink_child = recursiveGetOneLinkRoutes(rc_child); + xbt_dynar_t onelink_child = _recursiveGetOneLinkRoutes(rc_child); if (onelink_child) xbt_dynar_merge(&ret,&onelink_child); } return ret; } +xbt_dynar_t RoutingPlatf::getOneLinkRoutes(){ + return _recursiveGetOneLinkRoutes(root_); +} + } } diff --git a/src/surf/surf_routing.hpp b/src/surf/surf_routing.hpp index 9aed674512..0f398c5545 100644 --- a/src/surf/surf_routing.hpp +++ b/src/surf/surf_routing.hpp @@ -147,7 +147,6 @@ public: void *loopback_; xbt_dynar_t lastRoute_ = xbt_dynar_new(sizeof(Link*),NULL); xbt_dynar_t getOneLinkRoutes(void); - xbt_dynar_t recursiveGetOneLinkRoutes(As *rc); void getRouteAndLatency(NetCard *src, NetCard *dst, xbt_dynar_t * links, double *latency); };