<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://www.kerneltrap.org"  xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>KernelTrap - memory</title>
 <link>http://www.kerneltrap.org/taxonomy/term/250/0</link>
 <description></description>
 <language>en-local</language>
<item>
 <title>Linux: Memory Compaction </title>
 <link>http://www.kerneltrap.org/Linux/Memory_Compaction</link>
 <description>&lt;div class=&quot;taxonomy-images&quot;&gt;&lt;a href=&quot;/news/linux&quot; class=&quot;taxonomy-image-links&quot;&gt;&lt;img src=&quot;http://kerneltrap.org/files/category_pictures/K-Linux.gif&quot; alt=&quot;Linux news&quot; title=&quot;Linux news&quot;  width=&quot;75&quot; height=&quot;75&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;!-- google_ad_section_start --&gt;&lt;p&gt;&lt;a href=&quot;http://kerneltrap.org/Mel_Gorman&quot;&gt;Mel Gorman&lt;/a&gt; posted the &lt;a href=&quot;http://kerneltrap.org/mailarchive/linux-kernel/2010/4/2/4554850&quot;&gt;seventh version&lt;/a&gt; of his Memory Compaction patches asking, &quot;&lt;i&gt;are there any further obstacles to merging?&lt;/i&gt;&quot;  The patches, &lt;a href=&quot;http://kerneltrap.org/node/8292&quot;&gt;first posted&lt;/a&gt; in May of 2007, provide a mechanism for moving GFP_MOVABLE pages into a smaller number of pageblocks, reducing externally fragmented memory.  Mel explains that &#039;compaction&#039; is another method of defragmenting memory, &quot;&lt;i&gt;for example, lumpy reclaim is a form of defragmentation as was slub &#039;defragmentation&#039; (really a form of targeted reclaim). Hence, this is called &#039;compaction&#039; to distinguish it from other forms of defragmentation.&lt;/i&gt;&quot;&lt;/p&gt;
&lt;p&gt;The core compaction patch explains that memory is compacted in a zone by relocating movable pages towards the end of the zone:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;A single compaction run involves a migration scanner and a free scanner.  Both scanners operate on pageblock-sized areas in the zone. The migration scanner starts at the bottom of the zone and searches for all movable pages within each area, isolating them onto a private list called migratelist.  The free scanner starts at the top of the zone and searches for suitable areas and consumes the free pages within making them available for the migration scanner. The pages isolated for migration are then migrated to the newly isolated free pages.&quot;&lt;/p&gt;&lt;/blockquote&gt;
&lt;!-- google_ad_section_end --&gt;&lt;p&gt;&lt;a href=&quot;http://www.kerneltrap.org/Linux/Memory_Compaction&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.kerneltrap.org/Linux/Memory_Compaction#comments</comments>
 <category domain="http://www.kerneltrap.org/taxonomy/term/251">compacting memory</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/866">defragmentation</category>
 <category domain="http://www.kerneltrap.org/Linux">Linux</category>
 <category domain="http://www.kerneltrap.org/mel_gorman">Mel Gorman</category>
 <category domain="http://www.kerneltrap.org/memory">memory</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/583">patch</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/477">RAM</category>
 <category domain="http://www.kerneltrap.org/news/linux">Linux news</category>
 <pubDate>Sat, 03 Apr 2010 00:11:38 +0000</pubDate>
 <dc:creator>Jeremy</dc:creator>
 <guid isPermaLink="false">55793 at http://www.kerneltrap.org</guid>
