<div dir="ltr">Hey Mike, <br><br>Sorry for the late reply. It took me a while to understand what&#39;s really going<br>on.  I have written a simple program to illustrate my point. <br><br>The program first creates a large heap and then block.<br><br>//40MB heap<br>#define TOT_HEAP_SIZE (40 * 1024 * 1024)<br><br>char * start = sbrk(0);<br>sbrk(TOT_HEAP_SIZE);<br>memset(start, 0, TOT_HEAP_SIZE);<br>getchar(); //CRIU dump here!<br><br>I invoke CRIU to checkpoint the process when it is blocked at getchar(). <br><br>Then the program increase the heap size and then block  again:<br><br>sbrk(4096);<br>getchar(); //CRIU dump again here. <br><br><br>I invoke CRIU to checkpoint the process again when the process is blocked at<br>getchar().  What I observe is that the second dump from CRIU will copy all the<br>pages in the heap (40MB).  I have attached the testing program and the scripts<br>to invoke CRIU in case someone wants to play with it. <br><br>This seems to me can be further optimized.  I found that the cause of this<br>behaviour is that the kernel code will mark a VMA as soft-dirty when the VMA is<br>expanded. As a result, all the pages within the VMA will be marked as<br>soft-dirty when reading from /proc/pid/pagemap. Is there a reason for that? <br><br>Thanks in advance for your help!<br><br>Best,<br>Diyu<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, May 15, 2019 at 4:27 AM Mike Rapoport &lt;<a href="mailto:rppt@linux.ibm.com">rppt@linux.ibm.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
On Tue, May 14, 2019 at 12:10:26PM -0700, Diyu Zhou wrote:<br>
&gt; Hey Mike,<br>
&gt; <br>
&gt; Thanks for your reply. I understand what you wrote. However, what I observe is<br>
&gt; that some of the &quot;clean&quot; pages are copied by the CRIU.<br>
&gt; <br>
&gt; For example, let&#39;s say CRIU performs iterative checkpoints (let&#39;s say using<br>
&gt; predump) on a dumpee process. After one checkpoint is completed, the dumpee<br>
&gt; process calls sbrk to increase the size of the heap. What I observe is that<br>
&gt; even the dumpee program didn&#39;t touch any pages in the heap, all the present<br>
&gt; pages in the heap will be marked as dirty and copied in the next checkpoint<br>
&gt; operation. Is there an explanation for such a behavior? <br>
<br>
Are you running with &#39;--track-mem&#39;?<br>
<br>
If I understand correctly, the size of pages*img increases for each<br>
iteration?<br>
<br>
Can you check what&#39;s the contents of pagemap*img with<br>
&#39;crit show /path/to/pagemap-&lt;pid&gt;.img&#39;<br>
and see if the second and the next iterations contain areas marked as<br>
&#39;PE_PRESENT&#39;?<br>
<br>
&gt; Thanks in advance for your help.<br>
&gt; <br>
&gt; Best,<br>
&gt; Diyu<br>
<br>
--<br>
Sincerely yours,<br>
Mike.<br>
<br>
&gt; On Tue, May 14, 2019 at 9:04 AM Mike Rapoport &lt;<a href="mailto:rppt@linux.ibm.com" target="_blank">rppt@linux.ibm.com</a>&gt; wrote:<br>
&gt; <br>
&gt;     On Mon, May 13, 2019 at 04:10:54PM -0700, Diyu Zhou wrote:<br>
&gt;     &gt; Hey, <br>
&gt;     &gt;<br>
&gt;     &gt; Firstly, thanks for the great tool! It is very very helpful. I can see<br>
&gt;     the<br>
&gt;     &gt; development of such a tool <br>
&gt;     &gt; is very challenging and you guys do several clever tricks to make it<br>
&gt;     possible.<br>
&gt;     &gt; I enjoy a lot using <br>
&gt;     &gt; the tool as well as reading the source code and have learned a lot from<br>
&gt;     it. <br>
&gt;     &gt;<br>
&gt;     &gt; I have a question regarding the implementation of the soft dirty pages.<br>
&gt;     From<br>
&gt;     &gt; what I can tell, if <br>
&gt;     &gt; a VMA is expanded, all the pages within it will be marked as soft dirty.<br>
&gt;     This<br>
&gt;     &gt; seems to me will <br>
&gt;     &gt; result in unnecessarily transferring clean pages when iterative dumps are<br>
&gt;     &gt; performed. <br>
&gt;     &gt; Is there any reason not just mark the pages in the expanded part of the<br>
&gt;     VMA<br>
&gt;     &gt; soft dirty? <br>
&gt; <br>
&gt;     When a VMA is expanded is is marked soft-dirty to ensure it would be<br>
&gt;     scanned for the dirty pages.<br>
&gt;     Each page has its own marking that says whether the page is dirty or not.<br>
&gt;     The per-page information is available at /proc/PID/pagemap and CRIU uses it<br>
&gt;     to actually decide what page should be dumped.<br>
&gt; <br>
&gt;     &gt; Thanks again for the wonderful tool and your help! <br>
&gt;     &gt;<br>
&gt;     &gt; Best,<br>
&gt;     &gt; Diyu<br>
&gt;     &gt;<br>
&gt;     &gt;<br>
&gt;     &gt;  <br>
&gt; <br>
&gt;     &gt; _______________________________________________<br>
&gt;     &gt; CRIU mailing list<br>
&gt;     &gt; <a href="mailto:CRIU@openvz.org" target="_blank">CRIU@openvz.org</a><br>
&gt;     &gt; <a href="https://lists.openvz.org/mailman/listinfo/criu" rel="noreferrer" target="_blank">https://lists.openvz.org/mailman/listinfo/criu</a><br>
&gt; <br>
&gt; <br>
&gt;     --<br>
&gt;     Sincerely yours,<br>
&gt;     Mike.<br>
&gt; <br>
&gt; <br>
<br>
</blockquote></div>