<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>forkb0mb.org - VM System</title>
    <link>http://forkb0mb.org/content/</link>
    <description>Still Watching Bits in a Terabyte World</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.4.1 - http://www.s9y.org/</generator>
    
    

<item>
    <title>Anatomy of Linux Journaling File Systems</title>
    <link>http://forkb0mb.org/content/index.php?/archives/318-Anatomy-of-Linux-Journaling-File-Systems.html</link>
            <category>Articles</category>
            <category>Design</category>
            <category>File Systems</category>
            <category>IBM DeveloperWorks</category>
            <category>Linux</category>
            <category>News</category>
            <category>Operating Systems</category>
            <category>Unix</category>
            <category>VM System</category>
    
    <comments>http://forkb0mb.org/content/index.php?/archives/318-Anatomy-of-Linux-Journaling-File-Systems.html#comments</comments>
    <wfw:comment>http://forkb0mb.org/content/wfwcomment.php?cid=318</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://forkb0mb.org/content/rss.php?version=2.0&amp;type=comments&amp;cid=318</wfw:commentRss>
    

    <author>nospam@example.com (TJE)</author>
    <content:encoded>
    &lt;a href=&quot;http://www.ibm.com/developerworks/library/l-journaling-filesystems/index.html?ca=dgr-lnxw01LinuxJFileSystems&amp;S_TACT=105AGX59&amp;S_CMP=GR&quot;  title=&quot;http://www.ibm.com/developerworks/library/l-journaling-filesystems/index.html?ca=dgr-lnxw01LinuxJFileSystems&amp;S_TACT=105AGX59&amp;S_CMP=GR&quot;&gt;Anatomy of Linux Journaling File Systems&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