</item>
<item>
 <title>Memory Corruption Bug Solved, 2.6.25 Expected Today</title>
 <link>http://www.kerneltrap.org/Linux/Memory_Corruption_Bug_Solved_2.6.25_Expected_Today</link>
 <description>&lt;div class=&quot;taxonomy-images&quot;&gt;&lt;a href=&quot;/news/linux&quot; class=&quot;taxonomy-image-links&quot;&gt;&lt;img src=&quot;http://kerneltrap.org/files/category_pictures/K-Linux.gif&quot; alt=&quot;Linux news&quot; title=&quot;Linux news&quot;  width=&quot;75&quot; height=&quot;75&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;!-- google_ad_section_start --&gt;&lt;p&gt;&quot;&lt;i&gt;Finally found it ... the patch below solves the sparsemem crash and the test system boots up fine now,&lt;/i&gt;&quot; &lt;a href=&quot;http://kerneltrap.org/mailarchive/linux-kernel/2008/4/16/1443244&quot;&gt;announced Ingo Molnar&lt;/a&gt;.  He described the patch as fixing a &quot;&lt;i&gt;memory corruption and crash on 32-bit x86 systems.  If a !PAE x86 kernel is booted on a 32-bit system with more than 4GB of RAM, then we call memory_present() with a start/end that goes outside the scope of MAX_PHYSMEM_BITS.&lt;/i&gt;&quot;  He included a source snippet with the loop that could corrupt memory, &quot;&lt;i&gt;depending on what that memory is, we might crash, misbehave or just not notice the bug.&lt;/i&gt;&quot;  Ingo went on to note that the bug was first introduced with sparsemem support in the 2.6.16 kernel:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;I believe this was the reason why my many bisection attempts were unsuccessful: the bug pattern was not stable and seemingly working kernels had the memory corruption too. It was pure luck that v2.6.24 &#039;worked&#039; and v2.6.25-rc9 broke visibly.&quot;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Linux creator Linus Torvalds replied, &quot;&lt;i&gt;good job. I&#039;ve pushed this out, and will let this simmer at least  overnight to see if there are any brown-paper-bag issues (either with this or with some last changes from Andrew), but I&#039;m happy, and I think I&#039;ll do the real 2.6.25 tomorrow.&lt;/i&gt;&quot;&lt;/p&gt;
&lt;!-- google_ad_section_end --&gt;&lt;p&gt;&lt;a href=&quot;http://www.kerneltrap.org/Linux/Memory_Corruption_Bug_Solved_2.6.25_Expected_Today&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.kerneltrap.org/Linux/Memory_Corruption_Bug_Solved_2.6.25_Expected_Today#comments</comments>
 <category domain="http://www.kerneltrap.org/2.6.25">2.6.25</category>
 <category domain="http://www.kerneltrap.org/bisect">bisect</category>
 <category domain="http://www.kerneltrap.org/bug">bug</category>
 <category domain="http://www.kerneltrap.org/Ingo_Molnar">Ingo Molnar</category>
 <category domain="http://www.kerneltrap.org/Linus_Torvalds">Linus Torvalds</category>
 <category domain="http://www.kerneltrap.org/Linux">Linux</category>
 <category domain="http://www.kerneltrap.org/memory">memory</category>
 <category domain="http://www.kerneltrap.org/PAE">PAE</category>
 <category domain="http://www.kerneltrap.org/news/linux">Linux news</category>
 <pubDate>Wed, 16 Apr 2008 12:55:42 +0000</pubDate>
 <dc:creator>Jeremy</dc:creator>
 <guid isPermaLink="false">16002 at http://www.kerneltrap.org</guid>
</item>
<item>
 <title>Virtual Compound Pages</title>
 <link>http://www.kerneltrap.org/Linux/Virtual_Compound_Pages</link>
 <description>&lt;div class=&quot;taxonomy-images&quot;&gt;&lt;a href=&quot;/news/linux&quot; class=&quot;taxonomy-image-links&quot;&gt;&lt;img src=&quot;http://kerneltrap.org/files/category_pictures/K-Linux.gif&quot; alt=&quot;Linux news&quot; title=&quot;Linux news&quot;  width=&quot;75&quot; height=&quot;75&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;!-- google_ad_section_start --&gt;&lt;p&gt;&quot;&lt;i&gt;Allocations of larger pages are not reliable in Linux. If larger pages have to be allocated then one faces various choices of allowing graceful fallback or using vmalloc with a performance penalty due to the use of a page table,&lt;/i&gt;&quot; began Christoph Lameter, describing the third version of his virtual compound page support patchset.  He continued, &quot;&lt;i&gt;a virtual compound allocation means that there will be first of all an attempt to satisfy the request with physically contiguous memory. If that is not possible then a virtually contiguous memory will be created.&lt;/i&gt;&quot;  Christopher proposed two advantages:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;1. Current uses of vmalloc can be converted to allocate virtual compounds instead. In most cases physically contiguous memory can be used which avoids the vmalloc performance penalty.  2. Uses of higher order allocations (stacks, buffers etc) can be converted to use virtual compounds instead. Physically contiguous memory will still be used for those higher order allocs in general but the system can degrade to the use of vmalloc should memory become heavily fragmented.&quot;&lt;/p&gt;&lt;/blockquote&gt;
&lt;!-- google_ad_section_end --&gt;&lt;p&gt;&lt;a href=&quot;http://www.kerneltrap.org/Linux/Virtual_Compound_Pages&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.kerneltrap.org/Linux/Virtual_Compound_Pages#comments</comments>
 <category domain="http://www.kerneltrap.org/Christoph_Lameter">Christoph Lameter</category>
 <category domain="http://www.kerneltrap.org/Linux">Linux</category>
 <category domain="http://www.kerneltrap.org/memory">memory</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/1027">virtual compound page</category>
 <category domain="http://www.kerneltrap.org/news/linux">Linux news</category>
 <pubDate>Fri, 21 Mar 2008 23:53:07 +0000</pubDate>
 <dc:creator>Jeremy</dc:creator>
 <guid isPermaLink="false">15824 at http://www.kerneltrap.org</guid>
