FreeBSD virtual memory subsystem code
|
#include <sys/cdefs.h>
#include "opt_vm.h"
#include <sys/param.h>
#include <sys/bio.h>
#include <sys/blist.h>
#include <sys/buf.h>
#include <sys/conf.h>
#include <sys/disk.h>
#include <sys/disklabel.h>
#include <sys/eventhandler.h>
#include <sys/fcntl.h>
#include <sys/limits.h>
#include <sys/lock.h>
#include <sys/kernel.h>
#include <sys/mount.h>
#include <sys/namei.h>
#include <sys/malloc.h>
#include <sys/pctrie.h>
#include <sys/priv.h>
#include <sys/proc.h>
#include <sys/racct.h>
#include <sys/resource.h>
#include <sys/resourcevar.h>
#include <sys/rwlock.h>
#include <sys/sbuf.h>
#include <sys/sysctl.h>
#include <sys/sysproto.h>
#include <sys/systm.h>
#include <sys/sx.h>
#include <sys/unistd.h>
#include <sys/user.h>
#include <sys/vmmeter.h>
#include <sys/vnode.h>
#include <security/mac/mac_framework.h>
#include <vm/vm.h>
#include <vm/pmap.h>
#include <vm/vm_map.h>
#include <vm/vm_kern.h>
#include <vm/vm_object.h>
#include <vm/vm_page.h>
#include <vm/vm_pager.h>
#include <vm/vm_pageout.h>
#include <vm/vm_param.h>
#include <vm/swap_pager.h>
#include <vm/vm_extern.h>
#include <vm/uma.h>
#include <geom/geom.h>
Go to the source code of this file.
Data Structures | |
struct | swblk |
struct | swapon_args |
Macros | |
#define | MAX_PAGEOUT_CLUSTER 32 |
#define | SWB_NPAGES MAX_PAGEOUT_CLUSTER |
#define | SWAP_META_PAGES PCTRIE_COUNT |
#define | SWAP_RESERVE_FORCE_ON (1 << 0) |
#define | SWAP_RESERVE_RLIMIT_ON (1 << 1) |
#define | SWAP_RESERVE_ALLOW_NONWIRED (1 << 2) |
#define | NOBJLISTS 8 |
#define | NOBJLIST(handle) (&swap_pager_object_list[((int)(intptr_t)handle >> 4) & (NOBJLISTS-1)]) |
Functions | |
__FBSDID ("$FreeBSD$") | |
static | MALLOC_DEFINE (M_VMPGDATA, "vm_pgdata", "swap pager private data") |
static | TAILQ_HEAD (swdevt) |
static bool | swap_reserve_by_cred_rlimit (u_long pincr, struct ucred *cred, int oc) |
static void | swap_release_by_cred_rlimit (u_long pdecr, struct ucred *cred) |
static void | swap_reserve_force_rlimit (u_long pincr, struct ucred *cred) |
bool | swap_reserve (vm_ooffset_t incr) |
bool | swap_reserve_by_cred (vm_ooffset_t incr, struct ucred *cred) |
void | swap_reserve_force (vm_ooffset_t incr) |
void | swap_release (vm_ooffset_t decr) |
void | swap_release_by_cred (vm_ooffset_t decr, struct ucred *cred) |
static int | sysctl_swap_async_max (SYSCTL_HANDLER_ARGS) |
SYSCTL_PROC (_vm, OID_AUTO, swap_async_max, CTLTYPE_INT|CTLFLAG_RW|CTLFLAG_MPSAFE, NULL, 0, sysctl_swap_async_max, "I", "Maximum running async swap ops") | |
static int | sysctl_swap_fragmentation (SYSCTL_HANDLER_ARGS) |
SYSCTL_PROC (_vm, OID_AUTO, swap_fragmentation, CTLTYPE_STRING|CTLFLAG_RD|CTLFLAG_MPSAFE, NULL, 0, sysctl_swap_fragmentation, "A", "Swap Fragmentation Info") | |
static vm_object_t | swap_pager_alloc (void *handle, vm_ooffset_t size, vm_prot_t prot, vm_ooffset_t offset, struct ucred *) |
static void | swap_pager_dealloc (vm_object_t object) |
static int | swap_pager_getpages (vm_object_t, vm_page_t *, int, int *, int *) |
static int | swap_pager_getpages_async (vm_object_t, vm_page_t *, int, int *, int *, pgo_getpages_iodone_t, void *) |
static void | swap_pager_putpages (vm_object_t, vm_page_t *, int, boolean_t, int *) |
static boolean_t | swap_pager_haspage (vm_object_t object, vm_pindex_t pindex, int *before, int *after) |
static void | swap_pager_init (void) |
static void | swap_pager_unswapped (vm_page_t) |
static void | swap_pager_swapoff (struct swdevt *sp) |
static void | swap_pager_update_writecount (vm_object_t object, vm_offset_t start, vm_offset_t end) |
static void | swap_pager_release_writecount (vm_object_t object, vm_offset_t start, vm_offset_t end) |
static void | swap_pager_freespace (vm_object_t object, vm_pindex_t start, vm_size_t size) |
SYSCTL_INT (_vm, OID_AUTO, dmmax, CTLFLAG_RD, &nsw_cluster_max, 0, "Maximum size of a swap block in pages") | |
static void | swp_sizecheck (void) |
static void | swp_pager_async_iodone (struct buf *bp) |
static bool | swp_pager_swblk_empty (struct swblk *sb, int start, int limit) |
static void | swp_pager_free_empty_swblk (vm_object_t, struct swblk *sb) |
static int | swapongeom (struct vnode *) |
static int | swaponvp (struct thread *, struct vnode *, u_long) |
static int | swapoff_one (struct swdevt *sp, struct ucred *cred, u_int flags) |
static void | swp_pager_freeswapspace (daddr_t blk, daddr_t npages) |
static daddr_t | swp_pager_getswapspace (int *npages) |
static daddr_t | swp_pager_meta_build (vm_object_t, vm_pindex_t, daddr_t) |
static void | swp_pager_meta_free (vm_object_t, vm_pindex_t, vm_pindex_t) |
static void | swp_pager_meta_transfer (vm_object_t src, vm_object_t dst, vm_pindex_t pindex, vm_pindex_t count) |
static void | swp_pager_meta_free_all (vm_object_t) |
static daddr_t | swp_pager_meta_lookup (vm_object_t, vm_pindex_t) |
static void | swp_pager_init_freerange (daddr_t *start, daddr_t *num) |
static void | swp_pager_update_freerange (daddr_t *start, daddr_t *num, daddr_t addr) |
static void * | swblk_trie_alloc (struct pctrie *ptree) |
static void | swblk_trie_free (struct pctrie *ptree, void *node) |
PCTRIE_DEFINE (SWAP, swblk, p, swblk_trie_alloc, swblk_trie_free) | |
void | swap_pager_swap_init (void) |
bool | swap_pager_init_object (vm_object_t object, void *handle, struct ucred *cred, vm_ooffset_t size, vm_ooffset_t offset) |
static vm_object_t | swap_pager_alloc_init (objtype_t otype, void *handle, struct ucred *cred, vm_ooffset_t size, vm_ooffset_t offset) |
static bool | swp_pager_isondev (daddr_t blk, struct swdevt *sp) |
static void | swp_pager_strategy (struct buf *bp) |
int | swap_pager_reserve (vm_object_t object, vm_pindex_t start, vm_pindex_t size) |
static bool | swp_pager_xfer_source (vm_object_t srcobject, vm_object_t dstobject, vm_pindex_t pindex, daddr_t addr) |
void | swap_pager_copy (vm_object_t srcobject, vm_object_t dstobject, vm_pindex_t offset, int destroysource) |
static int | swap_pager_getpages_locked (vm_object_t object, vm_page_t *ma, int count, int *rbehind, int *rahead) |
static void | swap_pager_putpages (vm_object_t object, vm_page_t *ma, int count, int flags, int *rtvals) |
int | swap_pager_nswapdev (void) |
static void | swp_pager_force_dirty (vm_page_t m) |
u_long | swap_pager_swapped_pages (vm_object_t object) |
static void | swap_pager_swapoff_object (struct swdevt *sp, vm_object_t object) |
vm_pindex_t | swap_pager_find_least (vm_object_t object, vm_pindex_t pindex) |
int | sys_swapon (struct thread *td, struct swapon_args *uap) |
static void | swapon_check_swzone (void) |
static void | swaponsomething (struct vnode *vp, void *id, u_long nblks, sw_strategy_t *strategy, sw_close_t *close, dev_t dev, int flags) |
static int | kern_swapoff (struct thread *td, const char *name, enum uio_seg name_seg, u_int flags) |
int | sys_swapoff (struct thread *td, struct swapoff_args *uap) |
void | swapoff_all (void) |
void | swap_pager_status (int *total, int *used) |
int | swap_dev_info (int name, struct xswdev *xs, char *devname, size_t len) |
static int | sysctl_vm_swap_info (SYSCTL_HANDLER_ARGS) |
SYSCTL_INT (_vm, OID_AUTO, nswapdev, CTLFLAG_RD, &nswapdev, 0, "Number of swap devices") | |
SYSCTL_NODE (_vm, OID_AUTO, swap_info, CTLFLAG_RD|CTLFLAG_MPSAFE, sysctl_vm_swap_info, "Swap statistics by device") | |
long | vmspace_swap_count (struct vmspace *vmspace) |
DECLARE_GEOM_CLASS (g_swap_class, g_class) | |
static void | swapgeom_close_ev (void *arg, int flags) |
static void | swapgeom_acquire (struct g_consumer *cp) |
static void | swapgeom_release (struct g_consumer *cp, struct swdevt *sp) |
static void | swapgeom_done (struct bio *bp2) |
static void | swapgeom_strategy (struct buf *bp, struct swdevt *sp) |
static void | swapgeom_orphan (struct g_consumer *cp) |
static void | swapgeom_close (struct thread *td, struct swdevt *sw) |
static int | swapongeom_locked (struct cdev *dev, struct vnode *vp) |
static void | swapdev_strategy (struct buf *bp, struct swdevt *sp) |
static void | swapdev_close (struct thread *td, struct swdevt *sp) |
Variables | |
static struct mtx | sw_dev_mtx |
static int | swap_pager_full = 2 |
static int | swap_pager_almost_full = 1 |
static struct mtx | swbuf_mtx |
static int | nsw_wcount_async |
static int | nsw_wcount_async_max |
int | nsw_cluster_max |
static struct sx | sw_alloc_sx |
static struct pagerlst | swap_pager_object_list [NOBJLISTS] |
static uma_zone_t | swwbuf_zone |
static uma_zone_t | swrbuf_zone |
static uma_zone_t | swblk_zone |
static uma_zone_t | swpctrie_zone |
const struct pagerops | swappagerops |
static int | nswap_lowat = 128 |
static int | nswap_hiwat = 512 |
static g_orphan_t | swapgeom_orphan |
static struct g_class | g_swap_class |
#define MAX_PAGEOUT_CLUSTER 32 |
Definition at line 130 of file swap_pager.c.
#define NOBJLIST | ( | handle | ) | (&swap_pager_object_list[((int)(intptr_t)handle >> 4) & (NOBJLISTS-1)]) |
Definition at line 407 of file swap_pager.c.
#define NOBJLISTS 8 |
Definition at line 405 of file swap_pager.c.
#define SWAP_META_PAGES PCTRIE_COUNT |
Definition at line 137 of file swap_pager.c.
#define SWAP_RESERVE_ALLOW_NONWIRED (1 << 2) |
#define SWAP_RESERVE_FORCE_ON (1 << 0) |
#define SWAP_RESERVE_RLIMIT_ON (1 << 1) |
#define SWB_NPAGES MAX_PAGEOUT_CLUSTER |
Definition at line 134 of file swap_pager.c.
__FBSDID | ( | "$FreeBSD$" | ) |
DECLARE_GEOM_CLASS | ( | g_swap_class | , |
g_class | |||
) |
|
static |
Definition at line 2480 of file swap_pager.c.
References sw_dev_mtx, swdevt::sw_vp, and swapoff_one().
Referenced by sys_swapoff().
|
static |
PCTRIE_DEFINE | ( | SWAP | , |
swblk | , | ||
p | , | ||
swblk_trie_alloc | , | ||
swblk_trie_free | |||
) |
int swap_dev_info | ( | int | name, |
struct xswdev * | xs, | ||
char * | devname, | ||
size_t | len | ||
) |
Definition at line 2640 of file swap_pager.c.
References swdevt::sw_dev, sw_dev_mtx, swdevt::sw_flags, swdevt::sw_nblks, swdevt::sw_used, swdevt::sw_vp, xswdev::xsw_dev, xswdev::xsw_flags, xswdev::xsw_nblks, xswdev::xsw_used, xswdev::xsw_version, and XSWDEV_VERSION.
Referenced by sysctl_vm_swap_info().
|
static |
Definition at line 719 of file swap_pager.c.
References vm_object::handle, NOBJLIST, OBJT_SWAP, sw_alloc_sx, swap_pager_alloc_init(), and vm_pager_object_lookup().
|
static |
Definition at line 687 of file swap_pager.c.
References OFF_TO_IDX, swap_pager_init_object(), vm_object_allocate(), and vm_object_deallocate().
Referenced by swap_pager_alloc().
void swap_pager_copy | ( | vm_object_t | srcobject, |
vm_object_t | dstobject, | ||
vm_pindex_t | offset, | ||
int | destroysource | ||
) |
Definition at line 1060 of file swap_pager.c.
References vm_object::flags, vm_object::handle, NOBJLIST, OBJ_ANON, OBJ_SWAP, OBJT_DEFAULT, vm_object::size, sw_alloc_sx, swp_pager_meta_free_all(), swp_pager_meta_transfer(), vm_object::type, VM_OBJECT_ASSERT_WLOCKED, vm_object_clear_flag(), VM_OBJECT_WLOCK, and VM_OBJECT_WUNLOCK.
Referenced by vm_object_collapse(), and vm_object_split().
|
static |
Definition at line 760 of file swap_pager.c.
References vm_object::flags, vm_object::handle, NOBJLIST, OBJ_ANON, OBJ_DEAD, OBJ_SWAP, OBJT_DEAD, sw_alloc_sx, swp_pager_meta_free_all(), VM_OBJECT_ASSERT_WLOCKED, vm_object_clear_flag(), vm_object_pip_wait(), VM_OBJECT_WLOCK, and VM_OBJECT_WUNLOCK.
vm_pindex_t swap_pager_find_least | ( | vm_object_t | object, |
vm_pindex_t | pindex | ||
) |
Definition at line 2293 of file swap_pager.c.
References swblk::d, vm_object::flags, OBJ_SWAP, swblk::p, vm_object::size, SWAP_META_PAGES, vm_object::swp, vm_object::swp_blks, vm_object::un_pager, and VM_OBJECT_ASSERT_LOCKED.
Referenced by vm_object_scan_all_shadowed().
|
static |
Definition at line 970 of file swap_pager.c.
References swp_pager_meta_free().
|
static |
Definition at line 1413 of file swap_pager.c.
References swap_pager_getpages_locked(), and VM_OBJECT_WLOCK.
Referenced by swap_pager_getpages_async().
|
static |
Definition at line 1428 of file swap_pager.c.
References swap_pager_getpages(), VM_PAGER_ERROR, VM_PAGER_FAIL, and VM_PAGER_OK.
|
static |
Definition at line 1247 of file swap_pager.c.
References vm_object::flags, vm_object::handle, OBJ_DEAD, OBJ_SPLIT, OBJ_SWAP, swap_pager_haspage(), swp_pager_async_iodone(), swp_pager_meta_lookup(), swp_pager_strategy(), swrbuf_zone, uma_zalloc(), VM_ALLOC_NORMAL, VM_OBJECT_ASSERT_WLOCKED, vm_object_pip_add(), VM_OBJECT_SLEEP, VM_OBJECT_WLOCK, VM_OBJECT_WUNLOCK, vm_page_alloc(), VM_PAGER_ERROR, VM_PAGER_FAIL, VM_PAGER_OK, VPO_SWAPINPROG, and VPO_SWAPSLEEP.
Referenced by swap_pager_getpages(), and swap_pager_swapoff_object().
|
static |
Definition at line 1118 of file swap_pager.c.
References vm_object::flags, OBJ_SWAP, SWB_NPAGES, swp_pager_meta_lookup(), and VM_OBJECT_ASSERT_LOCKED.
Referenced by swap_pager_getpages_locked().
|
static |
Definition at line 565 of file swap_pager.c.
References MAX_PAGEOUT_CLUSTER, NOBJLISTS, nsw_cluster_max, sw_alloc_sx, sw_dev_mtx, and swap_pager_object_list.
bool swap_pager_init_object | ( | vm_object_t | object, |
void * | handle, | ||
struct ucred * | cred, | ||
vm_ooffset_t | size, | ||
vm_ooffset_t | offset | ||
) |
Definition at line 668 of file swap_pager.c.
References swap_reserve_by_cred().
Referenced by swap_pager_alloc_init().
int swap_pager_nswapdev | ( | void | ) |
Definition at line 1774 of file swap_pager.c.
Referenced by vm_pageout_swapoff().
|
static |
Definition at line 1475 of file swap_pager.c.
References vm_object::flags, nsw_cluster_max, nsw_wcount_async, OBJ_SWAP, pageproc, PGA_SWAP_FREE, swbuf_mtx, swp_pager_async_iodone(), swp_pager_freeswapspace(), swp_pager_getswapspace(), swp_pager_init_freerange(), swp_pager_meta_build(), swp_pager_strategy(), swp_pager_update_freerange(), swwbuf_zone, uma_zalloc(), VM_OBJECT_WLOCK, VM_OBJECT_WUNLOCK, vm_page_aflag_clear(), VM_PAGER_FAIL, VM_PAGER_PEND, VM_PAGER_PUT_SYNC, and VPO_SWAPINPROG.
|
static |
|
static |
Definition at line 3162 of file swap_pager.c.
References vm_object::flags, OBJ_ANON, VM_OBJECT_WLOCK, and VM_OBJECT_WUNLOCK.
int swap_pager_reserve | ( | vm_object_t | object, |
vm_pindex_t | start, | ||
vm_pindex_t | size | ||
) |
Definition at line 985 of file swap_pager.c.
References swp_pager_freeswapspace(), swp_pager_getswapspace(), swp_pager_init_freerange(), swp_pager_meta_build(), swp_pager_meta_free(), swp_pager_update_freerange(), VM_OBJECT_WLOCK, and VM_OBJECT_WUNLOCK.
void swap_pager_status | ( | int * | total, |
int * | used | ||
) |
Definition at line 2631 of file swap_pager.c.
References swap_pager_avail.
void swap_pager_swap_init | ( | void | ) |
Definition at line 596 of file swap_pager.c.
References nsw_wcount_async, nsw_wcount_async_max, pbuf_zsecond_create(), SWAP_META_PAGES, swblk_zone, swbuf_mtx, swpctrie_zone, swrbuf_zone, swwbuf_zone, uma_zcreate(), uma_zone_get_max(), uma_zone_reserve_kva(), and vm_cnt.
Referenced by vm_pageout().
|
static |
Definition at line 1924 of file swap_pager.c.
References vm_object::flags, OBJ_DEAD, OBJ_SWAP, swdevt::sw_used, swap_pager_swapoff_object(), vm_object_list, vm_object_list_mtx, VM_OBJECT_WLOCK, and VM_OBJECT_WUNLOCK.
Referenced by swapoff_one().
|
static |
Definition at line 1819 of file swap_pager.c.
References swblk::d, vm_object::flags, vm_object::handle, OBJ_DEAD, OBJ_SWAP, swblk::p, SWAP_META_PAGES, swap_pager_getpages_locked(), vm_object::swp, vm_object::swp_blks, swp_pager_force_dirty(), swp_pager_isondev(), swp_pager_meta_free_all(), vm_object::un_pager, VM_ALLOC_NORMAL, VM_ALLOC_WAITFAIL, vm_object_pip_add(), vm_object_pip_wait(), vm_object_pip_wakeupn(), VM_OBJECT_SLEEP, VM_OBJECT_WLOCK, vm_page_all_valid(), vm_page_alloc(), vm_page_busy_acquire(), vm_page_lookup(), vm_page_next(), vm_page_xunbusy, VM_PAGER_OK, VPO_SWAPINPROG, and VPO_SWAPSLEEP.
Referenced by swap_pager_swapoff().
u_long swap_pager_swapped_pages | ( | vm_object_t | object | ) |
Definition at line 1790 of file swap_pager.c.
References swblk::d, vm_object::flags, OBJ_SWAP, swblk::p, SWAP_META_PAGES, vm_object::swp, vm_object::swp_blks, vm_object::un_pager, and VM_OBJECT_ASSERT_LOCKED.
Referenced by vm_object_list_handler().
|
static |
Definition at line 1188 of file swap_pager.c.
References swblk::d, OBJ_SWAP, PGA_SWAP_FREE, PGA_SWAP_SPACE, SWAP_META_PAGES, swp_pager_free_empty_swblk(), swp_pager_freeswapspace(), VM_OBJECT_WOWNED, vm_page_aflag_clear(), vm_page_aflag_set(), and VM_PAGE_OBJECT_BUSY_ASSERT.
Referenced by swp_pager_force_dirty().
|
static |
Definition at line 3150 of file swap_pager.c.
References vm_object::flags, OBJ_ANON, VM_OBJECT_WLOCK, and VM_OBJECT_WUNLOCK.
void swap_release | ( | vm_ooffset_t | decr | ) |
Definition at line 346 of file swap_pager.c.
References swap_release_by_cred().
Referenced by kmap_alloc_wait().
void swap_release_by_cred | ( | vm_ooffset_t | decr, |
struct ucred * | cred | ||
) |
Definition at line 357 of file swap_pager.c.
References swap_release_by_cred_rlimit().
Referenced by swap_release(), vm_map_lookup(), and vm_object_destroy().
|
static |
Definition at line 228 of file swap_pager.c.
Referenced by swap_release_by_cred().
bool swap_reserve | ( | vm_ooffset_t | incr | ) |
Definition at line 255 of file swap_pager.c.
References swap_reserve_by_cred().
Referenced by kmap_alloc_wait(), vm_map_insert(), and vm_map_protect().
bool swap_reserve_by_cred | ( | vm_ooffset_t | incr, |
struct ucred * | cred | ||
) |
Definition at line 262 of file swap_pager.c.
References SWAP_RESERVE_ALLOW_NONWIRED, swap_reserve_by_cred_rlimit(), SWAP_RESERVE_FORCE_ON, and vm_cnt.
Referenced by default_pager_alloc(), swap_pager_init_object(), swap_reserve(), vm_map_lookup(), and vm_object_coalesce().
|
static |
Definition at line 209 of file swap_pager.c.
References SWAP_RESERVE_RLIMIT_ON.
Referenced by swap_reserve_by_cred().
void swap_reserve_force | ( | vm_ooffset_t | incr | ) |
Definition at line 326 of file swap_pager.c.
References swap_reserve_force_rlimit().
|
static |
Definition at line 246 of file swap_pager.c.
Referenced by swap_reserve_force().
|
static |
Definition at line 3071 of file swap_pager.c.
References swdevt::sw_vp.
Referenced by swaponvp().
|
static |
Definition at line 3046 of file swap_pager.c.
References swdevt::sw_first, and swdevt::sw_id.
Referenced by swaponvp().
|
static |
Definition at line 2827 of file swap_pager.c.
References sw_dev_mtx.
Referenced by swapgeom_strategy().
|
static |
Definition at line 2956 of file swap_pager.c.
References sw_dev_mtx, swdevt::sw_id, and swapgeom_close_ev().
Referenced by swapongeom_locked().
|
static |
Definition at line 2813 of file swap_pager.c.
Referenced by swapgeom_close(), swapgeom_orphan(), and swapgeom_release().
|
static |
Definition at line 2852 of file swap_pager.c.
References sw_dev_mtx, and swapgeom_release().
Referenced by swapgeom_strategy().
|
static |
Definition at line 2929 of file swap_pager.c.
References SW_CLOSING, sw_dev_mtx, swdevt::sw_flags, swdevt::sw_id, and swapgeom_close_ev().
|
static |
Definition at line 2840 of file swap_pager.c.
References sw_dev_mtx, swdevt::sw_id, and swapgeom_close_ev().
Referenced by swapgeom_done(), and swapgeom_strategy().
|
static |
Definition at line 2875 of file swap_pager.c.
References sw_dev_mtx, swdevt::sw_first, swdevt::sw_id, swapgeom_acquire(), swapgeom_done(), and swapgeom_release().
Referenced by swapongeom_locked().
void swapoff_all | ( | void | ) |
Definition at line 2601 of file swap_pager.c.
References sw_dev_mtx, swdevt::sw_vp, and swapoff_one().
|
static |
Definition at line 2535 of file swap_pager.c.
References nswap_lowat, swdevt::sw_blist, swdevt::sw_close, SW_CLOSING, sw_dev_mtx, swdevt::sw_flags, swdevt::sw_id, swdevt::sw_nblks, swdevt::sw_vp, swap_pager_almost_full, swap_pager_avail, swap_pager_full, swap_pager_swapoff(), and vm_free_count().
Referenced by kern_swapoff(), and swapoff_all().
|
static |
Definition at line 2399 of file swap_pager.c.
Referenced by swaponsomething().
|
static |
Definition at line 3022 of file swap_pager.c.
References swapongeom_locked().
Referenced by sys_swapon().
|
static |
Definition at line 2975 of file swap_pager.c.
References g_swap_class, sw_dev_mtx, swdevt::sw_id, SW_UNMAPPED, swapgeom_close(), swapgeom_strategy(), and swaponsomething().
Referenced by swapongeom().
|
static |
Definition at line 2413 of file swap_pager.c.
References swdevt::sw_blist, swdevt::sw_close, swdevt::sw_dev, sw_dev_mtx, swdevt::sw_end, swdevt::sw_first, swdevt::sw_flags, swdevt::sw_id, swdevt::sw_nblks, swdevt::sw_strategy, swdevt::sw_used, swdevt::sw_vp, swap_pager_avail, swapon_check_swzone(), and swp_sizecheck().
Referenced by swapongeom_locked(), and swaponvp().
|
static |
Definition at line 3082 of file swap_pager.c.
References sw_dev_mtx, swdevt::sw_id, swapdev_close(), swapdev_strategy(), and swaponsomething().
Referenced by sys_swapon().
|
static |
Definition at line 514 of file swap_pager.c.
References pageproc, swpctrie_zone, and uma_zalloc().
|
static |
Definition at line 522 of file swap_pager.c.
References swpctrie_zone, and uma_zfree().
|
static |
Definition at line 1627 of file swap_pager.c.
References vm_object::handle, nsw_wcount_async, PGA_SWAP_SPACE, pmap_qremove(), swbuf_mtx, swrbuf_zone, swwbuf_zone, uma_zfree(), vm_object_pip_wakeupn(), VM_OBJECT_WLOCK, VM_OBJECT_WUNLOCK, vm_page_activate(), vm_page_aflag_set(), vm_page_deactivate_noreuse(), vm_page_invalid(), vm_page_readahead_finish(), vm_page_sunbusy(), vm_page_undirty(), vm_page_valid(), and VPO_SWAPSLEEP.
Referenced by swap_pager_getpages_locked(), and swap_pager_putpages().
|
static |
Definition at line 1781 of file swap_pager.c.
References swap_pager_unswapped(), vm_page_dirty(), and vm_page_launder().
Referenced by swap_pager_swapoff_object().
|
static |
Definition at line 2016 of file swap_pager.c.
References swblk::p, SWAP_META_PAGES, swblk_zone, vm_object::swp, vm_object::swp_blks, swp_pager_swblk_empty(), uma_zfree(), and vm_object::un_pager.
Referenced by swap_pager_unswapped(), and swp_pager_meta_build().
|
static |
Definition at line 899 of file swap_pager.c.
References swdevt::sw_blist, SW_CLOSING, sw_dev_mtx, swdevt::sw_first, swdevt::sw_flags, swdevt::sw_used, swap_pager_avail, swp_pager_isondev(), and swp_sizecheck().
Referenced by swap_pager_putpages(), swap_pager_reserve(), swap_pager_unswapped(), swp_pager_meta_free_all(), swp_pager_meta_transfer(), and swp_pager_update_freerange().
|
static |
Definition at line 812 of file swap_pager.c.
References swdevt::sw_blist, SW_CLOSING, sw_dev_mtx, swdevt::sw_first, swdevt::sw_flags, swdevt::sw_used, swap_pager_almost_full, swap_pager_avail, swap_pager_full, and swp_sizecheck().
Referenced by swap_pager_putpages(), and swap_pager_reserve().
|
static |
Definition at line 493 of file swap_pager.c.
Referenced by swap_pager_putpages(), swap_pager_reserve(), swp_pager_meta_free_all(), and swp_pager_meta_transfer().
|
static |
Definition at line 861 of file swap_pager.c.
References swdevt::sw_end, and swdevt::sw_first.
Referenced by swap_pager_swapoff_object(), swp_pager_freeswapspace(), and swp_pager_strategy().
|
static |
Definition at line 2036 of file swap_pager.c.
References swblk::d, vm_object::flags, vm_object::handle, OBJ_ANON, OBJ_SWAP, OBJT_SWAP, swblk::p, pageproc, SWAP_META_PAGES, swblk_zone, vm_object::swp, vm_object::swp_blks, swp_pager_free_empty_swblk(), swpctrie_zone, uma_zalloc(), uma_zfree(), uma_zone_exhausted(), uma_zwait(), vm_object::un_pager, VM_OBJECT_ASSERT_WLOCKED, vm_object_set_flag(), VM_OBJECT_WLOCK, VM_OBJECT_WUNLOCK, VM_OOM_SWAPZ, and vm_pageout_oom().
Referenced by swap_pager_putpages(), swap_pager_reserve(), and swp_pager_xfer_source().
|
static |
Definition at line 2215 of file swap_pager.c.
References swp_pager_meta_transfer().
Referenced by swap_pager_freespace(), and swap_pager_reserve().
|
static |
Definition at line 2227 of file swap_pager.c.
References swblk::d, vm_object::flags, OBJ_SWAP, swblk::p, SWAP_META_PAGES, swblk_zone, vm_object::swp, vm_object::swp_blks, swp_pager_freeswapspace(), swp_pager_init_freerange(), swp_pager_update_freerange(), uma_zfree(), vm_object::un_pager, and VM_OBJECT_ASSERT_WLOCKED.
Referenced by swap_pager_copy(), swap_pager_dealloc(), and swap_pager_swapoff_object().
|
static |
Definition at line 2265 of file swap_pager.c.
References swblk::d, vm_object::flags, OBJ_SWAP, SWAP_META_PAGES, vm_object::swp, vm_object::swp_blks, vm_object::un_pager, and VM_OBJECT_ASSERT_LOCKED.
Referenced by swap_pager_getpages_locked(), swap_pager_haspage(), and swp_pager_xfer_source().
|
static |
Definition at line 2159 of file swap_pager.c.
References swblk::d, vm_object::flags, OBJ_SWAP, swblk::p, SWAP_META_PAGES, swblk_zone, vm_object::swp, vm_object::swp_blks, swp_pager_freeswapspace(), swp_pager_init_freerange(), swp_pager_swblk_empty(), swp_pager_update_freerange(), swp_pager_xfer_source(), uma_zfree(), vm_object::un_pager, and VM_OBJECT_ASSERT_WLOCKED.
Referenced by swap_pager_copy(), and swp_pager_meta_free().
|
static |
Definition at line 868 of file swap_pager.c.
References pmap_qenter(), sw_dev_mtx, swdevt::sw_flags, swdevt::sw_strategy, SW_UNMAPPED, and swp_pager_isondev().
Referenced by swap_pager_getpages_locked(), and swap_pager_putpages().
|
static |
Definition at line 1998 of file swap_pager.c.
References swblk::d, and SWAP_META_PAGES.
Referenced by swp_pager_free_empty_swblk(), and swp_pager_meta_transfer().
|
static |
Definition at line 501 of file swap_pager.c.
References swp_pager_freeswapspace().
Referenced by swap_pager_putpages(), swap_pager_reserve(), swp_pager_meta_free_all(), and swp_pager_meta_transfer().
|
static |
Definition at line 1015 of file swap_pager.c.
References vm_object::flags, OBJ_SWAP, swp_pager_meta_build(), swp_pager_meta_lookup(), VM_OBJECT_WLOCK, and VM_OBJECT_WUNLOCK.
Referenced by swp_pager_meta_transfer().
|
static |
Definition at line 542 of file swap_pager.c.
References nswap_hiwat, nswap_lowat, swap_pager_almost_full, swap_pager_avail, and swap_pager_full.
Referenced by swaponsomething(), swp_pager_freeswapspace(), and swp_pager_getswapspace().
int sys_swapoff | ( | struct thread * | td, |
struct swapoff_args * | uap | ||
) |
Definition at line 2529 of file swap_pager.c.
References kern_swapoff().
int sys_swapon | ( | struct thread * | td, |
struct swapon_args * | uap | ||
) |
Definition at line 2341 of file swap_pager.c.
References swapon_args::name, swapongeom(), swaponvp(), and swblk_zone.
SYSCTL_INT | ( | _vm | , |
OID_AUTO | , | ||
dmmax | , | ||
CTLFLAG_RD | , | ||
& | nsw_cluster_max, | ||
0 | , | ||
"Maximum size of a swap block in pages" | |||
) |
SYSCTL_INT | ( | _vm | , |
OID_AUTO | , | ||
nswapdev | , | ||
CTLFLAG_RD | , | ||
& | nswapdev, | ||
0 | , | ||
"Number of swap devices" | |||
) |
SYSCTL_NODE | ( | _vm | , |
OID_AUTO | , | ||
swap_info | , | ||
CTLFLAG_RD| | CTLFLAG_MPSAFE, | ||
sysctl_vm_swap_info | , | ||
"Swap statistics by device" | |||
) |
SYSCTL_PROC | ( | _vm | , |
OID_AUTO | , | ||
swap_async_max | , | ||
CTLTYPE_INT|CTLFLAG_RW| | CTLFLAG_MPSAFE, | ||
NULL | , | ||
0 | , | ||
sysctl_swap_async_max | , | ||
"I" | , | ||
"Maximum running async swap ops" | |||
) |
SYSCTL_PROC | ( | _vm | , |
OID_AUTO | , | ||
swap_fragmentation | , | ||
CTLTYPE_STRING|CTLFLAG_RD| | CTLFLAG_MPSAFE, | ||
NULL | , | ||
0 | , | ||
sysctl_swap_fragmentation | , | ||
"A" | , | ||
"Swap Fragmentation Info" | |||
) |
|
static |
Definition at line 3113 of file swap_pager.c.
References nsw_wcount_async, nsw_wcount_async_max, and swbuf_mtx.
|
static |
Definition at line 931 of file swap_pager.c.
References swdevt::sw_blist, sw_dev_mtx, and swdevt::sw_vp.
|
static |
Definition at line 2695 of file swap_pager.c.
References swap_dev_info(), xswdev::xsw_dev, xswdev::xsw_flags, xswdev::xsw_nblks, xswdev::xsw_used, and XSWDEV_VERSION.
|
static |
Definition at line 152 of file swap_pager.c.
long vmspace_swap_count | ( | struct vmspace * | vmspace | ) |
Definition at line 2754 of file swap_pager.c.
References swblk::d, vm_map_entry::eflags, vm_map_entry::end, vm_object::flags, MAP_ENTRY_IS_SUB_MAP, OBJ_SWAP, vm_map_entry::object, OFF_TO_IDX, vm_map_entry::offset, swblk::p, vm_map_entry::start, SWAP_META_PAGES, vm_object::swp, vm_object::swp_blks, vm_object::un_pager, vmspace::vm_map, VM_MAP_ENTRY_FOREACH, vm_map_object::vm_object, VM_OBJECT_RLOCK, and VM_OBJECT_RUNLOCK.
Referenced by vm_pageout_oom().
|
static |
Definition at line 2804 of file swap_pager.c.
Referenced by swapongeom_locked().
int nsw_cluster_max |
Definition at line 387 of file swap_pager.c.
Referenced by swap_pager_init(), and swap_pager_putpages().
|
static |
Definition at line 385 of file swap_pager.c.
Referenced by swap_pager_putpages(), swap_pager_swap_init(), swp_pager_async_iodone(), and sysctl_swap_async_max().
|
static |
Definition at line 386 of file swap_pager.c.
Referenced by swap_pager_swap_init(), and sysctl_swap_async_max().
|
static |
Definition at line 462 of file swap_pager.c.
Referenced by swp_sizecheck().
|
static |
Definition at line 461 of file swap_pager.c.
Referenced by swapoff_one(), and swp_sizecheck().
|
static |
Definition at line 398 of file swap_pager.c.
Referenced by swap_pager_alloc(), swap_pager_copy(), swap_pager_dealloc(), and swap_pager_init().
|
static |
Definition at line 151 of file swap_pager.c.
Referenced by kern_swapoff(), swap_dev_info(), swap_pager_init(), swapgeom_acquire(), swapgeom_close(), swapgeom_done(), swapgeom_orphan(), swapgeom_release(), swapgeom_strategy(), swapoff_all(), swapoff_one(), swapongeom_locked(), swaponsomething(), swaponvp(), swp_pager_freeswapspace(), swp_pager_getswapspace(), swp_pager_strategy(), and sysctl_swap_fragmentation().
|
static |
Definition at line 383 of file swap_pager.c.
Referenced by swapoff_one(), swp_pager_getswapspace(), and swp_sizecheck().
|
static |
Definition at line 382 of file swap_pager.c.
Referenced by swapoff_one(), swp_pager_getswapspace(), and swp_sizecheck().
|
static |
Definition at line 410 of file swap_pager.c.
Referenced by swap_pager_init().
|
static |
Definition at line 2802 of file swap_pager.c.
const struct pagerops swappagerops |
Definition at line 442 of file swap_pager.c.
Referenced by default_pager_putpages().
|
static |
Definition at line 413 of file swap_pager.c.
Referenced by swap_pager_swap_init(), swp_pager_free_empty_swblk(), swp_pager_meta_build(), swp_pager_meta_free_all(), swp_pager_meta_transfer(), and sys_swapon().
|
static |
Definition at line 384 of file swap_pager.c.
Referenced by swap_pager_putpages(), swap_pager_swap_init(), swp_pager_async_iodone(), and sysctl_swap_async_max().
|
static |
Definition at line 414 of file swap_pager.c.
Referenced by swap_pager_swap_init(), swblk_trie_alloc(), swblk_trie_free(), and swp_pager_meta_build().
|
static |
Definition at line 412 of file swap_pager.c.
Referenced by swap_pager_getpages_locked(), swap_pager_swap_init(), and swp_pager_async_iodone().
|
static |
Definition at line 411 of file swap_pager.c.
Referenced by swap_pager_putpages(), swap_pager_swap_init(), and swp_pager_async_iodone().