In recent history, journaling file systems were viewed as an oddity and thought of primarily in terms of research. But today, a journaling file system (ext3) is the default in Linux. Discover the ideas behind journaling file systems, and learn how they provide better integrity in the face of a power failure or system crash. Learn about the various journaling file systems in use today, and peek into the next generation of journaling file systems.&lt;br /&gt;
&lt;br /&gt;
You can define journaling file systems in many ways, but let&#039;s get right to the point. Journaling file systems are for people who tire of watching the boot-time fsck, or file system consistency check process. (Journaling file systems are also for anyone who likes the idea of a fault-resilient file system.) When a system using a traditional, non-journaling file system is improperly shut down, the operating system detects this and performs a consistency check using the fsck utility. This utility scans the file system (which can take a considerable amount of time) and fixes any issues that can be safely corrected. In some cases, the file system can be in such bad shape that the operating system boots into single user mode to allow the user to further the repair process.&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
It is due to a lack of a journal that Windows must be cleanly shut down or else you risk damaging your file-systems.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
So, now you know for whom journaling file systems were created, but how do they obviate the need for fsck? In general, journaling file systems avoid file system corruption by maintaining a journal. The journal is a special file that logs the changes destined for the file system in a circular buffer. At periodic intervals, the journal is committed to the file system. If a crash occurs, the journal can be used as a checkpoint to recover unsaved information and avoid corrupting file system metadata.&lt;br /&gt;
&lt;br /&gt;
To sum up, journaling file systems are fault-resilient file systems that use a journal to log changes before they&#039;re committed to the file system to avoid metadata corruption. But like many Linux solutions, more than one option is available to you. Let&#039;s take a short walk through journaling file system history, and then review the file systems available and how they differ.&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
As usual, this is another excellent entry on IBM&#039;s DeveloperWorks.   With my interest in file-system development, this was quite a worthwhile read.&lt;br /&gt;
&lt;br /&gt;
The article also links to many other &quot;Anatomy of...&quot; articles, including all DeveloperWorks articles by &lt;a href=&quot;http://www.ibm.com/developerworks/views/linux/libraryview.jsp?topic_by=All+topics+and+related+products&amp;sort_order=desc&amp;lcl_sort_order=desc&amp;search_by=tim+jones&amp;search_flag=true&amp;type_by=Articles&amp;show_abstract=false&amp;sort_by=Date&amp;end_no=100&amp;show_all=false&amp;S_TACT=105AGX59&amp;S_CMP=GR&quot;  title=&quot;http://www.ibm.com/developerworks/views/linux/libraryview.jsp?topic_by=All+topics+and+related+products&amp;sort_order=desc&amp;lcl_sort_order=desc&amp;search_by=tim+jones&amp;search_flag=true&amp;type_by=Articles&amp;show_abstract=false&amp;sort_by=Date&amp;end_no=100&amp;show_all=false&amp;S_TACT=105AGX59&amp;S_CMP=GR&quot;&gt;M. Tim Jones&lt;/a&gt;:&lt;ul&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/linux/library/l-flash-filesystems/?S_TACT=105AGX59&amp;S_CMP=GR&quot;  title=&quot;http://www.ibm.com/developerworks/linux/library/l-flash-filesystems/?S_TACT=105AGX59&amp;S_CMP=GR&quot;&gt;Anatomy of Linux Flash File Systems&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/linux/library/l-real-time-linux/?S_TACT=105AGX59&amp;S_CMP=GR&quot;  title=&quot;http://www.ibm.com/developerworks/linux/library/l-real-time-linux/?S_TACT=105AGX59&amp;S_CMP=GR&quot;&gt;Anatomy of Real-Time Linux Architectures&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/linux/library/l-scsi-subsystem/?S_TACT=105AGX59&amp;S_CMP=GR&quot;  title=&quot;http://www.ibm.com/developerworks/linux/library/l-scsi-subsystem/?S_TACT=105AGX59&amp;S_CMP=GR&quot;&gt;Anatomy of the Linux SCSI Subsystem&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/linux/library/l-linux-filesystem/?S_TACT=105AGX59&amp;S_CMP=GR&quot;  title=&quot;http://www.ibm.com/developerworks/linux/library/l-linux-filesystem/?S_TACT=105AGX59&amp;S_CMP=GR&quot;&gt;Anatomy of the Linux File System&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/linux/library/l-linux-networking-stack/?S_TACT=105AGX59&amp;S_CMP=GR&quot;  title=&quot;http://www.ibm.com/developerworks/linux/library/l-linux-networking-stack/?S_TACT=105AGX59&amp;S_CMP=GR&quot;&gt;Anatomy of the Linux Networking Stack&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/linux/library/l-linux-kernel/?S_TACT=105AGX59&amp;S_CMP=GR&quot;  title=&quot;http://www.ibm.com/developerworks/linux/library/l-linux-kernel/?S_TACT=105AGX59&amp;S_CMP=GR&quot;&gt;Anatomy of the Linux Kernel&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/linux/library/l-linux-slab-allocator?S_TACT=105AGX59&amp;S_CMP=GR&quot;  title=&quot;http://www.ibm.com/developerworks/linux/library/l-linux-slab-allocator?S_TACT=105AGX59&amp;S_CMP=GR&quot;&gt;Anatomy of the Linux Slab Allocator&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;http://www.ibm.com/developerworks/linux/library/l-linux-synchronization.html&quot;  title=&quot;http://www.ibm.com/developerworks/linux/library/l-linux-synchronization.html&quot;&gt;Anatomy of Linux Synchronization Methods&lt;/a&gt;&lt;br /&gt;
&lt;/ul&gt;*/ 
    </content:encoded>

    <pubDate>Sun, 15 Jun 2008 18:23:31 -0400</pubDate>
    <guid isPermaLink="false">http://forkb0mb.org/content/index.php?/archives/318-guid.html</guid>
    
</item>
<item>
    <title>Linux /proc/sys/vm/drop_caches</title>
    <link>http://forkb0mb.org/content/index.php?/archives/245-Linux-procsysvmdrop_caches.html</link>
            <category>Design</category>
            <category>Linux</category>
            <category>Operating Systems</category>
            <category>Unix</category>
            <category>VM System</category>
    
    <comments>http://forkb0mb.org/content/index.php?/archives/245-Linux-procsysvmdrop_caches.html#comments</comments>
    <wfw:comment>http://forkb0mb.org/content/wfwcomment.php?cid=245</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://forkb0mb.org/content/rss.php?version=2.0&amp;type=comments&amp;cid=245</wfw:commentRss>
    

    <author>nospam@example.com (TJE)</author>
    <content:encoded>
    &lt;a href=&quot;http://www.linuxinsight.com/proc_sys_vm_drop_caches.html&quot;  title=&quot;http://www.linuxinsight.com/proc_sys_vm_drop_caches.html&quot;&gt;Linux /proc/sys/vm/drop_caches&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Free pagecache:&lt;/strong&gt;&lt;br /&gt;
