243 lines
5.6 KiB
HTML
243 lines
5.6 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
|
<HTML
|
|
><HEAD
|
|
><TITLE
|
|
>Allocating swap space</TITLE
|
|
><META
|
|
NAME="GENERATOR"
|
|
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
|
|
REL="HOME"
|
|
TITLE="Linux System Administrators Guide"
|
|
HREF="index.html"><LINK
|
|
REL="UP"
|
|
TITLE="Memory Management"
|
|
HREF="memory-management.html"><LINK
|
|
REL="PREVIOUS"
|
|
TITLE="Sharing swap spaces with other operating systems"
|
|
HREF="sharing-swap.html"><LINK
|
|
REL="NEXT"
|
|
TITLE="The buffer cache"
|
|
HREF="buffer-cache.html"></HEAD
|
|
><BODY
|
|
CLASS="SECT1"
|
|
BGCOLOR="#FFFFFF"
|
|
TEXT="#000000"
|
|
LINK="#0000FF"
|
|
VLINK="#840084"
|
|
ALINK="#0000FF"
|
|
><DIV
|
|
CLASS="NAVHEADER"
|
|
><TABLE
|
|
SUMMARY="Header navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TH
|
|
COLSPAN="3"
|
|
ALIGN="center"
|
|
>Linux System Administrators Guide: </TH
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="left"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="sharing-swap.html"
|
|
ACCESSKEY="P"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="80%"
|
|
ALIGN="center"
|
|
VALIGN="bottom"
|
|
>Chapter 6. Memory Management</TD
|
|
><TD
|
|
WIDTH="10%"
|
|
ALIGN="right"
|
|
VALIGN="bottom"
|
|
><A
|
|
HREF="buffer-cache.html"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
></TABLE
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"></DIV
|
|
><DIV
|
|
CLASS="SECT1"
|
|
><H1
|
|
CLASS="SECT1"
|
|
><A
|
|
NAME="SWAP-ALLOCATION"
|
|
></A
|
|
>6.5. Allocating swap space</H1
|
|
><P
|
|
>Some people will tell you that you should allocate twice as
|
|
much swap space as you have physical memory, but this is a bogus
|
|
rule. Here's how to do it properly:
|
|
|
|
<P
|
|
></P
|
|
><UL
|
|
><LI
|
|
><P
|
|
> Estimate your total memory needs. This is the largest
|
|
amount of memory you'll probably need at a time, that is the
|
|
sum of the memory requirements of all the programs you want to
|
|
run at the same time. This can be done by running at the same
|
|
time all the programs you are likely to ever be running at the
|
|
same time. </P
|
|
><P
|
|
>For instance, if you want to run X, you should allocate
|
|
about 8 MB for it, gcc wants several megabytes (some
|
|
files need an unusually large amount, up to tens of
|
|
megabytes, but usually about four should do), and so on.
|
|
The kernel will use about a megabyte by itself, and the
|
|
usual shells and other small utilities perhaps a few
|
|
hundred kilobytes (say a megabyte together). There is
|
|
no need to try to be exact, rough estimates are fine,
|
|
but you might want to be on the pessimistic side.</P
|
|
><P
|
|
>Remember that if there are going to be several people
|
|
using the system at the same time, they are all going
|
|
to consume memory. However, if two people run the same
|
|
program at the same time, the total memory consumption
|
|
is usually not double, since code pages and shared
|
|
libraries exist only once.</P
|
|
><P
|
|
>The <B
|
|
CLASS="COMMAND"
|
|
>free</B
|
|
> and <B
|
|
CLASS="COMMAND"
|
|
>ps</B
|
|
>
|
|
commands are useful for estimating the memory needs.
|
|
|
|
</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>Add some security to the estimate in step 1. This is because
|
|
estimates of program sizes will probably be wrong, because
|
|
you'll probably forget some programs you want to run, and to
|
|
make certain that you have some extra space just in case. A
|
|
couple of megabytes should be fine. (It is better to allocate
|
|
too much than too little swap space, but there's no need to
|
|
over-do it and allocate the whole disk, since unused swap space
|
|
is wasted space; see later about adding more swap.) Also,
|
|
since it is nicer to deal with even numbers, you can round the
|
|
value up to the next full megabyte.</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>Based on the computations above, you know how much memory
|
|
you'll be needing in total. So, in order to allocate swap
|
|
space, you just need to subtract the size of your physical
|
|
memory from the total memory needed, and you know how much
|
|
swap space you need. (On some versions of UNIX, you need to
|
|
allocate space for an image of the physical memory as well, so
|
|
the amount computed in step 2 is what you need and you shouldn't
|
|
do the subtraction.)</P
|
|
></LI
|
|
><LI
|
|
><P
|
|
>If your calculated swap space is very much larger than your
|
|
physical memory (more than a couple times larger), you should
|
|
probably invest in more physical memory, otherwise performance
|
|
will be too low.</P
|
|
></LI
|
|
></UL
|
|
>
|
|
|
|
</P
|
|
><P
|
|
>It's a good idea to have at least some swap space, even if
|
|
your calculations indicate that you need none. Linux uses
|
|
swap space somewhat aggressively, so that as much physical
|
|
memory as possible can be kept free. Linux will swap out
|
|
memory pages that have not been used, even if the memory
|
|
is not yet needed for anything. This avoids waiting for
|
|
swapping when it is needed: the swapping can be done
|
|
earlier, when the disk is otherwise idle.</P
|
|
><P
|
|
>Swap space can be divided among several disks. This
|
|
can sometimes improve performance, depending on the
|
|
relative speeds of the disks and the access patterns
|
|
of the disks. You might want to experiment with a few
|
|
schemes, but be aware that doing the experiments
|
|
properly is quite difficult. You should not believe
|
|
claims that any one scheme is superior to any other,
|
|
since it won't always be true.
|
|
</P
|
|
></DIV
|
|
><DIV
|
|
CLASS="NAVFOOTER"
|
|
><HR
|
|
ALIGN="LEFT"
|
|
WIDTH="100%"><TABLE
|
|
SUMMARY="Footer navigation table"
|
|
WIDTH="100%"
|
|
BORDER="0"
|
|
CELLPADDING="0"
|
|
CELLSPACING="0"
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="sharing-swap.html"
|
|
ACCESSKEY="P"
|
|
>Prev</A
|
|
></TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="index.html"
|
|
ACCESSKEY="H"
|
|
>Home</A
|
|
></TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="buffer-cache.html"
|
|
ACCESSKEY="N"
|
|
>Next</A
|
|
></TD
|
|
></TR
|
|
><TR
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="left"
|
|
VALIGN="top"
|
|
>Sharing swap spaces with other operating systems</TD
|
|
><TD
|
|
WIDTH="34%"
|
|
ALIGN="center"
|
|
VALIGN="top"
|
|
><A
|
|
HREF="memory-management.html"
|
|
ACCESSKEY="U"
|
|
>Up</A
|
|
></TD
|
|
><TD
|
|
WIDTH="33%"
|
|
ALIGN="right"
|
|
VALIGN="top"
|
|
>The buffer cache</TD
|
|
></TR
|
|
></TABLE
|
|
></DIV
|
|
></BODY
|
|
></HTML
|
|
> |