</item>
<item>
 <title>Quote: Memory Speed</title>
 <link>http://www.kerneltrap.org/Quote/Memory_Speed</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;&quot;You can play games in user space, but you&#039;re fooling yourself if you think you can do as well as doing it in the kernel. And you&#039;re *definitely* fooling yourself if you think mmap() solves performance issues. &#039;Zero-copy&#039; does not equate to &#039;fast&#039;. Memory speeds may be slower than core CPU speeds, but not infinitely so!&quot;&lt;/p&gt;
&lt;!-- google_ad_section_end --&gt;</description>
 <comments>http://www.kerneltrap.org/Quote/Memory_Speed#comments</comments>
 <category domain="http://www.kerneltrap.org/Linus_Torvalds">Linus Torvalds</category>
 <category domain="http://www.kerneltrap.org/Linux">Linux</category>
 <category domain="http://www.kerneltrap.org/memory">memory</category>
 <category domain="http://www.kerneltrap.org/quote">quote</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/1092">Linus Torvalds</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/1094">linux-kernel</category>
 <pubDate>Thu, 07 Feb 2008 06:37:54 +0000</pubDate>
 <dc:creator>Jeremy</dc:creator>
 <guid isPermaLink="false">15433 at http://www.kerneltrap.org</guid>
</item>
<item>
 <title>Quote: Memory Is Getting Relatively Cheap</title>
 <link>http://www.kerneltrap.org/Quote/Memory_Is_Getting_Relatively_Cheap</link>
 <description>&lt;!-- google_ad_section_start --&gt;&lt;p&gt;&quot;Memory is getting relatively cheap these days --- we&#039;re talking maybe US$30 to US$40 per megabyte if your machine can take SIMMS. Upgrading a machine from 2 meg to 4 meg doesn&#039;t cost *that* much money.&quot;&lt;/p&gt;
&lt;!-- google_ad_section_end --&gt;</description>
 <comments>http://www.kerneltrap.org/Quote/Memory_Is_Getting_Relatively_Cheap#comments</comments>
 <category domain="http://www.kerneltrap.org/historical">historical</category>
 <category domain="http://www.kerneltrap.org/Linux">Linux</category>
 <category domain="http://www.kerneltrap.org/memory">memory</category>
 <category domain="http://www.kerneltrap.org/quote">quote</category>
 <category domain="http://www.kerneltrap.org/Theodore_Tso">Theodore Ts&#039;o</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/1105">linux-activists</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/1130">Theodore Ts&#039;o</category>
 <pubDate>Thu, 15 Nov 2007 14:06:08 +0000</pubDate>
 <dc:creator>Jeremy</dc:creator>
 <guid isPermaLink="false">14807 at http://www.kerneltrap.org</guid>
</item>
<item>
 <title>Signaling When Out of Memory</title>
 <link>http://www.kerneltrap.org/Linux/Signaling_When_Out_of_Memory</link>
 <description>&lt;div class=&quot;taxonomy-images&quot;&gt;&lt;a href=&quot;/news/linux&quot; class=&quot;taxonomy-image-links&quot;&gt;&lt;img src=&quot;http://kerneltrap.org/files/category_pictures/K-Linux.gif&quot; alt=&quot;Linux news&quot; title=&quot;Linux news&quot;  width=&quot;75&quot; height=&quot;75&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;!-- google_ad_section_start --&gt;&lt;p&gt;The previous 2.4 Linux kernel maintainer, Marcelo Tossati, resurrected a discussion on adding support for &lt;a href=&quot;http://kerneltrap.org/mailarchive/linux-kernel/2007/10/18/347589&quot;&gt;out of memory notifications&lt;/a&gt; to the Linux kernel.  He explained, &quot;&lt;i&gt;AIX contains the SIGDANGER signal to notify applications to free up some unused cached memory,&lt;/i&gt;&quot; then noting, &quot;&lt;i&gt;there have been a few discussions on implementing such an idea on Linux, but nothing concrete has been achieved.&lt;/i&gt;&quot;  In a request for discussion, Marcelo added, &quot;&lt;i&gt;on the kernel side Rik suggested two notification points: &#039;about to swap&#039; (for desktop scenarios) and &#039;about to OOM&#039; (for embedded-like scenarios).&lt;/i&gt;&quot;  Rik van Riel explained:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;The first threshold - &#039;we are about to swap&#039; - means the application frees memory that it can.  Eg. free()d memory that glibc has not yet given back to the kernel, or JVM running the garbage collector, or ...&lt;/p&gt;
