summaryrefslogtreecommitdiff
path: root/sag-0.6.1-www/sag-0.6.1.html/x1551.html
diff options
context:
space:
mode:
Diffstat (limited to 'sag-0.6.1-www/sag-0.6.1.html/x1551.html')
-rw-r--r--sag-0.6.1-www/sag-0.6.1.html/x1551.html308
1 files changed, 308 insertions, 0 deletions
diff --git a/sag-0.6.1-www/sag-0.6.1.html/x1551.html b/sag-0.6.1-www/sag-0.6.1.html/x1551.html
new file mode 100644
index 0000000..4bd5990
--- /dev/null
+++ b/sag-0.6.1-www/sag-0.6.1.html/x1551.html
@@ -0,0 +1,308 @@
+<!DOCTYPE HTML PUBLIC "-//Norman Walsh//DTD DocBook HTML 1.0//EN">
+<HTML
+><HEAD
+><TITLE
+>The buffer cache</TITLE
+><META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet"><LINK
+REL="HOME"
+TITLE="The Linux System Administrators' Guide"
+HREF="book1.html"><LINK
+REL="UP"
+TITLE="Memory Management"
+HREF="c1450.html"><LINK
+REL="PREVIOUS"
+TITLE="Allocating swap space"
+HREF="x1532.html"><LINK
+REL="NEXT"
+TITLE="Boots And Shutdowns"
+HREF="c1582.html"></HEAD
+><BODY
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>The Linux System Administrators' Guide</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="x1532.html"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 5. Memory Management</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="c1582.html"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECT1"
+><H1
+CLASS="SECT1"
+><A
+NAME="BUFFER-CACHE"
+>The buffer cache</A
+></H1
+><P
+>Reading from a disk
+
+ <A
+NAME="AEN1554"
+HREF="#FTN.AEN1554"
+>[1]</A
+>
+
+ is very slow compared to accessing (real) memory. In addition,
+ it is common to read the same part of a disk several times
+ during relatively short periods of time. For example, one
+ might first read an e-mail message, then read the letter into
+ an editor when replying to it, then make the mail program read
+ it again when copying it to a folder. Or, consider how often
+ the command <B
+CLASS="COMMAND"
+>ls</B
+> might be run on a system with
+ many users. By reading the information from disk only once
+ and then keeping it in memory until no longer needed, one can
+ speed up all but the first read. This is called <I
+CLASS="GLOSSTERM"
+>disk
+ buffering</I
+>, and the memory used for the purpose is
+ called the <I
+CLASS="GLOSSTERM"
+>buffer cache</I
+>.</P
+><P
+>Since memory is, unfortunately, a finite, nay, scarce
+ resource, the buffer cache usually cannot be big enough (it
+ can't hold all the data one ever wants to use). When the cache
+ fills up, the data that has been unused for the longest time
+ is discarded and the memory thus freed is used for the new
+ data.</P
+><P
+>Disk buffering works for writes as well. On the one hand,
+ data that is written is often soon read again (e.g., a source
+ code file is saved to a file, then read by the compiler),
+ so putting data that is written in the cache is a good idea.
+ On the other hand, by only putting the data into the cache, not
+ writing it to disk at once, the program that writes runs quicker.
+ The writes can then be done in the background, without slowing
+ down the other programs.</P
+><P
+>Most operating systems have buffer caches (although
+ they might be called something else), but not all of
+ them work according to the above principles. Some are
+ <I
+CLASS="GLOSSTERM"
+>write-through</I
+>: the data is written to disk
+ at once (it is kept in the cache as well, of course). The cache
+ is called <I
+CLASS="GLOSSTERM"
+>write-back</I
+> if the writes are done
+ at a later time. Write-back is more efficient than write-through,
+ but also a bit more prone to errors: if the machine crashes,
+ or the power is cut at a bad moment, or the floppy is removed
+ from the disk drive before the data in the cache waiting to be
+ written gets written, the changes in the cache are usually lost.
+ This might even mean that the filesystem (if there is one) is
+ not in full working order, perhaps because the unwritten data
+ held important changes to the bookkeeping information.</P
+><P
+>Because of this, you should never turn off the
+ power without using a proper shutdown procedure (see <A
+HREF="c1582.html"
+>Chapter 6</A
+>), or remove a floppy from the
+ disk drive until it has been unmounted (if it was mounted)
+ or after whatever program is using it has signaled that it
+ is finished and the floppy drive light doesn't shine anymore.
+ The <B
+CLASS="COMMAND"
+>sync</B
+> command <I
+CLASS="GLOSSTERM"
+>flushes</I
+>
+ the buffer, i.e., forces all unwritten data to be written to disk,
+ and can be used when one wants to be sure that everything is
+ safely written. In traditional UNIX systems, there is a program
+ called <B
+CLASS="COMMAND"
+>update</B
+> running in the background
+ which does a <B
+CLASS="COMMAND"
+>sync</B
+> every 30 seconds, so
+ it is usually not necessary to use <B
+CLASS="COMMAND"
+>sync</B
+>.
+ Linux has an additional daemon, <B
+CLASS="COMMAND"
+>bdflush</B
+>,
+ which does a more imperfect sync more frequently to avoid the
+ sudden freeze due to heavy disk I/O that <B
+CLASS="COMMAND"
+>sync</B
+>
+ sometimes causes.</P
+><P
+>Under Linux, <B
+CLASS="COMMAND"
+>bdflush</B
+> is started by
+ <B
+CLASS="COMMAND"
+>update</B
+>. There is usually no reason to worry
+ about it, but if <B
+CLASS="COMMAND"
+>bdflush</B
+> happens to die for
+ some reason, the kernel will warn about this, and you should
+ start it by hand (<B
+CLASS="COMMAND"
+>/sbin/update</B
+>).</P
+><P
+>The cache does not actually buffer files, but blocks, which
+ are the smallest units of disk I/O (under Linux, they are usually
+ 1 kB). This way, also directories, super blocks, other filesystem
+ bookkeeping data, and non-filesystem disks are cached.</P
+><P
+>The effectiveness of a cache is primarily decided by its
+ size. A small cache is next to useless: it will hold so little
+ data that all cached data is flushed from the cache before it
+ is reused. The critical size depends on how much data is read
+ and written, and how often the same data is accessed. The only
+ way to know is to experiment.</P
+><P
+>If the cache is of a fixed size, it is not very good to have
+ it too big, either, because that might make the free memory too
+ small and cause swapping (which is also slow). To make the most
+ efficient use of real memory, Linux automatically uses all free
+ RAM for buffer cache, but also automatically makes the cache
+ smaller when programs need more memory.</P
+><P
+>Under Linux, you do not need to do anything to make use
+ of the cache, it happens completely automatically. Except for
+ following the proper procedures for shutdown and removing
+ floppies, you do not need to worry about it. </P
+></DIV
+><H3
+>Notes</H3
+><TABLE
+BORDER="0"
+CLASS="FOOTNOTES"
+WIDTH="100%"
+><TR
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+WIDTH="5%"
+><A
+NAME="FTN.AEN1554"
+HREF="x1551.html#AEN1554"
+>[1]</A
+></TD
+><TD
+ALIGN="LEFT"
+VALIGN="TOP"
+WIDTH="95%"
+><P
+>Except a RAM disk, for obvious
+ reasons.</P
+></TD
+></TR
+></TABLE
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="x1532.html"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="book1.html"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="c1582.html"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Allocating swap space</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="c1450.html"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Boots And Shutdowns</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+> \ No newline at end of file