VxWorks is a real-time operating system, usually used for embedded systems.   
The development system comes with a simulator (VxSim) that can be used to 
prototype development projects.  I don't know a huge amount about VxSim.  I do 
know: It is not an emulator.  The VxWorks image to run is compiled to the 
native instruction set.  (In this case 32-bit x86).  It uses signals to control 
some behavior, so it catches all signals, but it seems to pass them on.  It 
uses fork internally, perhaps to launch the target process and intercept it's 
system calls? 

Anyway, we were hoping we could checkpoint VxSim with our VxWorks application 
running inside it.  As an example we have a VxWorks application that just 
prints out the run time every few seconds.  If I just run VxSim, it works fine:

/nfs/casc/overture/ROSE/vxworks/vxworks-6.9/host/x86-linux2/bin/vxsim -memsize 
0x3ff00000
time 00:02:01
time 00:02:12

However, when it is run under dmtcp_launch,  dmtcp prints out a number of 
complaints, including one about VxSim sucking up signals. The VxSim startup 
text that normally prints never appears, nor do the times appear, VxSim uses 
100% of a CPU (normal behavior is about 2% when startup is finished), and it 
can't be killed without -9.  (Also unusual).

----------
$ dmtcp_launch vxsim -memsize 0x3ff00000
[40000] NOTE at processinfo.cpp:240 in findMiscAreas; REASON='bottom-most page 
of stack (page with highest address) was
invisible in /proc/self/maps. It is made visible again now.'
[41000] WARNING at socketconnection.cpp:222 in TcpConnection; 
REASON='JWARNING(false) failed'
type = 2
Message: Datagram Sockets not supported. Hopefully, this is a short lived 
connection!
[41000] WARNING at socketconnection.cpp:222 in TcpConnection; 
REASON='JWARNING(false) failed'
type = 2
Message: Datagram Sockets not supported. Hopefully, this is a short lived 
connection!
[40000] WARNING at signalwrappers.cpp:141 in sigaction; REASON='JWARNING(false) 
failed'
"Application trying to use DMTCP's signal for it's own use.\n" "  You should 
employ a different signal by setting the\n" "  environment variable 
DMTCP_SIGCKPT to the number\n" "  of the signal that DMTCP should use for 
checkpointing." = Application trying to use DMTCP's signal for it's own use.
You should employ a different signal by setting the
environment variable DMTCP_SIGCKPT to the number
of the signal that DMTCP should use for checkpointing.
stopSignal = 12
----------

I tried changing the signal that gets sent, but couldn't find any that didn't 
give the same warning.  And some checkpoint files did get generated, but trying 
them causes a segfault:

$ ./dmtcp_restart_script.sh
which: no dmtcp_rm_loclaunch in PATH
Segmentation fault (core dumped)

-------
I also tried the --no-coordinator option, but it didn't work at all:
$ dmtcp_launch --no-coordinator vxsim -memsize 0x3ff00000
[40000] NOTE at processinfo.cpp:240 in findMiscAreas; REASON='bottom-most page 
of stack (page with highest address) was
invisible in /proc/self/maps. It is made visible again now.'
[40000] ERROR at coordinatorapi.cpp:650 in createNewConnectionBeforeFork; 
REASON='JASSERT(!noCoordinator()) failed'
Message: Process attempted to call fork() while in --no-coordinator mode
Because the coordinator is embedded in a single process,
DMTCP will not work with multiple processes.
vxsim (40000): Terminating...

--------
So, I'm at a complete loss.  Is there anything I can do here, or is DMTCP just 
not going to work for this?

Thanks,
Jim


_______________________________________________
Dmtcp-forum mailing list
Dmtcp-forum@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dmtcp-forum

Reply via email to