&lt;p&gt;&quot;The second threshold - &#039;we are out of memory&#039; - means that the first approach has failed and the system needs to do something else. On an embedded system, I would expect some application to exit or maybe restart itself.&quot;&lt;/p&gt;&lt;/blockquote&gt;
&lt;!-- google_ad_section_end --&gt;&lt;p&gt;&lt;a href=&quot;http://www.kerneltrap.org/Linux/Signaling_When_Out_of_Memory&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.kerneltrap.org/Linux/Signaling_When_Out_of_Memory#comments</comments>
 <category domain="http://www.kerneltrap.org/embedded">embedded</category>
 <category domain="http://www.kerneltrap.org/Linux">Linux</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/480">Marcelo Tosatti</category>
 <category domain="http://www.kerneltrap.org/memory">memory</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/1012">OOM</category>
 <category domain="http://www.kerneltrap.org/Rik_van_Riel">Rik van Riel</category>
 <category domain="http://www.kerneltrap.org/news/linux">Linux news</category>
 <pubDate>Fri, 19 Oct 2007 13:29:00 +0000</pubDate>
 <dc:creator>Jeremy</dc:creator>
 <guid isPermaLink="false">14617 at http://www.kerneltrap.org</guid>
</item>
<item>
 <title>Virtual Compound Page Support</title>
 <link>http://www.kerneltrap.org/Linux/Virtual_Compound_Page_Support</link>
 <description>&lt;div class=&quot;taxonomy-images&quot;&gt;&lt;a href=&quot;/news/linux&quot; class=&quot;taxonomy-image-links&quot;&gt;&lt;img src=&quot;http://kerneltrap.org/files/category_pictures/K-Linux.gif&quot; alt=&quot;Linux news&quot; title=&quot;Linux news&quot;  width=&quot;75&quot; height=&quot;75&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;!-- google_ad_section_start --&gt;&lt;p&gt;&quot;&lt;i&gt;Currently there is a strong tendency to avoid larger page allocations in the kernel because of past fragmentation issues and the current defragmentation methods are still evolving,&lt;/i&gt;&quot; Christoph Lameter began, posting the first version of his &lt;a href=&quot;http://kerneltrap.org/mailarchive/linux-fsdevel/2007/9/25/322501&quot;&gt;Virtual Compound Page Support patches&lt;/a&gt;, a followup to his &lt;a href=&quot;http://kerneltrap.org/mailarchive/linux-kernel/2007/9/18/263288&quot;&gt;earlier RFC&lt;/a&gt;.  He explained, &quot;&lt;i&gt;we use vmalloc allocations in many locations to provide a safe way to allocate larger arrays. That is due to the danger of higher order allocations failing.&lt;/i&gt;&quot;  Christoph continued, &quot;&lt;i&gt;this patch set provides a way for a higher page allocation to fall back.  Instead of a physically contiguous page a virtually contiguous page is provided. The functionality of the vmalloc layer is used to provide the necessary page tables and control structures to establish a virtually contiguous area.&lt;/i&gt;&quot;&lt;/p&gt;
&lt;p&gt;He then listed four advantages, including, &quot;&lt;i&gt;if higher order allocations are failing then virtual compound pages consisting of a series of order-0 pages can stand in for those allocations.&lt;/i&gt;&quot;  He also listed three disadvantages, noting that new functions are used to access the virtually mapped memory, adding &quot;&lt;i&gt;virtual mappings are less efficient than physical mappings, [so] performance will drop once virtual fall back occurs.&lt;/i&gt;&quot;  He also noted, &quot;&lt;i&gt;virtual mappings have more memory overhead; vm_area control structures page tables, page arrays etc need to be allocated and managed to provide virtual mappings.&lt;/i&gt;&quot;&lt;/p&gt;
&lt;!-- google_ad_section_end --&gt;&lt;p&gt;&lt;a href=&quot;http://www.kerneltrap.org/Linux/Virtual_Compound_Page_Support&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.kerneltrap.org/Linux/Virtual_Compound_Page_Support#comments</comments>
 <category domain="http://www.kerneltrap.org/Christoph_Lameter">Christoph Lameter</category>
 <category domain="http://www.kerneltrap.org/Linux">Linux</category>
 <category domain="http://www.kerneltrap.org/memory">memory</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/1027">virtual compound page</category>
 <category domain="http://www.kerneltrap.org/news/linux">Linux news</category>
 <pubDate>Mon, 01 Oct 2007 07:14:19 +0000</pubDate>
 <dc:creator>Jeremy</dc:creator>
 <guid isPermaLink="false">14486 at http://www.kerneltrap.org</guid>
