SimGrid: Packet level simulation

SimGrid 3.10 Versatile Simulation of Distributed Systems

- Home page
- Online documentation
- Dev's Corner

All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
Packet level simulation

It is possible to use a packet-level network simulator instead of the default flow-based simulation. You may want to use such an approach if you have doubts about the validity of the default model or if you want to perform some validation experiments. At the moment, we support the GTNetS simulator and since version 3.6.2, ns-3.

# Using GTNetS

To enable GTNetS model inside SimGrid it is needed to patch the GTNetS simulator source code and build/install it from scratch

- Download and enter the recent downloaded GTNetS directory

    svn checkout svn://scm.gforge.inria.fr/svn/simgrid/contrib/trunk/GTNetS/
    cd GTNetS

- Use the following commands to unzip and patch GTNetS package to work within SimGrid.

    unzip gtnets-current.zip
    tar zxvf gtnets-current-patch.tgz
    cd gtnets-current
    cat ../00*.patch | patch -p1

- OPTIONALLY you can use a patch for itanium 64bit processor family.

    cat ../AMD64-FATAL-Removed-DUL_SIZE_DIFF-Added-fPIC-compillin.patch | patch -p1

- Compile GTNetS

  Due to portability issues it is possible that GTNetS does not compile in your architecture. The patches furnished in SimGrid SVN repository are intended for use in Linux architecture only. Unfortunately, we do not have the time, the money, neither the manpower to guarantee GTNetS portability. We advice you to use one of GTNetS communication channel to get more help in compiling GTNetS.

    ln -sf Makefile.linux Makefile
    sed -i 's/-fPIC/-fPIC -fpermissive/g' Makefile
    make depend
    make debug

- NOTE A lot of warnings are expected but the application should compile just fine. If the makefile insists in compiling some QT libraries please try a make clean before asking for help.

- To compile optimized version

    make opt

- Installing GTNetS

It is important to put the full path of your libgtsim-xxxx.so file when creating the symbolic link. Replace < userhome > by some path you have write access to.

    ln -sf /<absolute_path>/gtnets_current/libgtsim-debug.so /<userhome>/usr/lib/libgtnets.so
    export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}/<userhome>/usr/lib/
    mkdir /<userhome>/usr/include/gtnets
    cp -fr SRC/*.h /<userhome>/usr/include/gtnets

- Enable GTNetS support in SimGrid

In order to enable gtnets with simgrid you have to give where is gtnets. (path to <gtnets_path>/lib and <gtnets_path>/include)

    cmake . -Denable_gtnets=ON -Dgtnets_path=/<userhome>/usr

- Once you have followed all the instructions for compiling and installing successfully you can activate this feature at runntime with the following options:

    cd simgrid
    make
    ctest -R gtnets

- Or try the GTNetS model dogbone example with

    gtnets/gtnets gtnets/onelink-p.xml gtnets/onelink-d.xml --cfg=network_model:GTNets

A long version of this HowTo it is available

More about GTNetS simulator at GTNetS Website

- DISCLAIMER The patches provided by us worked successfully with GTNetS found here, dated from 12th June 2008. Due to the discontinuing development of GTNetS it is impossible to precise a version number. We STRONGLY recommend you to download and install the GTNetS version found in SimGrid repository as explained above.

# Using NS3

It is possible to use discrete-event network simulator (ns-3) for Internet systems instead of the default one.

A ns-3 platform is created according to the platform file you provide in SimGrid format. However from this configuration, we had to set up some extra parameters :

- First, whenever possible, we let default ns3 values and we don't changed it ; in case you have doubts on values for those parameters (TCP parameters for example), blame ns-3...

- Second, routing used inside ns-3 is a global and static one, relying on a shortest path algorithm. We did so by using ns3::Ipv4GlobalRoutingHelper::PopulateRoutingTables.

- Third, we also choose to restrict the way your platform is built : end hosts cannot have more than one interface card (so, only one <link> in your SimGrid platform should link an end host to the platform ; if not, your end host will be considered as a router.

To use ns3 model inside SimGrid you have to install at least the version 3.10 of ns3 simulator.

- Download and enter the lateast release (here the 3.12.1)

    http://www.nsnam.org/release/ns-allinone-3.12.1.tar.bz2
    tar -xf ns-allinone-3.12.1.tar.bz2
    cd ns-allinone-3.12.1/ns-3.12.1/

- Configure, make and install ns3

    ./waf configure --prefix="ns-3_install_directory"
    ./waf
    ./waf install

After install ns-3 you should have directories into your "ns-3_install_directory":

- include/ns3/
- lib/
- bin/ (with 3.12)

You also need to add to the LD_LIBRARY_PATH : "ns-3_install_directory/lib".

- Enable ns-3 support on SimGrid

In order to enable ns-3 with simgrid you have to give where is ns-3 to the simgrid configuration command. (path to <ns3_path>/lib and <ns3_path>/include)

    cmake . -Denable_ns3=ON -Dns3_path=<ns3_path>

With the output of the configuration you can see if ns-3 is detected by included the directory to flags.

    Configuration of package `simgrid' on arch (=4):
                 BUILDNAME :        UNIX
                 SITE      :        Linux_2.6.38-11-generic_x86_64
                 Release   :        simgrid-3.6.1

             Compiler: c++ :        /usr/bin/c++
                    version:        4.6.1
             Compiler: c   :        /usr/bin/gcc
                    version:        4.6.1

                   CFlags  :        -O3 -finline-functions -funroll-loops -fno-strict-aliasing -L/usr/lib/x86_64-linux-gnu -I/usr/include
                                            -L/home/navarrop/Install/ns3-3.10/lib -I/home/navarrop/Install/ns3-3.10/include -g3  -D_NS3_3_10
                   CPPFlags:        -I/home/navarrop/Install/ns3-3.10/include -L/home/navarrop/Install/ns3-3.10/lib

            Compile Gtnets :        0
            Compile NS-3   :        1 ---------------------> Be sure this option is "1" otherwise ns-3 is not activated
            Gtnets path    :
            NS-3 path      :        /home/navarrop/Install/ns3-3.10
            Compile Lua    :
            Compile Smpi   :        OFF
            Compile Static :        OFF

            Maintainer mode:        OFF
            Supernovae mode:        OFF
            Model checking :        OFF
            Tracing mode   :        OFF
            Jedule  mode   :        OFF
            Latency bound  :        OFF
            Graphviz mode  :

            Simgrid dependencies:   -lm -lpthread -lns3 -lrt
            Smpi dependencies   :

            INSTALL_PREFIX:         /usr/local
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/navarrop/workspace/simgrid/build

Now you can compile SimGrid

    make

Then you can see if ns-3 is well activated by testing

    ctest -R ns3

You should see

        Start 182: msg-ns3-thread
    1/3 Test #182: msg-ns3-thread ...................   Passed    0.35 sec
        Start 183: msg-ns3-ucontext
    2/3 Test #183: msg-ns3-ucontext .................   Passed    0.22 sec
        Start 184: msg-ns3-raw
    3/3 Test #184: msg-ns3-raw ......................   Passed    0.23 sec

More about ns-3 simulator (Official website)