Deleted Added
full compact
vm_pageout.c (283310) vm_pageout.c (284665)
1/*-
2 * Copyright (c) 1991 Regents of the University of California.
3 * All rights reserved.
4 * Copyright (c) 1994 John S. Dyson
5 * All rights reserved.
6 * Copyright (c) 1994 David Greenman
7 * All rights reserved.
8 * Copyright (c) 2005 Yahoo! Technologies Norway AS

--- 59 unchanged lines hidden (view full) ---

68 * rights to redistribute these changes.
69 */
70
71/*
72 * The proverbial page-out daemon.
73 */
74
75#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 1991 Regents of the University of California.
3 * All rights reserved.
4 * Copyright (c) 1994 John S. Dyson
5 * All rights reserved.
6 * Copyright (c) 1994 David Greenman
7 * All rights reserved.
8 * Copyright (c) 2005 Yahoo! Technologies Norway AS

--- 59 unchanged lines hidden (view full) ---

68 * rights to redistribute these changes.
69 */
70
71/*
72 * The proverbial page-out daemon.
73 */
74
75#include <sys/cdefs.h>
76__FBSDID("$FreeBSD: stable/10/sys/vm/vm_pageout.c 283310 2015-05-23 09:14:29Z kib $");
76__FBSDID("$FreeBSD: stable/10/sys/vm/vm_pageout.c 284665 2015-06-21 06:28:26Z trasz $");
77
78#include "opt_vm.h"
79#include "opt_kdtrace.h"
80#include <sys/param.h>
81#include <sys/systm.h>
82#include <sys/kernel.h>
83#include <sys/eventhandler.h>
84#include <sys/lock.h>

--- 1704 unchanged lines hidden (view full) ---

1789 struct vmspace *vm;
1790 int breakout, swapout_flags, tryagain, attempts;
1791#ifdef RACCT
1792 uint64_t rsize, ravailable;
1793#endif
1794
1795 while (TRUE) {
1796 mtx_lock(&vm_daemon_mtx);
77
78#include "opt_vm.h"
79#include "opt_kdtrace.h"
80#include <sys/param.h>
81#include <sys/systm.h>
82#include <sys/kernel.h>
83#include <sys/eventhandler.h>
84#include <sys/lock.h>

--- 1704 unchanged lines hidden (view full) ---

1789 struct vmspace *vm;
1790 int breakout, swapout_flags, tryagain, attempts;
1791#ifdef RACCT
1792 uint64_t rsize, ravailable;
1793#endif
1794
1795 while (TRUE) {
1796 mtx_lock(&vm_daemon_mtx);
1797 msleep(&vm_daemon_needed, &vm_daemon_mtx, PPAUSE, "psleep",
1797#ifdef RACCT
1798#ifdef RACCT
1798 msleep(&vm_daemon_needed, &vm_daemon_mtx, PPAUSE, "psleep", hz);
1799 racct_enable ? hz : 0
1799#else
1800#else
1800 msleep(&vm_daemon_needed, &vm_daemon_mtx, PPAUSE, "psleep", 0);
1801 0
1801#endif
1802#endif
1803 );
1802 swapout_flags = vm_pageout_req_swapout;
1803 vm_pageout_req_swapout = 0;
1804 mtx_unlock(&vm_daemon_mtx);
1805 if (swapout_flags)
1806 swapout_procs(swapout_flags);
1807
1808 /*
1809 * scan the processes for exceeding their rlimits or if

--- 58 unchanged lines hidden (view full) ---

1868 continue;
1869
1870 size = vmspace_resident_count(vm);
1871 if (size >= limit) {
1872 vm_pageout_map_deactivate_pages(
1873 &vm->vm_map, limit);
1874 }
1875#ifdef RACCT
1804 swapout_flags = vm_pageout_req_swapout;
1805 vm_pageout_req_swapout = 0;
1806 mtx_unlock(&vm_daemon_mtx);
1807 if (swapout_flags)
1808 swapout_procs(swapout_flags);
1809
1810 /*
1811 * scan the processes for exceeding their rlimits or if

--- 58 unchanged lines hidden (view full) ---

1870 continue;
1871
1872 size = vmspace_resident_count(vm);
1873 if (size >= limit) {
1874 vm_pageout_map_deactivate_pages(
1875 &vm->vm_map, limit);
1876 }
1877#ifdef RACCT
1876 rsize = IDX_TO_OFF(size);
1877 PROC_LOCK(p);
1878 racct_set(p, RACCT_RSS, rsize);
1879 ravailable = racct_get_available(p, RACCT_RSS);
1880 PROC_UNLOCK(p);
1881 if (rsize > ravailable) {
1882 /*
1883 * Don't be overly aggressive; this might be
1884 * an innocent process, and the limit could've
1885 * been exceeded by some memory hog. Don't
1886 * try to deactivate more than 1/4th of process'
1887 * resident set size.
1888 */
1889 if (attempts <= 8) {
1890 if (ravailable < rsize - (rsize / 4))
1891 ravailable = rsize - (rsize / 4);
1892 }
1893 vm_pageout_map_deactivate_pages(
1894 &vm->vm_map, OFF_TO_IDX(ravailable));
1895 /* Update RSS usage after paging out. */
1896 size = vmspace_resident_count(vm);
1878 if (racct_enable) {
1897 rsize = IDX_TO_OFF(size);
1898 PROC_LOCK(p);
1899 racct_set(p, RACCT_RSS, rsize);
1879 rsize = IDX_TO_OFF(size);
1880 PROC_LOCK(p);
1881 racct_set(p, RACCT_RSS, rsize);
1882 ravailable = racct_get_available(p, RACCT_RSS);
1900 PROC_UNLOCK(p);
1883 PROC_UNLOCK(p);
1901 if (rsize > ravailable)
1902 tryagain = 1;
1884 if (rsize > ravailable) {
1885 /*
1886 * Don't be overly aggressive; this
1887 * might be an innocent process,
1888 * and the limit could've been exceeded
1889 * by some memory hog. Don't try
1890 * to deactivate more than 1/4th
1891 * of process' resident set size.
1892 */
1893 if (attempts <= 8) {
1894 if (ravailable < rsize -
1895 (rsize / 4)) {
1896 ravailable = rsize -
1897 (rsize / 4);
1898 }
1899 }
1900 vm_pageout_map_deactivate_pages(
1901 &vm->vm_map,
1902 OFF_TO_IDX(ravailable));
1903 /* Update RSS usage after paging out. */
1904 size = vmspace_resident_count(vm);
1905 rsize = IDX_TO_OFF(size);
1906 PROC_LOCK(p);
1907 racct_set(p, RACCT_RSS, rsize);
1908 PROC_UNLOCK(p);
1909 if (rsize > ravailable)
1910 tryagain = 1;
1911 }
1903 }
1904#endif
1905 vmspace_free(vm);
1906 }
1907 sx_sunlock(&allproc_lock);
1908 if (tryagain != 0 && attempts <= 10)
1909 goto again;
1910 }
1911}
1912#endif /* !defined(NO_SWAPPING) */
1912 }
1913#endif
1914 vmspace_free(vm);
1915 }
1916 sx_sunlock(&allproc_lock);
1917 if (tryagain != 0 && attempts <= 10)
1918 goto again;
1919 }
1920}
1921#endif /* !defined(NO_SWAPPING) */