</item>
<item>
 <title>Out of Memory Notification</title>
 <link>http://www.kerneltrap.org/Linux/Out_of_Memory_Notification</link>
 <description>&lt;div class=&quot;taxonomy-images&quot;&gt;&lt;a href=&quot;/news/linux&quot; class=&quot;taxonomy-image-links&quot;&gt;&lt;img src=&quot;http://kerneltrap.org/files/category_pictures/K-Linux.gif&quot; alt=&quot;Linux news&quot; title=&quot;Linux news&quot;  width=&quot;75&quot; height=&quot;75&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;!-- google_ad_section_start --&gt;&lt;p&gt;&quot;&lt;i&gt;Applications with dynamic input and dynamic memory usage have some issues with the current overcommitting kernel,&lt;/i&gt;&quot; &lt;a href=&quot;http://kerneltrap.org/mailarchive/linux-kernel/2007/9/28/324585&quot;&gt;Daniel Spång explained&lt;/a&gt; looking for ideas on how to best manage out of memory (OOM) situations on embedded systems with little memory and without swap.  He noted, &quot;&lt;i&gt;some kind of notification to the application that the available memory is scarce and let the application free up some memory (e.g., by flushing caches), could be used to improve the situation and avoid the OOM killer.&lt;/i&gt;&quot; Daniel then briefly described four possible solutions, looking for other ideas:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;1) Turn off overcommit. Results in a waste of memory.  2) Nokia uses a lowmem security module to signal on predetermined thresholds. Currently available in the -omap tree. But this requires manual tuning of the thresholds.  3)  Using madvise() with MADV_FREE to get the kernel to free mmaped memory, typically application caches, when the kernel needs the memory.  4) A OOM handler that the application registers with the kernel, and that the kernel executes before the OOM-killer steps in.&quot;&lt;/p&gt;&lt;/blockquote&gt;
&lt;!-- google_ad_section_end --&gt;&lt;p&gt;&lt;a href=&quot;http://www.kerneltrap.org/Linux/Out_of_Memory_Notification&quot; target=&quot;_blank&quot;&gt;read more&lt;/a&gt;&lt;/p&gt;</description>
 <comments>http://www.kerneltrap.org/Linux/Out_of_Memory_Notification#comments</comments>
 <category domain="http://www.kerneltrap.org/taxonomy/term/1013">Daniel Spång</category>
 <category domain="http://www.kerneltrap.org/embedded">embedded</category>
 <category domain="http://www.kerneltrap.org/Linux">Linux</category>
 <category domain="http://www.kerneltrap.org/memory">memory</category>
 <category domain="http://www.kerneltrap.org/taxonomy/term/1012">OOM</category>
 <category domain="http://www.kerneltrap.org/news/linux">Linux news</category>
 <pubDate>Fri, 28 Sep 2007 14:29:58 +0000</pubDate>
 <dc:creator>Jeremy</dc:creator>
 <guid isPermaLink="false">14476 at http://www.kerneltrap.org</guid>
</item>
<item>
 <title>Linux:  Compacting Memory</title>
 <link>http://www.kerneltrap.org/node/8292</link>
 <description>&lt;div class=&quot;taxonomy-images&quot;&gt;&lt;a href=&quot;/news/linux&quot; class=&quot;taxonomy-image-links&quot;&gt;&lt;img src=&quot;http://kerneltrap.org/files/category_pictures/K-Linux.gif&quot; alt=&quot;Linux news&quot; title=&quot;Linux news&quot;  width=&quot;75&quot; height=&quot;75&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;!-- google_ad_section_start --&gt;&lt;p&gt;Mel Gorman offered a first release of a patchset that compacts memory, &quot;&lt;i&gt;this is a prototype for compacting memory to reduce external fragmentation so that free memory exists as fewer, but larger contiguous blocks. Rather than being a full defragmentation solution, this focuses exclusively on pages that are movable via the page migration mechanism.&lt;/i&gt;&quot;  He notes that the patchset is currently incomplete, and at this time memory is only compacted manually, not automatically, &quot;&lt;i&gt;this version of the patchset is mainly concerned with getting the compaction mechanism correct.&lt;/i&gt;&quot;  Mel goes on to describe how it works:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&quot;A single compaction run involves two scanners operating within a zone - a migration and a free scanner. The migration scanner starts at the beginning of a zone and f