<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2015-06-04 16:42 GMT+03:00 Pavel Emelyanov <span dir="ltr">&lt;<a href="mailto:xemul@parallels.com" target="_blank">xemul@parallels.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">&gt; Hi all,<br>
&gt;<br>
&gt; We&#39;re returned back at this problem..<br>
<br>
</span>Cool :)<br>
<span class=""><br>
&gt;&gt;     &gt;     &gt; The usage scenario is following: I&#39;m having a parent process and a child processes bidirectonal communicating<br>
&gt;&gt;     &gt;     &gt; via stream Unix socket. The idea is to dump child process when it&#39;s not needed and to restore it<br>
&gt;&gt;     &gt;     &gt; again later<br>
&gt;<br>
&gt; This task still need for us and we did some test with upstream version of CRIU.<br>
&gt; Code of test stub here -&gt; <a href="http://pastebin.com/tLnRdE3K" target="_blank">http://pastebin.com/tLnRdE3K</a><br>
&gt; CRIU called with next params:<br>
&gt; for dump -&gt; ${CRIU_bin} dump -vvvv -o &lt;PID&gt;.log -D ${DIR} -t &lt;PID&gt; -d --shell-job --ext-unix-sk<br>
&gt; for restore -&gt; ${CRIU_bin} restore -vvvv -o &lt;PID&gt;.log -D ${DIR}  -d --shell-job --ext-unix-sk<br>
&gt;<br>
&gt; Test case: child write in a unix sock, parent read from unix sock.<br>
&gt; Child proccess dumped&amp;restored, but<br>
&gt;  - only if we don&#39;t close sockets after fork (sock[0] in child and sock[1] in parent respectively) otherwise restore process failed<br>
<br>
</span>Can you share the restore logs?<br></blockquote><div><br></div><div>yes sure:</div><div>test stub -&gt; <a href="http://pastebin.com/iBuQy0CL">http://pastebin.com/iBuQy0CL</a></div><div>dump log -&gt; <a href="http://pastebin.com/9ysvQ69m">http://pastebin.com/9ysvQ69m</a></div><div>restorel log -&gt;  <a href="http://pastebin.com/HR459Diu">http://pastebin.com/HR459Diu</a></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span class=""><br>
&gt;  - child PPID not equal parent pid<br>
&gt;  - connection lost<br>
&gt;<br>
&gt; P.S. Also we are checked pipes (instead of socketpair)<br>
&gt; Test case 1: child write in a pipe, parent read from pipe.<br>
&gt; Child proccess dumped&amp;restored, but<br>
&gt;  - child PPID not equal parent pid<br>
&gt;  - connection lost with another end of pipe(continue sending messages into pipe)<br>
&gt; Test case 2: child read in a pipe, parent write from pipe.<br>
&gt; As expected parent received SIGPIPE.<br>
&gt;<br>
&gt; Sumary questions:<br>
&gt; 1. Can we restored relation (subtree) between parent and child process?<br>
<br>
</span>Yes, for this the parent should call criu restore with the --restore-sibling option. Or<br>
use the criu_restore_child() library call. If you call restore from a non-parent process,<br>
then the linkage will not be restored, there&#39;s no such API in the kernel.<br>
<br>
But hmm... this, in theory, can be implemented by putting the parasite into the parent,<br>
then calling fork_with_pid() from it and continuing restore. Need to think about it...</blockquote><div><br></div><div>Ok, thx. We&#39;ll check this option.</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"> </blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class=""><br>
&gt; 2. Do you have a plan for imp of dump\restore functionality for unix sockets with<br>
&gt; option SOCK_SEQPACKET and SOCK_STREAM (created by socketpair call) in near time?<br>
<br>
</span>You mean external sockets? Well, I have plan how to do it, but can&#39;t guarantee you<br>
whether I will be able to allocate time for it. If you&#39;ll be able to do it, then<br>
contributions are welcome :) and from my side I can guarantee the necessary level<br>
of advises, comments and review. </blockquote><div><br></div><div>Thx, I&#39;ll discuss with my team and give you know.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span class=""><br>
&gt; 3. Do you have any ideas which can help us make a dump\restore of child proccess with CRIU?<br>
<br>
</span>Not sure I understand this correctly, would you describe in more details, please?<br></blockquote><div><br></div><div>We have parent process which forks few child processes and exchange with child processes using pair of sockets returned from socketpair(with option SOCK_SEQPACKET or SOCK_STREAM).</div><div>We would like to dump child(s) and  full-featured restore them.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span class=""><font color="#888888"><br>
-- Pavel<br>
<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr"><div class="gmail_signature"><div dir="ltr">Best regards,<div>Artem Kuzmitskiy</div><div><br></div></div></div></div></div>
</div></div>