echo 1 &gt; /proc/sys/vm/drop_caches&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Free dentries and inodes:&lt;/strong&gt;&lt;br /&gt;
echo 2 &gt; /proc/sys/vm/drop_caches&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Free pagecache, dentries and inodes:&lt;/strong&gt;&lt;br /&gt;
echo 3 &gt; /proc/sys/vm/drop_caches&lt;br /&gt;
&lt;br /&gt;
It is recommended that the user run sync(1) first.  This tunable was added in kernel 2.6.16.&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
I paraphrased most of the info from the page linked, but this is a pretty nifty trick.  Too bad this wasn&#039;t in 2.6.9-HUGEMEM, it would likely have been of huge benefit being in 32-bit mode with a lot of RAM.  I was running 32 GB of RAM on 32-bit OS (64-bit hardware), and kept running out of free chunks in many different areas, and fragmentation was horrible.  This might have cleared that up.&lt;br /&gt;
*/ 
    </content:encoded>

    <pubDate>Tue, 18 Sep 2007 23:13:49 -0400</pubDate>
    <guid isPermaLink="false">http://forkb0mb.org/content/index.php?/archives/245-guid.html</guid>
    
</item>
<item>
    <title>Anatomy of the Linux Slab Allocator</title>
    <link>http://forkb0mb.org/content/index.php?/archives/175-Anatomy-of-the-Linux-Slab-Allocator.html</link>
            <category>Articles</category>
            <category>Design</category>
            <category>IBM DeveloperWorks</category>
            <category>Linux</category>
            <category>News</category>
            <category>Operating Systems</category>
            <category>Unix</category>
            <category>VM System</category>
    
    <comments>http://forkb0mb.org/content/index.php?/archives/175-Anatomy-of-the-Linux-Slab-Allocator.html#comments</comments>
    <wfw:comment>http://forkb0mb.org/content/wfwcomment.php?cid=175</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://forkb0mb.org/content/rss.php?version=2.0&amp;type=comments&amp;cid=175</wfw:commentRss>
    

    <author>nospam@example.com (TJE)</author>
    <content:encoded>
    &lt;a href=&quot;http://www-128.ibm.com/developerworks/linux/library/l-linux-slab-allocator/?ca=dgr-lnxw07LinuxSlabAllo&quot;  title=&quot;http://www-128.ibm.com/developerworks/linux/library/l-linux-slab-allocator/?ca=dgr-lnxw07LinuxSlabAllo&quot;&gt;Anatomy of the Linux Slab Allocator&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
Another great IBM DeveloperWorks article.  This one covers the memory management system in Linux 2.6.21.&lt;br /&gt;
*/ 
    </content:encoded>

    <pubDate>Fri, 18 May 2007 10:31:32 -0400</pubDate>
    <guid isPermaLink="false">http://forkb0mb.org/content/index.php?/archives/175-guid.html</guid>
    
</item>
<item>
    <title>Understanding Virtual Memory</title>
    <link>http://forkb0mb.org/content/index.php?/archives/173-Understanding-Virtual-Memory.html</link>
            <category>Design</category>
            <category>Linux</category>
            <category>Operating Systems</category>
            <category>Unix</category>
            <category>VM System</category>
    
    <comments>http://forkb0mb.org/content/index.php?/archives/173-Understanding-Virtual-Memory.html#comments</comments>
    <wfw:comment>http://forkb0mb.org/content/wfwcomment.php?cid=173</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://forkb0mb.org/content/rss.php?version=2.0&amp;type=comments&amp;cid=173</wfw:commentRss>
    

    <author>nospam@example.com (TJE)</author>
    <content:encoded>
    &lt;a href=&quot;http://www.redhat.com/magazine/001nov04/features/vm/&quot;  title=&quot;http://www.redhat.com/magazine/001nov04/features/vm/&quot;&gt;Understanding Virtual Memory&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
This is a &lt;a href=&quot;http://www.redhat.com/magazine/&quot;  title=&quot;http://www.redhat.com/magazine/&quot;&gt;RedHat Magazine&lt;/a&gt; article.  It&#039;s a little out-dated, covering RHEL 3.x with it&#039;s 2.4 series kernel.  This is still an interesting read as it gives good coverage from the OS level of how RHEL manages it&#039;s memory system.&lt;br /&gt;
*/ 
    </content:encoded>

    <pubDate>Wed, 16 May 2007 14:51:46 -0400</pubDate>
    <guid isPermaLink="false">http://forkb0mb.org/content/index.php?/archives/173-guid.html</guid>
    
