Print this page
re #13613 rb4516 Tunables needs volatile keyword


   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  23  * Use is subject to license terms.
  24  */



  25 
  26 /*      Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
  27 /*        All Rights Reserved   */
  28 
  29 /*
  30  * University Copyright- Copyright (c) 1982, 1986, 1988
  31  * The Regents of the University of California
  32  * All Rights Reserved
  33  *
  34  * University Acknowledgment- Portions of this document are derived from
  35  * software developed by the University of California, Berkeley, and its
  36  * contributors.
  37  */
  38 
  39 #ifndef _SYS_VMSYSTM_H
  40 #define _SYS_VMSYSTM_H
  41 
  42 #include <sys/proc.h>
  43 
  44 #ifdef  __cplusplus
  45 extern "C" {
  46 #endif
  47 
  48 /*
  49  * Miscellaneous virtual memory subsystem variables and structures.
  50  */
  51 #ifdef _KERNEL
  52 extern pgcnt_t  freemem;        /* remaining blocks of free memory */
  53 extern pgcnt_t  avefree;        /* 5 sec moving average of free memory */
  54 extern pgcnt_t  avefree30;      /* 30 sec moving average of free memory */
  55 extern pgcnt_t  deficit;        /* estimate of needs of new swapped in procs */
  56 extern pgcnt_t  nscan;          /* number of scans in last second */
  57 extern pgcnt_t  desscan;        /* desired pages scanned per second */
  58 extern pgcnt_t  slowscan;
  59 extern pgcnt_t  fastscan;
  60 extern pgcnt_t  pushes;         /* number of pages pushed to swap device */
  61 
  62 /* writable copies of tunables */
  63 extern pgcnt_t  maxpgio;        /* max paging i/o per sec before start swaps */
  64 extern pgcnt_t  lotsfree;       /* max free before clock freezes */
  65 extern pgcnt_t  desfree;        /* minimum free pages before swapping begins */
  66 extern pgcnt_t  minfree;        /* no of pages to try to keep free via daemon */



  67 extern pgcnt_t  needfree;       /* no of pages currently being waited for */
  68 extern pgcnt_t  throttlefree;   /* point at which we block PG_WAIT calls */
  69 extern pgcnt_t  pageout_reserve; /* point at which we deny non-PG_WAIT calls */
  70 extern pgcnt_t  pages_before_pager; /* XXX */


  71 
  72 /*
  73  * TRUE if the pageout daemon, fsflush daemon or the scheduler.  These
  74  * processes can't sleep while trying to free up memory since a deadlock
  75  * will occur if they do sleep.
  76  */
  77 #define NOMEMWAIT() (ttoproc(curthread) == proc_pageout || \
  78                         ttoproc(curthread) == proc_fsflush || \
  79                         ttoproc(curthread) == proc_sched)
  80 
  81 /* insure non-zero */
  82 #define nz(x)   ((x) != 0 ? (x) : 1)
  83 
  84 /*
  85  * Flags passed by the swapper to swapout routines of each
  86  * scheduling class.
  87  */
  88 #define HARDSWAP        1
  89 #define SOFTSWAP        2
  90 




   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 /*
  22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  23  * Use is subject to license terms.
  24  */
  25 /*
  26  * Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
  27  */
  28 
  29 /*      Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */
  30 /*        All Rights Reserved   */
  31 
  32 /*
  33  * University Copyright- Copyright (c) 1982, 1986, 1988
  34  * The Regents of the University of California
  35  * All Rights Reserved
  36  *
  37  * University Acknowledgment- Portions of this document are derived from
  38  * software developed by the University of California, Berkeley, and its
  39  * contributors.
  40  */
  41 
  42 #ifndef _SYS_VMSYSTM_H
  43 #define _SYS_VMSYSTM_H
  44 
  45 #include <sys/proc.h>
  46 
  47 #ifdef  __cplusplus
  48 extern "C" {
  49 #endif
  50 
  51 /*
  52  * Miscellaneous virtual memory subsystem variables and structures.
  53  */
  54 #ifdef _KERNEL
  55 extern pgcnt_t  freemem;        /* remaining blocks of free memory */
  56 extern pgcnt_t  avefree;        /* 5 sec moving average of free memory */
  57 extern pgcnt_t  avefree30;      /* 30 sec moving average of free memory */
  58 extern pgcnt_t  deficit;        /* estimate of needs of new swapped in procs */
  59 extern pgcnt_t  nscan;          /* number of scans in last second */
  60 extern pgcnt_t  desscan;        /* desired pages scanned per second */
  61 extern volatile pgcnt_t slowscan;
  62 extern volatile pgcnt_t fastscan;
  63 extern pgcnt_t  pushes;         /* number of pages pushed to swap device */
  64 
  65 /* writable copies of tunables */
  66 extern volatile pgcnt_t maxpgio;        /* max paging i/o per sec before */
  67                                         /* start swaps */
  68 extern volatile pgcnt_t lotsfree;       /* max free before clock freezes */
  69 extern volatile pgcnt_t desfree;        /* minimum free pages before swapping */
  70                                         /* begins */
  71 extern volatile pgcnt_t minfree;        /* no of pages to try to keep free */
  72                                         /* via daemon */
  73 extern pgcnt_t  needfree;       /* no of pages currently being waited for */
  74 extern volatile pgcnt_t throttlefree;   /* point at which we block PG_WAIT */
  75                                         /* calls */
  76 extern volatile pgcnt_t pageout_reserve; /* point at which we deny */
  77                                         /* non-PG_WAIT calls */
  78 extern volatile pgcnt_t pages_before_pager; /* XXX */
  79 
  80 /*
  81  * TRUE if the pageout daemon, fsflush daemon or the scheduler.  These
  82  * processes can't sleep while trying to free up memory since a deadlock
  83  * will occur if they do sleep.
  84  */
  85 #define NOMEMWAIT() (ttoproc(curthread) == proc_pageout || \
  86                         ttoproc(curthread) == proc_fsflush || \
  87                         ttoproc(curthread) == proc_sched)
  88 
  89 /* insure non-zero */
  90 #define nz(x)   ((x) != 0 ? (x) : 1)
  91 
  92 /*
  93  * Flags passed by the swapper to swapout routines of each
  94  * scheduling class.
  95  */
  96 #define HARDSWAP        1
  97 #define SOFTSWAP        2
  98