--
You received this message because you are subscribed to the Google Groups "omnetpp" group.
To post to this group, send email to omn...@googlegroups.com.
To unsubscribe from this group, send email to omnetpp+u...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/omnetpp?hl=en.
To post to this group, send email to omn...@googlegroups.com.
Could you please check the attached INI & run-time script files
together with the resulting log file from the parallel execution of
"examples/inet/kidsnw1" example?
You can simply run "./run-mpi" on the said directory once you put the
attached files there.
Besides routing table configurations, I think the INET seems to have
some issues to address for parallel & distributed simulation.
For more complex examples (which I cannot prepare sample INI/NED
files), I got different types of error messages, as follows (similar
to those in https://groups.google.com/d/topic/omnetpp/5AVBUqATfkc/discussion):
IInterfaceTable not found as submodule `interfaceTable' in host/router ...
Regards,
Joseph
2011/3/25 Rudolf Hornig <rudolf...@gmail.com>:
That's really a good news!
I will definitely give 4.2b1 a try; I have intentionally avoided newer
versions for both OMNeT++ and INET, but have no other choice.
BTW, I am also doing source-level debugging and found that it's a way
more difficult with parallel ones than serial ones. It's, however,
still doable.
Just for your and others' information, I briefly summarize the setup
for this (assuming the use of OpenMPI in a multi-core node; multi-node
case needs a bit of tweaking with X11 security and details can be
found "http://www.open-mpi.org/faq/?category=debugging"):
1. Create a run script (e.g., "gdb-run-mpi") like this:
#!/bin/sh
mpirun -np 2 xterm -e gdb opp_run -x sample.gdb
* NOTE:
- You can replace 'xterm' with your choice of x terminal program (I
personally use urxvt).
- 'sample.gdb' is GDB command file and see #2 below for this.
2. Create a GDB command file ('sample.gdb' in this example) as follows:
set breakpoint pending on
exec-file OMNETPP_ROOT/bin/opp_run
set args -l INET_ROOT/src/inet -n INET_ROOT/examples:INET_ROOT/src -f
./parsim.ini -u Cmdenv (*** more options if needed ***)
tbreak main
tbreak SimTime::overflowAdding
tbreak IPAddressResolver::interfaceTableOf
#display state->snd_nxt
#display state->snd_una
#display state->snd_mss
#display state->snd_max
#display bytes
run
* NOTE:
- Do not use the execution shell script (e.g., "run") provided by
INET. Instead, like the above, you should use the real name of
execution file (either "opp_run" or "inet" depending on your
installation).
- Replace OMNETPP_ROOT and INET_ROOT with your own OMNeT++ and INET
installation root directories.
- You can set as many temporary breakpoints with tbreak
ClassName::functionName as you wish.
3. Type "./gdb-run-mpi". Then, it will open two X terminals each
running a GDB session of MPI process. Now you can debug as usual, but
with two independent sessions.
Of course, later I will summarize my experience in OMNeT++/INET wiki pages.
With Regards,
Joseph
2011/4/13 Rudolf Hornig <rudolf...@gmail.com>:
I also tried the said example with OMNeT++ 4.2b1 and the latest
version of INET (master branch) and could run it through the end.
Thanks again for your quick fix!
By the way, I am still in the middle of debugging process with a bit
more complex example with UDP applications and found the following (I
will report to the Bug Tracker, but currently am gathering more
information):
1. Type mismatch between EnvirBase::getUniqueNumber() of OMNeT++ and
the functions of INET based on it
For instance, UDPAppBase::bindToPort() uses
UDPSocket::generateSocketId() (in line 33 of UDPAppBase.cc), which, in
turn, calls the said getUniqueNumber() function (in line 52 of
UDPSocket.cc).
The problems is that, while getUniqueNumber() returns "unsigned long
integer" value (whose maximum is a really huge number in 64-bit
platform), generateSocketId() returns it as "int" value to its caller
(i.e., bindToPort()); if getUniqueNumber() returns a value beyond the
range of int, generateSocketId() eventually returns "-1" after the
conversion.
In a serial execution, the above would be hardly a problem because the
class variable "nextuniquenumber" is initialized to 0 (in line 1487 of
envirbase.cc of OMNeT++) and during the life time of typical
simulation, the chance that it grows beyond the range of int would be
extremely small.
In a parallel execution, on the other hand, the said variable could be
set to really large values (see line 1490 of envirbase.cc) for LPs
whose process IDs are not zero. This results in error "Model error:
sockId in BIND message not filled in." in my case.
2. (Potential) overflow in getUniqueNumber()
Related with the #1 above, now that "nextuniquenumber" could be
initialized to a really large value in the parallel execution, it's
likely for it to overflow (i.e., cycling back to 0) in the middle of
simulation. Unlike the #1, however, I am not sure whether there would
be any serious issues with it: Does it cause any problem when
getUniqueNumber() returns an identical value in different LPs? Note
that, for a given LP, the chance that getUniqueNumber() returns two
identical values (even with overflow/cycling) during the life time of
a simulation would be quite low.
In this regard, I wonder what would be a quick fix for the issue #1 above.
Again, many thanks in advance for your suggestion/advice!
Joseph
On Wed, Apr 13, 2011 at 3:55 PM, Kyeong Soo (Joseph) Kim
Hello all,
Rudolf
>> > > to>omnetpp+unsubscribe@googlegroups.com.
>> > > For more options, visit this group at
>> > >http://groups.google.com/group/omnetpp?hl=en.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "omnetpp" group.
>> To post to this group, send email to omn...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> For more options, visit this group at
>> http://groups.google.com/group/omnetpp?hl=en.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "omnetpp" group.
> To post to this group, send email to omn...@googlegroups.com.
> To unsubscribe from this group, send email to
Hi again Mr Rudolf
Please tell me how run this example in two partitions? IPv4Address.h is fixed :
- inline void doPacking(cCommBuffer *buf, const IPAddress& addr)
+ inline void doPacking(cCommBuffer *buf, IPAddress& addr)
And I use OMNeT 4.3 with INET 2.0.0
Can you send correct parallel simulation over KIDSNw1 example for me?