</item>
<item>
    <title>AmigaOS 4.0 New Memory System Revisited</title>
    <link>http://forkb0mb.org/content/index.php?/archives/71-AmigaOS-4.0-New-Memory-System-Revisited.html</link>
            <category>Design</category>
            <category>Operating Systems</category>
            <category>VM System</category>
    
    <comments>http://forkb0mb.org/content/index.php?/archives/71-AmigaOS-4.0-New-Memory-System-Revisited.html#comments</comments>
    <wfw:comment>http://forkb0mb.org/content/wfwcomment.php?cid=71</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://forkb0mb.org/content/rss.php?version=2.0&amp;type=comments&amp;cid=71</wfw:commentRss>
    

    <author>nospam@example.com (TJE)</author>
    <content:encoded>
    &lt;a href=&quot;http://www.hyperion-entertainment.com/index.php?option=content&amp;task=view&amp;id=23&amp;Itemid=&quot;  title=&quot;http://www.hyperion-entertainment.com/index.php?option=content&amp;task=view&amp;id=23&amp;Itemid=&quot;&gt;AmigaOS 4.0 New Memory System Revisited&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
[Virtual Address Space Allocation]&lt;br /&gt;
For one, all free resource blocks are held in space-segregated lists, i.e. there is a list for each power-of-two resource group. This makes allocations a lot faster by providing an upper and lower bound for a search. For example, if you want to allocate a block of 2^10 bytes, you can basically skip searching any block below 2^10 bytes in size simply because it won&#039;t fit. Similarly, you don&#039;t need to search for blocks that are larger than, say, twice the size of the block, since there might still be blocks of a size near to what we need. Size-segregated free lists help narrow down the search, making the search itself faster and the result better in terms of fragmentation.&lt;br /&gt;
&lt;br /&gt;
In addition, the resource maps use the normal object caches for accelerating &quot;small&quot; allocations. Most allocations are below a certain size. For example, the virtual addresses are always allocated in chunks of at least one &quot;page&quot; in memory (4KB). So it&#039;s common to allocate blocks of one, two, four, or eight pages. The object caches provide an easy method for keeping these common sizes, making every allocation of these sizes an exact fit, further reducing fragmentation.&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
This is a great way to handle memory allocation, IMO.  It&#039;s not quite O(1), but it&#039;s certainly faster than your average O(n) algorithms.  I&#039;d say it would be O(m/n) where 0 &lt; m &lt; 1 and n &gt; 1.   This should also greatly reduce external fragmentation of the VM system.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
[Physical Page Allocation]&lt;br /&gt;
The de-facto standard in allocation of physical pages is a method invented by &lt;a href=&quot;http://en.wikipedia.org/wiki/Donald_E._Knuth&quot;  title=&quot;http://en.wikipedia.org/wiki/Donald_E._Knuth&quot;&gt;Knuth&lt;/a&gt;, called the &quot;buddy system&quot;. Basically every modern operating system uses it, and AmigaOS4.0 is no exception to that.&lt;br /&gt;
&lt;br /&gt;
Buddy systems are in essence size-segregated free lists (see above). To allocate, the system searches for a free block of at least the size of the allocation. Then, if the block is too large, it&#039;s split into two even-sized blocks. These blocks are called &quot;buddies&quot;. One block is returned to it&#039;s appropriate free list, and the other is considered further, maybe splitting it further until it&#039;s size matches that of the allocation.&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
It appears that AmigaOS favors &quot;best-fit&quot; over &quot;first fit&quot; allocation.  Generally speaking, this is the favored approach as you alleviate memory fragmentation at the expense of a few extra CPU cycles.   There&#039;s nothing worse than having 30% of your physical memory free, but fragmented to the point that no block is able to serve a request.&lt;br /&gt;
*/ 
    </content:encoded>

    <pubDate>Tue, 18 Jul 2006 20:48:04 -0400</pubDate>
    <guid isPermaLink="false">http://forkb0mb.org/content/index.php?/archives/71-guid.html</guid>
    
</item>

</channel>
</rss>