<div dir="ltr"><div>Pavel, it turned out that criu gc doesn&#39;t solve Tycho&#39;s use case because he wants to perform continuation of live ps tree after <span style="font-size:12.8px">criu dump --leave-stopped. Implementation of this feature is very different comparing to implementation of criu gc that uses dumps as source of information about dead ps tree garbage.</span></div><div><span style="font-size:12.8px">So do we still need new criu gc command? If yes then I&#39;ll send v2 patch set with extended help message for the command.</span></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-08-04 19:26 GMT+03:00 Tycho Andersen <span dir="ltr">&lt;<a href="mailto:tycho.andersen@canonical.com" target="_blank">tycho.andersen@canonical.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Eugene,<br>
<div><div class="h5"><br>
On Thu, Aug 04, 2016 at 07:01:36PM +0300, Eugene Batalov wrote:<br>
&gt; 2016-08-04 18:53 GMT+03:00 Tycho Andersen &lt;<a href="mailto:tycho.andersen@canonical.com">tycho.andersen@canonical.com</a>&gt;<wbr>:<br>
&gt;<br>
&gt; &gt; On Thu, Aug 04, 2016 at 06:42:06PM +0300, Eugene Batalov wrote:<br>
&gt; &gt; &gt; 2016-08-04 18:08 GMT+03:00 Tycho Andersen &lt;<a href="mailto:tycho.andersen@canonical.com">tycho.andersen@canonical.com</a>&gt;<br>
&gt; &gt; :<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Hi Eugene,<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; On Thu, Aug 04, 2016 at 02:49:23PM +0300, Eugene Batalov wrote:<br>
&gt; &gt; &gt; &gt; &gt; Hi Tycho,<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +int gc_network_unlock(void)<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +{<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +     /*<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +      * Unshared ps tree net ns is destroyed after successful<br>
&gt; &gt; dump.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +      * No need to call network_unlock_internal.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +      * Also don&#39;t call ACT_NET_UNLOCK script because we don&#39;t<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +      * resume/restore ps tree - this call would break<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +      * ACT_NET_UNLOCK semantics.<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +      */<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +     return rst_unlock_tcp_connections();<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; What about cpt_unlock_tcp_connections()? IIUC this list is not<br>
&gt; &gt; &gt; &gt; &gt; &gt; persisted, and so if we leave around the network lock stuff, we<br>
&gt; &gt; would<br>
&gt; &gt; &gt; &gt; &gt; &gt; never turn of TCP repair mode.<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; Tycho<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; Let&#39;s consider the moment when we start criu gc or criu restore. At<br>
&gt; &gt; &gt; &gt; &gt; this moment dumpee ps tree doesn&#39;t exist and ps tree sockets don&#39;t<br>
&gt; &gt; &gt; &gt; &gt; exist.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Hmm. Perhaps I misunderstood then. I thought the point was to be able<br>
&gt; &gt; &gt; &gt; to use --leave-stopped (so the ps tree would still exist), and then we<br>
&gt; &gt; &gt; &gt; could at a later time run `criu gc` to unlock things again and clean<br>
&gt; &gt; &gt; &gt; this up.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; Looks like this is the use case you need to support. Let&#39;s look at<br>
&gt; &gt; current<br>
&gt; &gt; &gt; implementation. Does it satisfies your needs?<br>
&gt; &gt;<br>
&gt; &gt; I worked around my issue in another way, so I think we can ignore my<br>
&gt; &gt; needs for the purpose of `criu gc`. If we wanted to clean up after a<br>
&gt; &gt; dump that left the network locked, I don&#39;t think this set would do it<br>
&gt; &gt; completely, but it sounds like we may not care about that.<br>
&gt; &gt;<br>
&gt; Could you propose an example when this patch set doesn&#39;t unlock the network?<br>
<br>
</div></div>Sorry, I was speaking of the case I already mentioned, about trying to<br>
use criu gc to clean up after a criu dump --leave-stopped. I think<br>
this patchset doesn&#39;t handle that case because of the missing<br>
cpt_unlock_tcp_connections(); but it sounds like we don&#39;t care about<br>
that, so never mind :)<br>
<span class="HOEnZb"><font color="#888888"><br>
Tycho<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
&gt;<br>
&gt; &gt;<br>
&gt; &gt; &gt; We can kill whole ps tree with any standard signal based logic so it<br>
&gt; &gt; looks<br>
&gt; &gt; &gt; like there is no problem here.<br>
&gt; &gt; &gt; But is it possible for you to have dump of this killed ps tree. criu gc<br>
&gt; &gt; &gt; needs this dump in order to do its job.<br>
&gt; &gt; &gt; Also criu gc requires only subset of the dump (memory is not needed).<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; For now I prefer current criu gc implementation that works with dumps<br>
&gt; &gt; &gt; rather then with live ps trees.<br>
&gt; &gt; &gt; In general If we want to c/r we always create dump from live ps tree but<br>
&gt; &gt; we<br>
&gt; &gt; &gt; don&#39;t always restore ps tree from dump.<br>
&gt; &gt; &gt; So dump is more basic thing that criu gc relies on. The only question is<br>
&gt; &gt; &gt; about availability of such a dump for gc.<br>
&gt; &gt;<br>
&gt; &gt; Ok, but I still don&#39;t understand, what&#39;s the use case for something this?<br>
&gt; &gt;<br>
&gt; I have some thoughts like &quot;if we don&#39;t restore ps tree we leave some<br>
&gt; garbage in the system and we should be able to remove this garbage&quot;.<br>
&gt; Maybe Pavel can tell us about more important use case.<br>
&gt;<br>
&gt;<br>
&gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; That&#39;s why we don&#39;t need to turn any tcp repair mode off - it is per<br>
&gt; &gt; &gt; &gt; socket<br>
&gt; &gt; &gt; &gt; &gt; thing.<br>
&gt; &gt; &gt; &gt; &gt; Also cpt_unlock_tcp_connections called from network_unlock() that is<br>
&gt; &gt; &gt; &gt; called<br>
&gt; &gt; &gt; &gt; &gt; during criu restore<br>
&gt; &gt; &gt; &gt; &gt; does nothing because cpt_tcp_repair_sockets list is empty. So for me<br>
&gt; &gt; it<br>
&gt; &gt; &gt; &gt; &gt; looks like criu gc works<br>
&gt; &gt; &gt; &gt; &gt; the same as criu restore but without calling of network unlock action<br>
&gt; &gt; &gt; &gt; &gt; script.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I understand; it may be worth noting somewhere in the help output or<br>
&gt; &gt; &gt; &gt; patch notes what exactly the use case is. Right now I don&#39;t undersand<br>
&gt; &gt; &gt; &gt; what it is :)<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;  Yep. I&#39;ll add more info into criu help message in the next patch set<br>
&gt; &gt; &gt; version. Thank you for suggestion.<br>
&gt; &gt;<br>
&gt; &gt; OK :)<br>
&gt; &gt;<br>
&gt; &gt; Tycho<br>
&gt; &gt;<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; Tycho<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +}<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;  int veth_pair_add(char *in, char *out)<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;  {<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;       char *aux;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; diff --git a/criu/sk-tcp.c b/criu/sk-tcp.c<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; index 13d175a..c4aa58f 100644<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; --- a/criu/sk-tcp.c<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +++ b/criu/sk-tcp.c<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; @@ -713,16 +713,19 @@ void tcp_locked_conn_add(struct<br>
&gt; &gt; inet_sk_info<br>
&gt; &gt; &gt; &gt; *ii)<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;       ii-&gt;sk_fd = -1;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;  }<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; -void rst_unlock_tcp_connections(<wbr>void)<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +int rst_unlock_tcp_connections(<wbr>void)<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;  {<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;       struct inet_sk_info *ii;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;       /* Network will be unlocked by network-unlock scripts */<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;       if (root_ns_mask &amp; CLONE_NEWNET)<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; -             return;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +             return 0;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;       list_for_each_entry(ii, &amp;rst_tcp_repair_sockets, rlist)<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; -             nf_unlock_connection_info(ii);<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +             if (nf_unlock_connection_info(ii)<wbr>)<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +                     return -1;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; +     return 0;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;  }<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;  int check_tcp(void)<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; --<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; 1.9.1<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; ______________________________<wbr>_________________<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; CRIU mailing list<br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; <a href="mailto:CRIU@openvz.org">CRIU@openvz.org</a><br>
&gt; &gt; &gt; &gt; &gt; &gt; &gt; <a href="https://lists.openvz.org/mailman/listinfo/criu" rel="noreferrer" target="_blank">https://lists.openvz.org/<wbr>mailman/listinfo/criu</a><br>
&gt; &gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; &gt; --<br>
&gt; &gt; &gt; &gt; &gt; Best regards,<br>
&gt; &gt; &gt; &gt; &gt; Eugene Batalov.<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; --<br>
&gt; &gt; &gt; Best regards,<br>
&gt; &gt; &gt; Eugene Batalov.<br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Best regards,<br>
&gt; Eugene Batalov.<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Best regards,<br>Eugene Batalov.</div>
</div>