i-NRG

Internetworking Research Group — UCSC

  • Home
  • People
  • Projects
  • Publications
  • Resources
You are here: Home / HOWTO run simultaneous Cooja simulations

HOWTO run simultaneous Cooja simulations

If you are running Cooja on the BSOE “dance” compute servers, then you may have discovered that sometimes it’s not possible to start a second command-line simulation when one already is running. There two things that you can do to reduce the number of times that this problem affects your simulations.

Write to Unique Testlogs

Normally COOJA writes a testlog to a path like

    ./contiki/tools/cooja/build/COOJA.testlog

To avoid simultaneous COOJA instances from interferring with each other, modify ScriptRunner.java to include the PID in the file name. One consequence of this change is that many old test logs will accumulate in the /soe/yourlogin/contiki/tools/cooja/build directory. Periodically delete these log files.

You will find scriptRunner.java at a path like

    ./java/org/contikios/cooja/plugins/ScriptRunner.java

Make these changes:

Add an import statement after the other import statements.

    import java.lang.management.ManagementFactory;

After the test for a NULL logWriter, create a filename that includes the PID.

    if (logWriter == null) {
        /* Warning: static variable, used by all active test editor plugins */
        // Create a fileName that includes the PID.
        String PID = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
        String uniqueFileName = "COOJA." + PID + ".testlog";
        File logFile = new File(uniqueFileName);

Just before the String command[] is created, create a filename that includes the PID.

    // Create a fileName that includes the PID.
    String PID = ManagementFactory.getRuntimeMXBean().getName().split("@")[0];
    String uniqueFileName = "COOJA." + PID + ".testlog";
    final File logFile = new File(coojaBuild, uniqueFileName);

Staggered Starts

If you try to start several background jobs, you may discover that even with the changes mentioned above, there will be interference. To help reduce the likelihood of interference, stagger the starts. For example, you could make a script that starts several background make commands, but delays their initial execution to be 3 minutes apart.

    make -f cmaes1.mak < lotsofnewlines.txt > make1.out &
    sleep 180
    make -f cmaes2.mak < lotsofnewlines.txt > make2.out &
    sleep 180
    make -f cmaes3.mak < lotsofnewlines.txt > make3.out &
    sleep 180
    make -f cmaes4.mak < lotsofnewlines.txt > make4.out &
    sleep 180
    make -f cmaes5.mak < lotsofnewlines.txt > make5.out &
    sleep 180
    make -f cmaes6.mak < lotsofnewlines.txt > make6.out &
    sleep 180
    make -f cmaes7.mak < lotsofnewlines.txt > make7.out &

In this example, each of the different makefiles cmaes#.mak set the “all” target to be a unique lists of simulation targets, and then they include a main makefile that actually defines how to run the simulations.

    .PHONY: all
    all : target1

    include cmaes.mak

Give the Simulation Newlines

This may no longer be needed, but at one time it seems to help by redirecting stdin of each submitted background job to a text file that had several hundred empty lines. Then if the simulation needed someone to press an Enter key, it would continue on.

The makefile example above shows this change.

After making all of these changes, you still may have a few aborted simulations (for me it’s about 4%). So when necessary, I delete any partial log files and rerun make.

HOWTOs

Here is a list of how-to solutions for problems that we have encountered while doing research in the i-NRG Lab. … Read More

Contact Us

Katia Obraczka
katia@soe.ucsc.edu

Lab
Engineering 2 Building, Room 311
UC Santa Cruz
1156 High St
Santa Cruz, CA 95064
map / driving directions

Copyright © 2023 · Enterprise Pro Theme on Genesis Framework · WordPress · Log in