root/mm/swap.c

/* [previous][next][first][last][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. swap_setup
  2. buff_setup

   1 /*
   2  *  linux/mm/swap.c
   3  *
   4  *  Copyright (C) 1991, 1992, 1993, 1994  Linus Torvalds
   5  */
   6 
   7 /*
   8  * This file should contain most things doing the swapping from/to disk.
   9  * Started 18.12.91
  10  *
  11  * Swap aging added 23.2.95, Stephen Tweedie.
  12  */
  13 
  14 #include <linux/mm.h>
  15 #include <linux/sched.h>
  16 #include <linux/head.h>
  17 #include <linux/kernel.h>
  18 #include <linux/kernel_stat.h>
  19 #include <linux/errno.h>
  20 #include <linux/string.h>
  21 #include <linux/stat.h>
  22 #include <linux/swap.h>
  23 #include <linux/fs.h>
  24 #include <linux/swapctl.h>
  25 #include <linux/pagemap.h>
  26 
  27 #include <asm/dma.h>
  28 #include <asm/system.h> /* for cli()/sti() */
  29 #include <asm/segment.h> /* for memcpy_to/fromfs */
  30 #include <asm/bitops.h>
  31 #include <asm/pgtable.h>
  32 
  33 /*
  34  * We identify three levels of free memory.  We never let free mem
  35  * fall below the min_free_pages except for atomic allocations.  We
  36  * start background swapping if we fall below free_pages_high free
  37  * pages, and we begin intensive swapping below free_pages_low.
  38  *
  39  * Keep these three variables contiguous for sysctl(2).  
  40  */
  41 int min_free_pages = 20;
  42 int free_pages_low = 30;
  43 int free_pages_high = 40;
  44 
  45 /* We track the number of pages currently being asynchronously swapped
  46    out, so that we don't try to swap TOO many pages out at once */
  47 int nr_async_pages = 0;
  48 
  49 /*
  50  * Constants for the page aging mechanism: the maximum age (actually,
  51  * the maximum "youthfulness"); the quanta by which pages rejuvinate
  52  * and age; and the initial age for new pages. 
  53  */
  54 
  55 swap_control_t swap_control = {
  56         20, 3, 1, 3,            /* Page aging */
  57         10, 2, 2, 4,            /* Buffer aging */
  58         32, 4,                  /* Aging cluster */
  59         8192, 8192,             /* Pageout and bufferout weights */
  60         -200,                   /* Buffer grace */
  61         1, 1,                   /* Buffs/pages to free */
  62         RCL_ROUND_ROBIN         /* Balancing policy */
  63 };
  64 
  65 swapstat_t swapstats = {0};
  66 
  67 /* General swap control */
  68 
  69 /* Parse the kernel command line "swap=" option at load time: */
  70 void swap_setup(char *str, int *ints)
     /* [previous][next][first][last][top][bottom][index][help] */
  71 {
  72         int * swap_vars[8] = {
  73                 &MAX_PAGE_AGE,
  74                 &PAGE_ADVANCE,
  75                 &PAGE_DECLINE,
  76                 &PAGE_INITIAL_AGE,
  77                 &AGE_CLUSTER_FRACT,
  78                 &AGE_CLUSTER_MIN,
  79                 &PAGEOUT_WEIGHT,
  80                 &BUFFEROUT_WEIGHT
  81         };
  82         int i;
  83         for (i=0; i < ints[0] && i < 8; i++) {
  84                 if (ints[i+1])
  85                         *(swap_vars[i]) = ints[i+1];
  86         }
  87 }
  88 
  89 /* Parse the kernel command line "buff=" option at load time: */
  90 void buff_setup(char *str, int *ints)
     /* [previous][next][first][last][top][bottom][index][help] */
  91 {
  92         int * buff_vars[6] = {
  93                 &MAX_BUFF_AGE,
  94                 &BUFF_ADVANCE,
  95                 &BUFF_DECLINE,
  96                 &BUFF_INITIAL_AGE,
  97                 &BUFFEROUT_WEIGHT,
  98                 &BUFFERMEM_GRACE
  99         };
 100         int i;
 101         for (i=0; i < ints[0] && i < 6; i++) {
 102                 if (ints[i+1])
 103                         *(buff_vars[i]) = ints[i+1];
 104         }
 105 }
 106 

/* [previous][next][first][last][top][bottom][index][help] */