]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/vm/vm_pageout.c
MFV: file 5.33
[FreeBSD/FreeBSD.git] / sys / vm / vm_pageout.c
1 /*-
2  * SPDX-License-Identifier: (BSD-4-Clause AND MIT-CMU)
3  *
4  * Copyright (c) 1991 Regents of the University of California.
5  * All rights reserved.
6  * Copyright (c) 1994 John S. Dyson
7  * All rights reserved.
8  * Copyright (c) 1994 David Greenman
9  * All rights reserved.
10  * Copyright (c) 2005 Yahoo! Technologies Norway AS
11  * All rights reserved.
12  *
13  * This code is derived from software contributed to Berkeley by
14  * The Mach Operating System project at Carnegie-Mellon University.
15  *
16  * Redistribution and use in source and binary forms, with or without
17  * modification, are permitted provided that the following conditions
18  * are met:
19  * 1. Redistributions of source code must retain the above copyright
20  *    notice, this list of conditions and the following disclaimer.
21  * 2. Redistributions in binary form must reproduce the above copyright
22  *    notice, this list of conditions and the following disclaimer in the
23  *    documentation and/or other materials provided with the distribution.
24  * 3. All advertising materials mentioning features or use of this software
25  *    must display the following acknowledgement:
26  *      This product includes software developed by the University of
27  *      California, Berkeley and its contributors.
28  * 4. Neither the name of the University nor the names of its contributors
29  *    may be used to endorse or promote products derived from this software
30  *    without specific prior written permission.
31  *
32  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
33  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
34  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
35  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
36  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
37  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
38  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
39  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
40  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
41  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
42  * SUCH DAMAGE.
43  *
44  *      from: @(#)vm_pageout.c  7.4 (Berkeley) 5/7/91
45  *
46  *
47  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
48  * All rights reserved.
49  *
50  * Authors: Avadis Tevanian, Jr., Michael Wayne Young
51  *
52  * Permission to use, copy, modify and distribute this software and
53  * its documentation is hereby granted, provided that both the copyright
54  * notice and this permission notice appear in all copies of the
55  * software, derivative works or modified versions, and any portions
56  * thereof, and that both notices appear in supporting documentation.
57  *
58  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
59  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
60  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
61  *
62  * Carnegie Mellon requests users of this software to return to
63  *
64  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
65  *  School of Computer Science
66  *  Carnegie Mellon University
67  *  Pittsburgh PA 15213-3890
68  *
69  * any improvements or extensions that they make and grant Carnegie the
70  * rights to redistribute these changes.
71  */
72
73 /*
74  *      The proverbial page-out daemon.
75  */
76
77 #include <sys/cdefs.h>
78 __FBSDID("$FreeBSD$");
79
80 #include "opt_vm.h"
81
82 #include <sys/param.h>
83 #include <sys/systm.h>
84 #include <sys/kernel.h>
85 #include <sys/eventhandler.h>
86 #include <sys/lock.h>
87 #include <sys/mutex.h>
88 #include <sys/proc.h>
89 #include <sys/kthread.h>
90 #include <sys/ktr.h>
91 #include <sys/mount.h>
92 #include <sys/racct.h>
93 #include <sys/resourcevar.h>
94 #include <sys/sched.h>
95 #include <sys/sdt.h>
96 #include <sys/signalvar.h>
97 #include <sys/smp.h>
98 #include <sys/time.h>
99 #include <sys/vnode.h>
100 #include <sys/vmmeter.h>
101 #include <sys/rwlock.h>
102 #include <sys/sx.h>
103 #include <sys/sysctl.h>
104
105 #include <vm/vm.h>
106 #include <vm/vm_param.h>
107 #include <vm/vm_object.h>
108 #include <vm/vm_page.h>
109 #include <vm/vm_map.h>
110 #include <vm/vm_pageout.h>
111 #include <vm/vm_pager.h>
112 #include <vm/vm_phys.h>
113 #include <vm/vm_pagequeue.h>
114 #include <vm/swap_pager.h>
115 #include <vm/vm_extern.h>
116 #include <vm/uma.h>
117
118 /*
119  * System initialization
120  */
121
122 /* the kernel process "vm_pageout"*/
123 static void vm_pageout(void);
124 static void vm_pageout_init(void);
125 static int vm_pageout_clean(vm_page_t m, int *numpagedout);
126 static int vm_pageout_cluster(vm_page_t m);
127 static bool vm_pageout_scan(struct vm_domain *vmd, int pass, int shortage);
128 static void vm_pageout_mightbe_oom(struct vm_domain *vmd, int page_shortage,
129     int starting_page_shortage);
130
131 SYSINIT(pagedaemon_init, SI_SUB_KTHREAD_PAGE, SI_ORDER_FIRST, vm_pageout_init,
132     NULL);
133
134 struct proc *pageproc;
135
136 static struct kproc_desc page_kp = {
137         "pagedaemon",
138         vm_pageout,
139         &pageproc
140 };
141 SYSINIT(pagedaemon, SI_SUB_KTHREAD_PAGE, SI_ORDER_SECOND, kproc_start,
142     &page_kp);
143
144 SDT_PROVIDER_DEFINE(vm);
145 SDT_PROBE_DEFINE(vm, , , vm__lowmem_scan);
146
147 /* Pagedaemon activity rates, in subdivisions of one second. */
148 #define VM_LAUNDER_RATE         10
149 #define VM_INACT_SCAN_RATE      10
150
151 static int vm_pageout_oom_seq = 12;
152
153 static int vm_pageout_update_period;
154 static int disable_swap_pageouts;
155 static int lowmem_period = 10;
156 static time_t lowmem_uptime;
157 static int swapdev_enabled;
158
159 static int vm_panic_on_oom = 0;
160
161 SYSCTL_INT(_vm, OID_AUTO, panic_on_oom,
162         CTLFLAG_RWTUN, &vm_panic_on_oom, 0,
163         "panic on out of memory instead of killing the largest process");
164
165 SYSCTL_INT(_vm, OID_AUTO, pageout_update_period,
166         CTLFLAG_RWTUN, &vm_pageout_update_period, 0,
167         "Maximum active LRU update period");
168   
169 SYSCTL_INT(_vm, OID_AUTO, lowmem_period, CTLFLAG_RWTUN, &lowmem_period, 0,
170         "Low memory callback period");
171
172 SYSCTL_INT(_vm, OID_AUTO, disable_swapspace_pageouts,
173         CTLFLAG_RWTUN, &disable_swap_pageouts, 0, "Disallow swapout of dirty pages");
174
175 static int pageout_lock_miss;
176 SYSCTL_INT(_vm, OID_AUTO, pageout_lock_miss,
177         CTLFLAG_RD, &pageout_lock_miss, 0, "vget() lock misses during pageout");
178
179 SYSCTL_INT(_vm, OID_AUTO, pageout_oom_seq,
180         CTLFLAG_RWTUN, &vm_pageout_oom_seq, 0,
181         "back-to-back calls to oom detector to start OOM");
182
183 static int act_scan_laundry_weight = 3;
184 SYSCTL_INT(_vm, OID_AUTO, act_scan_laundry_weight, CTLFLAG_RWTUN,
185     &act_scan_laundry_weight, 0,
186     "weight given to clean vs. dirty pages in active queue scans");
187
188 static u_int vm_background_launder_rate = 4096;
189 SYSCTL_UINT(_vm, OID_AUTO, background_launder_rate, CTLFLAG_RWTUN,
190     &vm_background_launder_rate, 0,
191     "background laundering rate, in kilobytes per second");
192
193 static u_int vm_background_launder_max = 20 * 1024;
194 SYSCTL_UINT(_vm, OID_AUTO, background_launder_max, CTLFLAG_RWTUN,
195     &vm_background_launder_max, 0, "background laundering cap, in kilobytes");
196
197 int vm_pageout_page_count = 32;
198
199 int vm_page_max_wired;          /* XXX max # of wired pages system-wide */
200 SYSCTL_INT(_vm, OID_AUTO, max_wired,
201         CTLFLAG_RW, &vm_page_max_wired, 0, "System-wide limit to wired page count");
202
203 static u_int isqrt(u_int num);
204 static int vm_pageout_launder(struct vm_domain *vmd, int launder,
205     bool in_shortfall);
206 static void vm_pageout_laundry_worker(void *arg);
207
208 struct scan_state {
209         struct vm_batchqueue bq;
210         struct vm_pagequeue *pq;
211         vm_page_t       marker;
212         int             maxscan;
213         int             scanned;
214 };
215
216 static void
217 vm_pageout_init_scan(struct scan_state *ss, struct vm_pagequeue *pq,
218     vm_page_t marker, vm_page_t after, int maxscan)
219 {
220
221         vm_pagequeue_assert_locked(pq);
222         KASSERT((marker->aflags & PGA_ENQUEUED) == 0,
223             ("marker %p already enqueued", marker));
224
225         if (after == NULL)
226                 TAILQ_INSERT_HEAD(&pq->pq_pl, marker, plinks.q);
227         else
228                 TAILQ_INSERT_AFTER(&pq->pq_pl, after, marker, plinks.q);
229         vm_page_aflag_set(marker, PGA_ENQUEUED);
230
231         vm_batchqueue_init(&ss->bq);
232         ss->pq = pq;
233         ss->marker = marker;
234         ss->maxscan = maxscan;
235         ss->scanned = 0;
236         vm_pagequeue_unlock(pq);
237 }
238
239 static void
240 vm_pageout_end_scan(struct scan_state *ss)
241 {
242         struct vm_pagequeue *pq;
243
244         pq = ss->pq;
245         vm_pagequeue_assert_locked(pq);
246         KASSERT((ss->marker->aflags & PGA_ENQUEUED) != 0,
247             ("marker %p not enqueued", ss->marker));
248
249         TAILQ_REMOVE(&pq->pq_pl, ss->marker, plinks.q);
250         vm_page_aflag_clear(ss->marker, PGA_ENQUEUED);
251         VM_CNT_ADD(v_pdpages, ss->scanned);
252 }
253
254 /*
255  * Add a small number of queued pages to a batch queue for later processing
256  * without the corresponding queue lock held.  The caller must have enqueued a
257  * marker page at the desired start point for the scan.  Pages will be
258  * physically dequeued if the caller so requests.  Otherwise, the returned
259  * batch may contain marker pages, and it is up to the caller to handle them.
260  *
261  * When processing the batch queue, vm_page_queue() must be used to
262  * determine whether the page has been logically dequeued by another thread.
263  * Once this check is performed, the page lock guarantees that the page will
264  * not be disassociated from the queue.
265  */
266 static __always_inline void
267 vm_pageout_collect_batch(struct scan_state *ss, const bool dequeue)
268 {
269         struct vm_pagequeue *pq;
270         vm_page_t m, marker;
271
272         marker = ss->marker;
273         pq = ss->pq;
274
275         KASSERT((marker->aflags & PGA_ENQUEUED) != 0,
276             ("marker %p not enqueued", ss->marker));
277
278         vm_pagequeue_lock(pq);
279         for (m = TAILQ_NEXT(marker, plinks.q); m != NULL &&
280             ss->scanned < ss->maxscan && ss->bq.bq_cnt < VM_BATCHQUEUE_SIZE;
281             m = TAILQ_NEXT(m, plinks.q), ss->scanned++) {
282                 if ((m->flags & PG_MARKER) == 0) {
283                         KASSERT((m->aflags & PGA_ENQUEUED) != 0,
284                             ("page %p not enqueued", m));
285                         KASSERT((m->flags & PG_FICTITIOUS) == 0,
286                             ("Fictitious page %p cannot be in page queue", m));
287                         KASSERT((m->oflags & VPO_UNMANAGED) == 0,
288                             ("Unmanaged page %p cannot be in page queue", m));
289                 } else if (dequeue)
290                         continue;
291
292                 (void)vm_batchqueue_insert(&ss->bq, m);
293                 if (dequeue) {
294                         TAILQ_REMOVE(&pq->pq_pl, m, plinks.q);
295                         vm_page_aflag_clear(m, PGA_ENQUEUED);
296                 }
297         }
298         TAILQ_REMOVE(&pq->pq_pl, marker, plinks.q);
299         if (__predict_true(m != NULL))
300                 TAILQ_INSERT_BEFORE(m, marker, plinks.q);
301         else
302                 TAILQ_INSERT_TAIL(&pq->pq_pl, marker, plinks.q);
303         if (dequeue)
304                 vm_pagequeue_cnt_add(pq, -ss->bq.bq_cnt);
305         vm_pagequeue_unlock(pq);
306 }
307
308 /* Return the next page to be scanned, or NULL if the scan is complete. */
309 static __always_inline vm_page_t
310 vm_pageout_next(struct scan_state *ss, const bool dequeue)
311 {
312
313         if (ss->bq.bq_cnt == 0)
314                 vm_pageout_collect_batch(ss, dequeue);
315         return (vm_batchqueue_pop(&ss->bq));
316 }
317
318 /*
319  * Scan for pages at adjacent offsets within the given page's object that are
320  * eligible for laundering, form a cluster of these pages and the given page,
321  * and launder that cluster.
322  */
323 static int
324 vm_pageout_cluster(vm_page_t m)
325 {
326         vm_object_t object;
327         vm_page_t mc[2 * vm_pageout_page_count], p, pb, ps;
328         vm_pindex_t pindex;
329         int ib, is, page_base, pageout_count;
330
331         vm_page_assert_locked(m);
332         object = m->object;
333         VM_OBJECT_ASSERT_WLOCKED(object);
334         pindex = m->pindex;
335
336         vm_page_assert_unbusied(m);
337         KASSERT(!vm_page_held(m), ("page %p is held", m));
338
339         pmap_remove_write(m);
340         vm_page_unlock(m);
341
342         mc[vm_pageout_page_count] = pb = ps = m;
343         pageout_count = 1;
344         page_base = vm_pageout_page_count;
345         ib = 1;
346         is = 1;
347
348         /*
349          * We can cluster only if the page is not clean, busy, or held, and
350          * the page is in the laundry queue.
351          *
352          * During heavy mmap/modification loads the pageout
353          * daemon can really fragment the underlying file
354          * due to flushing pages out of order and not trying to
355          * align the clusters (which leaves sporadic out-of-order
356          * holes).  To solve this problem we do the reverse scan
357          * first and attempt to align our cluster, then do a 
358          * forward scan if room remains.
359          */
360 more:
361         while (ib != 0 && pageout_count < vm_pageout_page_count) {
362                 if (ib > pindex) {
363                         ib = 0;
364                         break;
365                 }
366                 if ((p = vm_page_prev(pb)) == NULL || vm_page_busied(p)) {
367                         ib = 0;
368                         break;
369                 }
370                 vm_page_test_dirty(p);
371                 if (p->dirty == 0) {
372                         ib = 0;
373                         break;
374                 }
375                 vm_page_lock(p);
376                 if (vm_page_held(p) || !vm_page_in_laundry(p)) {
377                         vm_page_unlock(p);
378                         ib = 0;
379                         break;
380                 }
381                 pmap_remove_write(p);
382                 vm_page_unlock(p);
383                 mc[--page_base] = pb = p;
384                 ++pageout_count;
385                 ++ib;
386
387                 /*
388                  * We are at an alignment boundary.  Stop here, and switch
389                  * directions.  Do not clear ib.
390                  */
391                 if ((pindex - (ib - 1)) % vm_pageout_page_count == 0)
392                         break;
393         }
394         while (pageout_count < vm_pageout_page_count && 
395             pindex + is < object->size) {
396                 if ((p = vm_page_next(ps)) == NULL || vm_page_busied(p))
397                         break;
398                 vm_page_test_dirty(p);
399                 if (p->dirty == 0)
400                         break;
401                 vm_page_lock(p);
402                 if (vm_page_held(p) || !vm_page_in_laundry(p)) {
403                         vm_page_unlock(p);
404                         break;
405                 }
406                 pmap_remove_write(p);
407                 vm_page_unlock(p);
408                 mc[page_base + pageout_count] = ps = p;
409                 ++pageout_count;
410                 ++is;
411         }
412
413         /*
414          * If we exhausted our forward scan, continue with the reverse scan
415          * when possible, even past an alignment boundary.  This catches
416          * boundary conditions.
417          */
418         if (ib != 0 && pageout_count < vm_pageout_page_count)
419                 goto more;
420
421         return (vm_pageout_flush(&mc[page_base], pageout_count,
422             VM_PAGER_PUT_NOREUSE, 0, NULL, NULL));
423 }
424
425 /*
426  * vm_pageout_flush() - launder the given pages
427  *
428  *      The given pages are laundered.  Note that we setup for the start of
429  *      I/O ( i.e. busy the page ), mark it read-only, and bump the object
430  *      reference count all in here rather then in the parent.  If we want
431  *      the parent to do more sophisticated things we may have to change
432  *      the ordering.
433  *
434  *      Returned runlen is the count of pages between mreq and first
435  *      page after mreq with status VM_PAGER_AGAIN.
436  *      *eio is set to TRUE if pager returned VM_PAGER_ERROR or VM_PAGER_FAIL
437  *      for any page in runlen set.
438  */
439 int
440 vm_pageout_flush(vm_page_t *mc, int count, int flags, int mreq, int *prunlen,
441     boolean_t *eio)
442 {
443         vm_object_t object = mc[0]->object;
444         int pageout_status[count];
445         int numpagedout = 0;
446         int i, runlen;
447
448         VM_OBJECT_ASSERT_WLOCKED(object);
449
450         /*
451          * Initiate I/O.  Mark the pages busy and verify that they're valid
452          * and read-only.
453          *
454          * We do not have to fixup the clean/dirty bits here... we can
455          * allow the pager to do it after the I/O completes.
456          *
457          * NOTE! mc[i]->dirty may be partial or fragmented due to an
458          * edge case with file fragments.
459          */
460         for (i = 0; i < count; i++) {
461                 KASSERT(mc[i]->valid == VM_PAGE_BITS_ALL,
462                     ("vm_pageout_flush: partially invalid page %p index %d/%d",
463                         mc[i], i, count));
464                 KASSERT((mc[i]->aflags & PGA_WRITEABLE) == 0,
465                     ("vm_pageout_flush: writeable page %p", mc[i]));
466                 vm_page_sbusy(mc[i]);
467         }
468         vm_object_pip_add(object, count);
469
470         vm_pager_put_pages(object, mc, count, flags, pageout_status);
471
472         runlen = count - mreq;
473         if (eio != NULL)
474                 *eio = FALSE;
475         for (i = 0; i < count; i++) {
476                 vm_page_t mt = mc[i];
477
478                 KASSERT(pageout_status[i] == VM_PAGER_PEND ||
479                     !pmap_page_is_write_mapped(mt),
480                     ("vm_pageout_flush: page %p is not write protected", mt));
481                 switch (pageout_status[i]) {
482                 case VM_PAGER_OK:
483                         vm_page_lock(mt);
484                         if (vm_page_in_laundry(mt))
485                                 vm_page_deactivate_noreuse(mt);
486                         vm_page_unlock(mt);
487                         /* FALLTHROUGH */
488                 case VM_PAGER_PEND:
489                         numpagedout++;
490                         break;
491                 case VM_PAGER_BAD:
492                         /*
493                          * The page is outside the object's range.  We pretend
494                          * that the page out worked and clean the page, so the
495                          * changes will be lost if the page is reclaimed by
496                          * the page daemon.
497                          */
498                         vm_page_undirty(mt);
499                         vm_page_lock(mt);
500                         if (vm_page_in_laundry(mt))
501                                 vm_page_deactivate_noreuse(mt);
502                         vm_page_unlock(mt);
503                         break;
504                 case VM_PAGER_ERROR:
505                 case VM_PAGER_FAIL:
506                         /*
507                          * If the page couldn't be paged out to swap because the
508                          * pager wasn't able to find space, place the page in
509                          * the PQ_UNSWAPPABLE holding queue.  This is an
510                          * optimization that prevents the page daemon from
511                          * wasting CPU cycles on pages that cannot be reclaimed
512                          * becase no swap device is configured.
513                          *
514                          * Otherwise, reactivate the page so that it doesn't
515                          * clog the laundry and inactive queues.  (We will try
516                          * paging it out again later.)
517                          */
518                         vm_page_lock(mt);
519                         if (object->type == OBJT_SWAP &&
520                             pageout_status[i] == VM_PAGER_FAIL) {
521                                 vm_page_unswappable(mt);
522                                 numpagedout++;
523                         } else
524                                 vm_page_activate(mt);
525                         vm_page_unlock(mt);
526                         if (eio != NULL && i >= mreq && i - mreq < runlen)
527                                 *eio = TRUE;
528                         break;
529                 case VM_PAGER_AGAIN:
530                         if (i >= mreq && i - mreq < runlen)
531                                 runlen = i - mreq;
532                         break;
533                 }
534
535                 /*
536                  * If the operation is still going, leave the page busy to
537                  * block all other accesses. Also, leave the paging in
538                  * progress indicator set so that we don't attempt an object
539                  * collapse.
540                  */
541                 if (pageout_status[i] != VM_PAGER_PEND) {
542                         vm_object_pip_wakeup(object);
543                         vm_page_sunbusy(mt);
544                 }
545         }
546         if (prunlen != NULL)
547                 *prunlen = runlen;
548         return (numpagedout);
549 }
550
551 static void
552 vm_pageout_swapon(void *arg __unused, struct swdevt *sp __unused)
553 {
554
555         atomic_store_rel_int(&swapdev_enabled, 1);
556 }
557
558 static void
559 vm_pageout_swapoff(void *arg __unused, struct swdevt *sp __unused)
560 {
561
562         if (swap_pager_nswapdev() == 1)
563                 atomic_store_rel_int(&swapdev_enabled, 0);
564 }
565
566 /*
567  * Attempt to acquire all of the necessary locks to launder a page and
568  * then call through the clustering layer to PUTPAGES.  Wait a short
569  * time for a vnode lock.
570  *
571  * Requires the page and object lock on entry, releases both before return.
572  * Returns 0 on success and an errno otherwise.
573  */
574 static int
575 vm_pageout_clean(vm_page_t m, int *numpagedout)
576 {
577         struct vnode *vp;
578         struct mount *mp;
579         vm_object_t object;
580         vm_pindex_t pindex;
581         int error, lockmode;
582
583         vm_page_assert_locked(m);
584         object = m->object;
585         VM_OBJECT_ASSERT_WLOCKED(object);
586         error = 0;
587         vp = NULL;
588         mp = NULL;
589
590         /*
591          * The object is already known NOT to be dead.   It
592          * is possible for the vget() to block the whole
593          * pageout daemon, but the new low-memory handling
594          * code should prevent it.
595          *
596          * We can't wait forever for the vnode lock, we might
597          * deadlock due to a vn_read() getting stuck in
598          * vm_wait while holding this vnode.  We skip the 
599          * vnode if we can't get it in a reasonable amount
600          * of time.
601          */
602         if (object->type == OBJT_VNODE) {
603                 vm_page_unlock(m);
604                 vp = object->handle;
605                 if (vp->v_type == VREG &&
606                     vn_start_write(vp, &mp, V_NOWAIT) != 0) {
607                         mp = NULL;
608                         error = EDEADLK;
609                         goto unlock_all;
610                 }
611                 KASSERT(mp != NULL,
612                     ("vp %p with NULL v_mount", vp));
613                 vm_object_reference_locked(object);
614                 pindex = m->pindex;
615                 VM_OBJECT_WUNLOCK(object);
616                 lockmode = MNT_SHARED_WRITES(vp->v_mount) ?
617                     LK_SHARED : LK_EXCLUSIVE;
618                 if (vget(vp, lockmode | LK_TIMELOCK, curthread)) {
619                         vp = NULL;
620                         error = EDEADLK;
621                         goto unlock_mp;
622                 }
623                 VM_OBJECT_WLOCK(object);
624
625                 /*
626                  * Ensure that the object and vnode were not disassociated
627                  * while locks were dropped.
628                  */
629                 if (vp->v_object != object) {
630                         error = ENOENT;
631                         goto unlock_all;
632                 }
633                 vm_page_lock(m);
634
635                 /*
636                  * While the object and page were unlocked, the page
637                  * may have been:
638                  * (1) moved to a different queue,
639                  * (2) reallocated to a different object,
640                  * (3) reallocated to a different offset, or
641                  * (4) cleaned.
642                  */
643                 if (!vm_page_in_laundry(m) || m->object != object ||
644                     m->pindex != pindex || m->dirty == 0) {
645                         vm_page_unlock(m);
646                         error = ENXIO;
647                         goto unlock_all;
648                 }
649
650                 /*
651                  * The page may have been busied or referenced while the object
652                  * and page locks were released.
653                  */
654                 if (vm_page_busied(m) || vm_page_held(m)) {
655                         vm_page_unlock(m);
656                         error = EBUSY;
657                         goto unlock_all;
658                 }
659         }
660
661         /*
662          * If a page is dirty, then it is either being washed
663          * (but not yet cleaned) or it is still in the
664          * laundry.  If it is still in the laundry, then we
665          * start the cleaning operation. 
666          */
667         if ((*numpagedout = vm_pageout_cluster(m)) == 0)
668                 error = EIO;
669
670 unlock_all:
671         VM_OBJECT_WUNLOCK(object);
672
673 unlock_mp:
674         vm_page_lock_assert(m, MA_NOTOWNED);
675         if (mp != NULL) {
676                 if (vp != NULL)
677                         vput(vp);
678                 vm_object_deallocate(object);
679                 vn_finished_write(mp);
680         }
681
682         return (error);
683 }
684
685 /*
686  * Attempt to launder the specified number of pages.
687  *
688  * Returns the number of pages successfully laundered.
689  */
690 static int
691 vm_pageout_launder(struct vm_domain *vmd, int launder, bool in_shortfall)
692 {
693         struct scan_state ss;
694         struct vm_pagequeue *pq;
695         struct mtx *mtx;
696         vm_object_t object;
697         vm_page_t m, marker;
698         int act_delta, error, numpagedout, queue, starting_target;
699         int vnodes_skipped;
700         bool obj_locked, pageout_ok;
701
702         mtx = NULL;
703         obj_locked = false;
704         object = NULL;
705         starting_target = launder;
706         vnodes_skipped = 0;
707
708         /*
709          * Scan the laundry queues for pages eligible to be laundered.  We stop
710          * once the target number of dirty pages have been laundered, or once
711          * we've reached the end of the queue.  A single iteration of this loop
712          * may cause more than one page to be laundered because of clustering.
713          *
714          * As an optimization, we avoid laundering from PQ_UNSWAPPABLE when no
715          * swap devices are configured.
716          */
717         if (atomic_load_acq_int(&swapdev_enabled))
718                 queue = PQ_UNSWAPPABLE;
719         else
720                 queue = PQ_LAUNDRY;
721
722 scan:
723         marker = &vmd->vmd_markers[queue];
724         pq = &vmd->vmd_pagequeues[queue];
725         vm_pagequeue_lock(pq);
726         vm_pageout_init_scan(&ss, pq, marker, NULL, pq->pq_cnt);
727         while (launder > 0 && (m = vm_pageout_next(&ss, false)) != NULL) {
728                 if (__predict_false((m->flags & PG_MARKER) != 0))
729                         continue;
730
731                 vm_page_change_lock(m, &mtx);
732
733 recheck:
734                 /*
735                  * The page may have been disassociated from the queue
736                  * while locks were dropped.
737                  */
738                 if (vm_page_queue(m) != queue)
739                         continue;
740
741                 /*
742                  * A requeue was requested, so this page gets a second
743                  * chance.
744                  */
745                 if ((m->aflags & PGA_REQUEUE) != 0) {
746                         vm_page_requeue(m);
747                         continue;
748                 }
749
750                 /*
751                  * Held pages are essentially stuck in the queue.
752                  *
753                  * Wired pages may not be freed.  Complete their removal
754                  * from the queue now to avoid needless revisits during
755                  * future scans.
756                  */
757                 if (m->hold_count != 0)
758                         continue;
759                 if (m->wire_count != 0) {
760                         vm_page_dequeue_deferred(m);
761                         continue;
762                 }
763
764                 if (object != m->object) {
765                         if (obj_locked) {
766                                 VM_OBJECT_WUNLOCK(object);
767                                 obj_locked = false;
768                         }
769                         object = m->object;
770                 }
771                 if (!obj_locked) {
772                         if (!VM_OBJECT_TRYWLOCK(object)) {
773                                 mtx_unlock(mtx);
774                                 /* Depends on type-stability. */
775                                 VM_OBJECT_WLOCK(object);
776                                 obj_locked = true;
777                                 mtx_lock(mtx);
778                                 goto recheck;
779                         } else
780                                 obj_locked = true;
781                 }
782
783                 if (vm_page_busied(m))
784                         continue;
785
786                 /*
787                  * Invalid pages can be easily freed.  They cannot be
788                  * mapped; vm_page_free() asserts this.
789                  */
790                 if (m->valid == 0)
791                         goto free_page;
792
793                 /*
794                  * If the page has been referenced and the object is not dead,
795                  * reactivate or requeue the page depending on whether the
796                  * object is mapped.
797                  */
798                 if ((m->aflags & PGA_REFERENCED) != 0) {
799                         vm_page_aflag_clear(m, PGA_REFERENCED);
800                         act_delta = 1;
801                 } else
802                         act_delta = 0;
803                 if (object->ref_count != 0)
804                         act_delta += pmap_ts_referenced(m);
805                 else {
806                         KASSERT(!pmap_page_is_mapped(m),
807                             ("page %p is mapped", m));
808                 }
809                 if (act_delta != 0) {
810                         if (object->ref_count != 0) {
811                                 VM_CNT_INC(v_reactivated);
812                                 vm_page_activate(m);
813
814                                 /*
815                                  * Increase the activation count if the page
816                                  * was referenced while in the laundry queue.
817                                  * This makes it less likely that the page will
818                                  * be returned prematurely to the inactive
819                                  * queue.
820                                  */
821                                 m->act_count += act_delta + ACT_ADVANCE;
822
823                                 /*
824                                  * If this was a background laundering, count
825                                  * activated pages towards our target.  The
826                                  * purpose of background laundering is to ensure
827                                  * that pages are eventually cycled through the
828                                  * laundry queue, and an activation is a valid
829                                  * way out.
830                                  */
831                                 if (!in_shortfall)
832                                         launder--;
833                                 continue;
834                         } else if ((object->flags & OBJ_DEAD) == 0) {
835                                 vm_page_requeue(m);
836                                 continue;
837                         }
838                 }
839
840                 /*
841                  * If the page appears to be clean at the machine-independent
842                  * layer, then remove all of its mappings from the pmap in
843                  * anticipation of freeing it.  If, however, any of the page's
844                  * mappings allow write access, then the page may still be
845                  * modified until the last of those mappings are removed.
846                  */
847                 if (object->ref_count != 0) {
848                         vm_page_test_dirty(m);
849                         if (m->dirty == 0)
850                                 pmap_remove_all(m);
851                 }
852
853                 /*
854                  * Clean pages are freed, and dirty pages are paged out unless
855                  * they belong to a dead object.  Requeueing dirty pages from
856                  * dead objects is pointless, as they are being paged out and
857                  * freed by the thread that destroyed the object.
858                  */
859                 if (m->dirty == 0) {
860 free_page:
861                         vm_page_free(m);
862                         VM_CNT_INC(v_dfree);
863                 } else if ((object->flags & OBJ_DEAD) == 0) {
864                         if (object->type != OBJT_SWAP &&
865                             object->type != OBJT_DEFAULT)
866                                 pageout_ok = true;
867                         else if (disable_swap_pageouts)
868                                 pageout_ok = false;
869                         else
870                                 pageout_ok = true;
871                         if (!pageout_ok) {
872                                 vm_page_requeue(m);
873                                 continue;
874                         }
875
876                         /*
877                          * Form a cluster with adjacent, dirty pages from the
878                          * same object, and page out that entire cluster.
879                          *
880                          * The adjacent, dirty pages must also be in the
881                          * laundry.  However, their mappings are not checked
882                          * for new references.  Consequently, a recently
883                          * referenced page may be paged out.  However, that
884                          * page will not be prematurely reclaimed.  After page
885                          * out, the page will be placed in the inactive queue,
886                          * where any new references will be detected and the
887                          * page reactivated.
888                          */
889                         error = vm_pageout_clean(m, &numpagedout);
890                         if (error == 0) {
891                                 launder -= numpagedout;
892                                 ss.scanned += numpagedout;
893                         } else if (error == EDEADLK) {
894                                 pageout_lock_miss++;
895                                 vnodes_skipped++;
896                         }
897                         mtx = NULL;
898                         obj_locked = false;
899                 }
900         }
901         if (mtx != NULL) {
902                 mtx_unlock(mtx);
903                 mtx = NULL;
904         }
905         if (obj_locked) {
906                 VM_OBJECT_WUNLOCK(object);
907                 obj_locked = false;
908         }
909         vm_pagequeue_lock(pq);
910         vm_pageout_end_scan(&ss);
911         vm_pagequeue_unlock(pq);
912
913         if (launder > 0 && queue == PQ_UNSWAPPABLE) {
914                 queue = PQ_LAUNDRY;
915                 goto scan;
916         }
917
918         /*
919          * Wakeup the sync daemon if we skipped a vnode in a writeable object
920          * and we didn't launder enough pages.
921          */
922         if (vnodes_skipped > 0 && launder > 0)
923                 (void)speedup_syncer();
924
925         return (starting_target - launder);
926 }
927
928 /*
929  * Compute the integer square root.
930  */
931 static u_int
932 isqrt(u_int num)
933 {
934         u_int bit, root, tmp;
935
936         bit = 1u << ((NBBY * sizeof(u_int)) - 2);
937         while (bit > num)
938                 bit >>= 2;
939         root = 0;
940         while (bit != 0) {
941                 tmp = root + bit;
942                 root >>= 1;
943                 if (num >= tmp) {
944                         num -= tmp;
945                         root += bit;
946                 }
947                 bit >>= 2;
948         }
949         return (root);
950 }
951
952 /*
953  * Perform the work of the laundry thread: periodically wake up and determine
954  * whether any pages need to be laundered.  If so, determine the number of pages
955  * that need to be laundered, and launder them.
956  */
957 static void
958 vm_pageout_laundry_worker(void *arg)
959 {
960         struct vm_domain *vmd;
961         struct vm_pagequeue *pq;
962         uint64_t nclean, ndirty, nfreed;
963         int domain, last_target, launder, shortfall, shortfall_cycle, target;
964         bool in_shortfall;
965
966         domain = (uintptr_t)arg;
967         vmd = VM_DOMAIN(domain);
968         pq = &vmd->vmd_pagequeues[PQ_LAUNDRY];
969         KASSERT(vmd->vmd_segs != 0, ("domain without segments"));
970
971         shortfall = 0;
972         in_shortfall = false;
973         shortfall_cycle = 0;
974         target = 0;
975         nfreed = 0;
976
977         /*
978          * Calls to these handlers are serialized by the swap syscall lock.
979          */
980         (void)EVENTHANDLER_REGISTER(swapon, vm_pageout_swapon, vmd,
981             EVENTHANDLER_PRI_ANY);
982         (void)EVENTHANDLER_REGISTER(swapoff, vm_pageout_swapoff, vmd,
983             EVENTHANDLER_PRI_ANY);
984
985         /*
986          * The pageout laundry worker is never done, so loop forever.
987          */
988         for (;;) {
989                 KASSERT(target >= 0, ("negative target %d", target));
990                 KASSERT(shortfall_cycle >= 0,
991                     ("negative cycle %d", shortfall_cycle));
992                 launder = 0;
993
994                 /*
995                  * First determine whether we need to launder pages to meet a
996                  * shortage of free pages.
997                  */
998                 if (shortfall > 0) {
999                         in_shortfall = true;
1000                         shortfall_cycle = VM_LAUNDER_RATE / VM_INACT_SCAN_RATE;
1001                         target = shortfall;
1002                 } else if (!in_shortfall)
1003                         goto trybackground;
1004                 else if (shortfall_cycle == 0 || vm_laundry_target(vmd) <= 0) {
1005                         /*
1006                          * We recently entered shortfall and began laundering
1007                          * pages.  If we have completed that laundering run
1008                          * (and we are no longer in shortfall) or we have met
1009                          * our laundry target through other activity, then we
1010                          * can stop laundering pages.
1011                          */
1012                         in_shortfall = false;
1013                         target = 0;
1014                         goto trybackground;
1015                 }
1016                 launder = target / shortfall_cycle--;
1017                 goto dolaundry;
1018
1019                 /*
1020                  * There's no immediate need to launder any pages; see if we
1021                  * meet the conditions to perform background laundering:
1022                  *
1023                  * 1. The ratio of dirty to clean inactive pages exceeds the
1024                  *    background laundering threshold, or
1025                  * 2. we haven't yet reached the target of the current
1026                  *    background laundering run.
1027                  *
1028                  * The background laundering threshold is not a constant.
1029                  * Instead, it is a slowly growing function of the number of
1030                  * clean pages freed by the page daemon since the last
1031                  * background laundering.  Thus, as the ratio of dirty to
1032                  * clean inactive pages grows, the amount of memory pressure
1033                  * required to trigger laundering decreases.  We ensure
1034                  * that the threshold is non-zero after an inactive queue
1035                  * scan, even if that scan failed to free a single clean page.
1036                  */
1037 trybackground:
1038                 nclean = vmd->vmd_free_count +
1039                     vmd->vmd_pagequeues[PQ_INACTIVE].pq_cnt;
1040                 ndirty = vmd->vmd_pagequeues[PQ_LAUNDRY].pq_cnt;
1041                 if (target == 0 && ndirty * isqrt(howmany(nfreed + 1,
1042                     vmd->vmd_free_target - vmd->vmd_free_min)) >= nclean) {
1043                         target = vmd->vmd_background_launder_target;
1044                 }
1045
1046                 /*
1047                  * We have a non-zero background laundering target.  If we've
1048                  * laundered up to our maximum without observing a page daemon
1049                  * request, just stop.  This is a safety belt that ensures we
1050                  * don't launder an excessive amount if memory pressure is low
1051                  * and the ratio of dirty to clean pages is large.  Otherwise,
1052                  * proceed at the background laundering rate.
1053                  */
1054                 if (target > 0) {
1055                         if (nfreed > 0) {
1056                                 nfreed = 0;
1057                                 last_target = target;
1058                         } else if (last_target - target >=
1059                             vm_background_launder_max * PAGE_SIZE / 1024) {
1060                                 target = 0;
1061                         }
1062                         launder = vm_background_launder_rate * PAGE_SIZE / 1024;
1063                         launder /= VM_LAUNDER_RATE;
1064                         if (launder > target)
1065                                 launder = target;
1066                 }
1067
1068 dolaundry:
1069                 if (launder > 0) {
1070                         /*
1071                          * Because of I/O clustering, the number of laundered
1072                          * pages could exceed "target" by the maximum size of
1073                          * a cluster minus one. 
1074                          */
1075                         target -= min(vm_pageout_launder(vmd, launder,
1076                             in_shortfall), target);
1077                         pause("laundp", hz / VM_LAUNDER_RATE);
1078                 }
1079
1080                 /*
1081                  * If we're not currently laundering pages and the page daemon
1082                  * hasn't posted a new request, sleep until the page daemon
1083                  * kicks us.
1084                  */
1085                 vm_pagequeue_lock(pq);
1086                 if (target == 0 && vmd->vmd_laundry_request == VM_LAUNDRY_IDLE)
1087                         (void)mtx_sleep(&vmd->vmd_laundry_request,
1088                             vm_pagequeue_lockptr(pq), PVM, "launds", 0);
1089
1090                 /*
1091                  * If the pagedaemon has indicated that it's in shortfall, start
1092                  * a shortfall laundering unless we're already in the middle of
1093                  * one.  This may preempt a background laundering.
1094                  */
1095                 if (vmd->vmd_laundry_request == VM_LAUNDRY_SHORTFALL &&
1096                     (!in_shortfall || shortfall_cycle == 0)) {
1097                         shortfall = vm_laundry_target(vmd) +
1098                             vmd->vmd_pageout_deficit;
1099                         target = 0;
1100                 } else
1101                         shortfall = 0;
1102
1103                 if (target == 0)
1104                         vmd->vmd_laundry_request = VM_LAUNDRY_IDLE;
1105                 nfreed += vmd->vmd_clean_pages_freed;
1106                 vmd->vmd_clean_pages_freed = 0;
1107                 vm_pagequeue_unlock(pq);
1108         }
1109 }
1110
1111 static int
1112 vm_pageout_reinsert_inactive_page(struct scan_state *ss, vm_page_t m)
1113 {
1114         struct vm_domain *vmd;
1115
1116         if (m->queue != PQ_INACTIVE || (m->aflags & PGA_ENQUEUED) != 0)
1117                 return (0);
1118         vm_page_aflag_set(m, PGA_ENQUEUED);
1119         if ((m->aflags & PGA_REQUEUE_HEAD) != 0) {
1120                 vmd = vm_pagequeue_domain(m);
1121                 TAILQ_INSERT_BEFORE(&vmd->vmd_inacthead, m, plinks.q);
1122                 vm_page_aflag_clear(m, PGA_REQUEUE | PGA_REQUEUE_HEAD);
1123         } else if ((m->aflags & PGA_REQUEUE) != 0) {
1124                 TAILQ_INSERT_TAIL(&ss->pq->pq_pl, m, plinks.q);
1125                 vm_page_aflag_clear(m, PGA_REQUEUE | PGA_REQUEUE_HEAD);
1126         } else
1127                 TAILQ_INSERT_BEFORE(ss->marker, m, plinks.q);
1128         return (1);
1129 }
1130
1131 /*
1132  * Re-add stuck pages to the inactive queue.  We will examine them again
1133  * during the next scan.  If the queue state of a page has changed since
1134  * it was physically removed from the page queue in
1135  * vm_pageout_collect_batch(), don't do anything with that page.
1136  */
1137 static void
1138 vm_pageout_reinsert_inactive(struct scan_state *ss, struct vm_batchqueue *bq,
1139     vm_page_t m)
1140 {
1141         struct vm_pagequeue *pq;
1142         int delta;
1143
1144         delta = 0;
1145         pq = ss->pq;
1146
1147         if (m != NULL) {
1148                 if (vm_batchqueue_insert(bq, m))
1149                         return;
1150                 vm_pagequeue_lock(pq);
1151                 delta += vm_pageout_reinsert_inactive_page(ss, m);
1152         } else
1153                 vm_pagequeue_lock(pq);
1154         while ((m = vm_batchqueue_pop(bq)) != NULL)
1155                 delta += vm_pageout_reinsert_inactive_page(ss, m);
1156         vm_pagequeue_cnt_add(pq, delta);
1157         vm_pagequeue_unlock(pq);
1158         vm_batchqueue_init(bq);
1159 }
1160
1161 /*
1162  *      vm_pageout_scan does the dirty work for the pageout daemon.
1163  *
1164  *      pass == 0: Update active LRU/deactivate pages
1165  *      pass >= 1: Free inactive pages
1166  *
1167  * Returns true if pass was zero or enough pages were freed by the inactive
1168  * queue scan to meet the target.
1169  */
1170 static bool
1171 vm_pageout_scan(struct vm_domain *vmd, int pass, int shortage)
1172 {
1173         struct scan_state ss;
1174         struct vm_batchqueue rq;
1175         struct mtx *mtx;
1176         vm_page_t m, marker;
1177         struct vm_pagequeue *pq;
1178         vm_object_t object;
1179         long min_scan;
1180         int act_delta, addl_page_shortage, deficit, inactq_shortage, max_scan;
1181         int page_shortage, scan_tick, starting_page_shortage;
1182         bool obj_locked;
1183
1184         /*
1185          * If we need to reclaim memory ask kernel caches to return
1186          * some.  We rate limit to avoid thrashing.
1187          */
1188         if (vmd == VM_DOMAIN(0) && pass > 0 &&
1189             (time_uptime - lowmem_uptime) >= lowmem_period) {
1190                 /*
1191                  * Decrease registered cache sizes.
1192                  */
1193                 SDT_PROBE0(vm, , , vm__lowmem_scan);
1194                 EVENTHANDLER_INVOKE(vm_lowmem, VM_LOW_PAGES);
1195                 /*
1196                  * We do this explicitly after the caches have been
1197                  * drained above.
1198                  */
1199                 uma_reclaim();
1200                 lowmem_uptime = time_uptime;
1201         }
1202
1203         /*
1204          * The addl_page_shortage is an estimate of the number of temporarily
1205          * stuck pages in the inactive queue.  In other words, the
1206          * number of pages from the inactive count that should be
1207          * discounted in setting the target for the active queue scan.
1208          */
1209         addl_page_shortage = 0;
1210
1211         /*
1212          * Calculate the number of pages that we want to free.  This number
1213          * can be negative if many pages are freed between the wakeup call to
1214          * the page daemon and this calculation.
1215          */
1216         if (pass > 0) {
1217                 deficit = atomic_readandclear_int(&vmd->vmd_pageout_deficit);
1218                 page_shortage = shortage + deficit;
1219         } else
1220                 page_shortage = deficit = 0;
1221         starting_page_shortage = page_shortage;
1222
1223         mtx = NULL;
1224         obj_locked = false;
1225         object = NULL;
1226         vm_batchqueue_init(&rq);
1227
1228         /*
1229          * Start scanning the inactive queue for pages that we can free.  The
1230          * scan will stop when we reach the target or we have scanned the
1231          * entire queue.  (Note that m->act_count is not used to make
1232          * decisions for the inactive queue, only for the active queue.)
1233          */
1234         marker = &vmd->vmd_markers[PQ_INACTIVE];
1235         pq = &vmd->vmd_pagequeues[PQ_INACTIVE];
1236         vm_pagequeue_lock(pq);
1237         vm_pageout_init_scan(&ss, pq, marker, NULL, pq->pq_cnt);
1238         while (page_shortage > 0 && (m = vm_pageout_next(&ss, true)) != NULL) {
1239                 KASSERT((m->flags & PG_MARKER) == 0,
1240                     ("marker page %p was dequeued", m));
1241
1242                 vm_page_change_lock(m, &mtx);
1243
1244 recheck:
1245                 /*
1246                  * The page may have been disassociated from the queue
1247                  * while locks were dropped.
1248                  */
1249                 if (vm_page_queue(m) != PQ_INACTIVE) {
1250                         addl_page_shortage++;
1251                         continue;
1252                 }
1253
1254                 /*
1255                  * The page was re-enqueued after the page queue lock was
1256                  * dropped, or a requeue was requested.  This page gets a second
1257                  * chance.
1258                  */
1259                 if ((m->aflags & (PGA_ENQUEUED | PGA_REQUEUE |
1260                     PGA_REQUEUE_HEAD)) != 0)
1261                         goto reinsert;
1262
1263                 /*
1264                  * Held pages are essentially stuck in the queue.  So,
1265                  * they ought to be discounted from the inactive count.
1266                  * See the calculation of inactq_shortage before the
1267                  * loop over the active queue below.
1268                  *
1269                  * Wired pages may not be freed.  Complete their removal
1270                  * from the queue now to avoid needless revisits during
1271                  * future scans.
1272                  */
1273                 if (m->hold_count != 0) {
1274                         addl_page_shortage++;
1275                         goto reinsert;
1276                 }
1277                 if (m->wire_count != 0) {
1278                         vm_page_dequeue_deferred(m);
1279                         continue;
1280                 }
1281
1282                 if (object != m->object) {
1283                         if (obj_locked) {
1284                                 VM_OBJECT_WUNLOCK(object);
1285                                 obj_locked = false;
1286                         }
1287                         object = m->object;
1288                 }
1289                 if (!obj_locked) {
1290                         if (!VM_OBJECT_TRYWLOCK(object)) {
1291                                 mtx_unlock(mtx);
1292                                 /* Depends on type-stability. */
1293                                 VM_OBJECT_WLOCK(object);
1294                                 obj_locked = true;
1295                                 mtx_lock(mtx);
1296                                 goto recheck;
1297                         } else
1298                                 obj_locked = true;
1299                 }
1300
1301                 if (vm_page_busied(m)) {
1302                         /*
1303                          * Don't mess with busy pages.  Leave them at
1304                          * the front of the queue.  Most likely, they
1305                          * are being paged out and will leave the
1306                          * queue shortly after the scan finishes.  So,
1307                          * they ought to be discounted from the
1308                          * inactive count.
1309                          */
1310                         addl_page_shortage++;
1311                         goto reinsert;
1312                 }
1313
1314                 /*
1315                  * Invalid pages can be easily freed. They cannot be
1316                  * mapped, vm_page_free() asserts this.
1317                  */
1318                 if (m->valid == 0)
1319                         goto free_page;
1320
1321                 /*
1322                  * If the page has been referenced and the object is not dead,
1323                  * reactivate or requeue the page depending on whether the
1324                  * object is mapped.
1325                  */
1326                 if ((m->aflags & PGA_REFERENCED) != 0) {
1327                         vm_page_aflag_clear(m, PGA_REFERENCED);
1328                         act_delta = 1;
1329                 } else
1330                         act_delta = 0;
1331                 if (object->ref_count != 0) {
1332                         act_delta += pmap_ts_referenced(m);
1333                 } else {
1334                         KASSERT(!pmap_page_is_mapped(m),
1335                             ("vm_pageout_scan: page %p is mapped", m));
1336                 }
1337                 if (act_delta != 0) {
1338                         if (object->ref_count != 0) {
1339                                 VM_CNT_INC(v_reactivated);
1340                                 vm_page_activate(m);
1341
1342                                 /*
1343                                  * Increase the activation count if the page
1344                                  * was referenced while in the inactive queue.
1345                                  * This makes it less likely that the page will
1346                                  * be returned prematurely to the inactive
1347                                  * queue.
1348                                  */
1349                                 m->act_count += act_delta + ACT_ADVANCE;
1350                                 continue;
1351                         } else if ((object->flags & OBJ_DEAD) == 0) {
1352                                 vm_page_aflag_set(m, PGA_REQUEUE);
1353                                 goto reinsert;
1354                         }
1355                 }
1356
1357                 /*
1358                  * If the page appears to be clean at the machine-independent
1359                  * layer, then remove all of its mappings from the pmap in
1360                  * anticipation of freeing it.  If, however, any of the page's
1361                  * mappings allow write access, then the page may still be
1362                  * modified until the last of those mappings are removed.
1363                  */
1364                 if (object->ref_count != 0) {
1365                         vm_page_test_dirty(m);
1366                         if (m->dirty == 0)
1367                                 pmap_remove_all(m);
1368                 }
1369
1370                 /*
1371                  * Clean pages can be freed, but dirty pages must be sent back
1372                  * to the laundry, unless they belong to a dead object.
1373                  * Requeueing dirty pages from dead objects is pointless, as
1374                  * they are being paged out and freed by the thread that
1375                  * destroyed the object.
1376                  */
1377                 if (m->dirty == 0) {
1378 free_page:
1379                         /*
1380                          * Because we dequeued the page and have already
1381                          * checked for concurrent dequeue and enqueue
1382                          * requests, we can safely disassociate the page
1383                          * from the inactive queue.
1384                          */
1385                         KASSERT((m->aflags & PGA_QUEUE_STATE_MASK) == 0,
1386                             ("page %p has queue state", m));
1387                         m->queue = PQ_NONE;
1388                         vm_page_free(m);
1389                         page_shortage--;
1390                 } else if ((object->flags & OBJ_DEAD) == 0)
1391                         vm_page_launder(m);
1392                 continue;
1393 reinsert:
1394                 vm_pageout_reinsert_inactive(&ss, &rq, m);
1395         }
1396         if (mtx != NULL) {
1397                 mtx_unlock(mtx);
1398                 mtx = NULL;
1399         }
1400         if (obj_locked) {
1401                 VM_OBJECT_WUNLOCK(object);
1402                 obj_locked = false;
1403         }
1404         vm_pageout_reinsert_inactive(&ss, &rq, NULL);
1405         vm_pageout_reinsert_inactive(&ss, &ss.bq, NULL);
1406         vm_pagequeue_lock(pq);
1407         vm_pageout_end_scan(&ss);
1408         vm_pagequeue_unlock(pq);
1409
1410         VM_CNT_ADD(v_dfree, starting_page_shortage - page_shortage);
1411
1412         /*
1413          * Wake up the laundry thread so that it can perform any needed
1414          * laundering.  If we didn't meet our target, we're in shortfall and
1415          * need to launder more aggressively.  If PQ_LAUNDRY is empty and no
1416          * swap devices are configured, the laundry thread has no work to do, so
1417          * don't bother waking it up.
1418          *
1419          * The laundry thread uses the number of inactive queue scans elapsed
1420          * since the last laundering to determine whether to launder again, so
1421          * keep count.
1422          */
1423         if (starting_page_shortage > 0) {
1424                 pq = &vmd->vmd_pagequeues[PQ_LAUNDRY];
1425                 vm_pagequeue_lock(pq);
1426                 if (vmd->vmd_laundry_request == VM_LAUNDRY_IDLE &&
1427                     (pq->pq_cnt > 0 || atomic_load_acq_int(&swapdev_enabled))) {
1428                         if (page_shortage > 0) {
1429                                 vmd->vmd_laundry_request = VM_LAUNDRY_SHORTFALL;
1430                                 VM_CNT_INC(v_pdshortfalls);
1431                         } else if (vmd->vmd_laundry_request !=
1432                             VM_LAUNDRY_SHORTFALL)
1433                                 vmd->vmd_laundry_request =
1434                                     VM_LAUNDRY_BACKGROUND;
1435                         wakeup(&vmd->vmd_laundry_request);
1436                 }
1437                 vmd->vmd_clean_pages_freed +=
1438                     starting_page_shortage - page_shortage;
1439                 vm_pagequeue_unlock(pq);
1440         }
1441
1442         /*
1443          * Wakeup the swapout daemon if we didn't free the targeted number of
1444          * pages.
1445          */
1446         if (page_shortage > 0)
1447                 vm_swapout_run();
1448
1449         /*
1450          * If the inactive queue scan fails repeatedly to meet its
1451          * target, kill the largest process.
1452          */
1453         vm_pageout_mightbe_oom(vmd, page_shortage, starting_page_shortage);
1454
1455         /*
1456          * Compute the number of pages we want to try to move from the
1457          * active queue to either the inactive or laundry queue.
1458          *
1459          * When scanning active pages, we make clean pages count more heavily
1460          * towards the page shortage than dirty pages.  This is because dirty
1461          * pages must be laundered before they can be reused and thus have less
1462          * utility when attempting to quickly alleviate a shortage.  However,
1463          * this weighting also causes the scan to deactivate dirty pages more
1464          * more aggressively, improving the effectiveness of clustering and
1465          * ensuring that they can eventually be reused.
1466          */
1467         inactq_shortage = vmd->vmd_inactive_target - (pq->pq_cnt +
1468             vmd->vmd_pagequeues[PQ_LAUNDRY].pq_cnt / act_scan_laundry_weight) +
1469             vm_paging_target(vmd) + deficit + addl_page_shortage;
1470         inactq_shortage *= act_scan_laundry_weight;
1471
1472         marker = &vmd->vmd_markers[PQ_ACTIVE];
1473         pq = &vmd->vmd_pagequeues[PQ_ACTIVE];
1474         vm_pagequeue_lock(pq);
1475
1476         /*
1477          * If we're just idle polling attempt to visit every
1478          * active page within 'update_period' seconds.
1479          */
1480         scan_tick = ticks;
1481         if (vm_pageout_update_period != 0) {
1482                 min_scan = pq->pq_cnt;
1483                 min_scan *= scan_tick - vmd->vmd_last_active_scan;
1484                 min_scan /= hz * vm_pageout_update_period;
1485         } else
1486                 min_scan = 0;
1487         if (min_scan > 0 || (inactq_shortage > 0 && pq->pq_cnt > 0))
1488                 vmd->vmd_last_active_scan = scan_tick;
1489
1490         /*
1491          * Scan the active queue for pages that can be deactivated.  Update
1492          * the per-page activity counter and use it to identify deactivation
1493          * candidates.  Held pages may be deactivated.
1494          *
1495          * To avoid requeuing each page that remains in the active queue, we
1496          * implement the CLOCK algorithm.  To maintain consistency in the
1497          * generic page queue code, pages are inserted at the tail of the
1498          * active queue.  We thus use two hands, represented by marker pages:
1499          * scans begin at the first hand, which precedes the second hand in
1500          * the queue.  When the two hands meet, they are moved back to the
1501          * head and tail of the queue, respectively, and scanning resumes.
1502          */
1503         max_scan = inactq_shortage > 0 ? pq->pq_cnt : min_scan;
1504 act_scan:
1505         vm_pageout_init_scan(&ss, pq, marker, &vmd->vmd_clock[0], max_scan);
1506         while ((m = vm_pageout_next(&ss, false)) != NULL) {
1507                 if (__predict_false(m == &vmd->vmd_clock[1])) {
1508                         vm_pagequeue_lock(pq);
1509                         TAILQ_REMOVE(&pq->pq_pl, &vmd->vmd_clock[0], plinks.q);
1510                         TAILQ_REMOVE(&pq->pq_pl, &vmd->vmd_clock[1], plinks.q);
1511                         TAILQ_INSERT_HEAD(&pq->pq_pl, &vmd->vmd_clock[0],
1512                             plinks.q);
1513                         TAILQ_INSERT_TAIL(&pq->pq_pl, &vmd->vmd_clock[1],
1514                             plinks.q);
1515                         max_scan -= ss.scanned;
1516                         vm_pageout_end_scan(&ss);
1517                         goto act_scan;
1518                 }
1519                 if (__predict_false((m->flags & PG_MARKER) != 0))
1520                         continue;
1521
1522                 vm_page_change_lock(m, &mtx);
1523
1524                 /*
1525                  * The page may have been disassociated from the queue
1526                  * while locks were dropped.
1527                  */
1528                 if (vm_page_queue(m) != PQ_ACTIVE)
1529                         continue;
1530
1531                 /*
1532                  * Wired pages are dequeued lazily.
1533                  */
1534                 if (m->wire_count != 0) {
1535                         vm_page_dequeue_deferred(m);
1536                         continue;
1537                 }
1538
1539                 /*
1540                  * Check to see "how much" the page has been used.
1541                  */
1542                 if ((m->aflags & PGA_REFERENCED) != 0) {
1543                         vm_page_aflag_clear(m, PGA_REFERENCED);
1544                         act_delta = 1;
1545                 } else
1546                         act_delta = 0;
1547
1548                 /*
1549                  * Perform an unsynchronized object ref count check.  While
1550                  * the page lock ensures that the page is not reallocated to
1551                  * another object, in particular, one with unmanaged mappings
1552                  * that cannot support pmap_ts_referenced(), two races are,
1553                  * nonetheless, possible:
1554                  * 1) The count was transitioning to zero, but we saw a non-
1555                  *    zero value.  pmap_ts_referenced() will return zero
1556                  *    because the page is not mapped.
1557                  * 2) The count was transitioning to one, but we saw zero. 
1558                  *    This race delays the detection of a new reference.  At
1559                  *    worst, we will deactivate and reactivate the page.
1560                  */
1561                 if (m->object->ref_count != 0)
1562                         act_delta += pmap_ts_referenced(m);
1563
1564                 /*
1565                  * Advance or decay the act_count based on recent usage.
1566                  */
1567                 if (act_delta != 0) {
1568                         m->act_count += ACT_ADVANCE + act_delta;
1569                         if (m->act_count > ACT_MAX)
1570                                 m->act_count = ACT_MAX;
1571                 } else
1572                         m->act_count -= min(m->act_count, ACT_DECLINE);
1573
1574                 if (m->act_count == 0) {
1575                         /*
1576                          * When not short for inactive pages, let dirty pages go
1577                          * through the inactive queue before moving to the
1578                          * laundry queues.  This gives them some extra time to
1579                          * be reactivated, potentially avoiding an expensive
1580                          * pageout.  During a page shortage, the inactive queue
1581                          * is necessarily small, so we may move dirty pages
1582                          * directly to the laundry queue.
1583                          */
1584                         if (inactq_shortage <= 0)
1585                                 vm_page_deactivate(m);
1586                         else {
1587                                 /*
1588                                  * Calling vm_page_test_dirty() here would
1589                                  * require acquisition of the object's write
1590                                  * lock.  However, during a page shortage,
1591                                  * directing dirty pages into the laundry
1592                                  * queue is only an optimization and not a
1593                                  * requirement.  Therefore, we simply rely on
1594                                  * the opportunistic updates to the page's
1595                                  * dirty field by the pmap.
1596                                  */
1597                                 if (m->dirty == 0) {
1598                                         vm_page_deactivate(m);
1599                                         inactq_shortage -=
1600                                             act_scan_laundry_weight;
1601                                 } else {
1602                                         vm_page_launder(m);
1603                                         inactq_shortage--;
1604                                 }
1605                         }
1606                 }
1607         }
1608         if (mtx != NULL) {
1609                 mtx_unlock(mtx);
1610                 mtx = NULL;
1611         }
1612         vm_pagequeue_lock(pq);
1613         TAILQ_REMOVE(&pq->pq_pl, &vmd->vmd_clock[0], plinks.q);
1614         TAILQ_INSERT_AFTER(&pq->pq_pl, marker, &vmd->vmd_clock[0], plinks.q);
1615         vm_pageout_end_scan(&ss);
1616         vm_pagequeue_unlock(pq);
1617
1618         if (pass > 0)
1619                 vm_swapout_run_idle();
1620         return (page_shortage <= 0);
1621 }
1622
1623 static int vm_pageout_oom_vote;
1624
1625 /*
1626  * The pagedaemon threads randlomly select one to perform the
1627  * OOM.  Trying to kill processes before all pagedaemons
1628  * failed to reach free target is premature.
1629  */
1630 static void
1631 vm_pageout_mightbe_oom(struct vm_domain *vmd, int page_shortage,
1632     int starting_page_shortage)
1633 {
1634         int old_vote;
1635
1636         if (starting_page_shortage <= 0 || starting_page_shortage !=
1637             page_shortage)
1638                 vmd->vmd_oom_seq = 0;
1639         else
1640                 vmd->vmd_oom_seq++;
1641         if (vmd->vmd_oom_seq < vm_pageout_oom_seq) {
1642                 if (vmd->vmd_oom) {
1643                         vmd->vmd_oom = FALSE;
1644                         atomic_subtract_int(&vm_pageout_oom_vote, 1);
1645                 }
1646                 return;
1647         }
1648
1649         /*
1650          * Do not follow the call sequence until OOM condition is
1651          * cleared.
1652          */
1653         vmd->vmd_oom_seq = 0;
1654
1655         if (vmd->vmd_oom)
1656                 return;
1657
1658         vmd->vmd_oom = TRUE;
1659         old_vote = atomic_fetchadd_int(&vm_pageout_oom_vote, 1);
1660         if (old_vote != vm_ndomains - 1)
1661                 return;
1662
1663         /*
1664          * The current pagedaemon thread is the last in the quorum to
1665          * start OOM.  Initiate the selection and signaling of the
1666          * victim.
1667          */
1668         vm_pageout_oom(VM_OOM_MEM);
1669
1670         /*
1671          * After one round of OOM terror, recall our vote.  On the
1672          * next pass, current pagedaemon would vote again if the low
1673          * memory condition is still there, due to vmd_oom being
1674          * false.
1675          */
1676         vmd->vmd_oom = FALSE;
1677         atomic_subtract_int(&vm_pageout_oom_vote, 1);
1678 }
1679
1680 /*
1681  * The OOM killer is the page daemon's action of last resort when
1682  * memory allocation requests have been stalled for a prolonged period
1683  * of time because it cannot reclaim memory.  This function computes
1684  * the approximate number of physical pages that could be reclaimed if
1685  * the specified address space is destroyed.
1686  *
1687  * Private, anonymous memory owned by the address space is the
1688  * principal resource that we expect to recover after an OOM kill.
1689  * Since the physical pages mapped by the address space's COW entries
1690  * are typically shared pages, they are unlikely to be released and so
1691  * they are not counted.
1692  *
1693  * To get to the point where the page daemon runs the OOM killer, its
1694  * efforts to write-back vnode-backed pages may have stalled.  This
1695  * could be caused by a memory allocation deadlock in the write path
1696  * that might be resolved by an OOM kill.  Therefore, physical pages
1697  * belonging to vnode-backed objects are counted, because they might
1698  * be freed without being written out first if the address space holds
1699  * the last reference to an unlinked vnode.
1700  *
1701  * Similarly, physical pages belonging to OBJT_PHYS objects are
1702  * counted because the address space might hold the last reference to
1703  * the object.
1704  */
1705 static long
1706 vm_pageout_oom_pagecount(struct vmspace *vmspace)
1707 {
1708         vm_map_t map;
1709         vm_map_entry_t entry;
1710         vm_object_t obj;
1711         long res;
1712
1713         map = &vmspace->vm_map;
1714         KASSERT(!map->system_map, ("system map"));
1715         sx_assert(&map->lock, SA_LOCKED);
1716         res = 0;
1717         for (entry = map->header.next; entry != &map->header;
1718             entry = entry->next) {
1719                 if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) != 0)
1720                         continue;
1721                 obj = entry->object.vm_object;
1722                 if (obj == NULL)
1723                         continue;
1724                 if ((entry->eflags & MAP_ENTRY_NEEDS_COPY) != 0 &&
1725                     obj->ref_count != 1)
1726                         continue;
1727                 switch (obj->type) {
1728                 case OBJT_DEFAULT:
1729                 case OBJT_SWAP:
1730                 case OBJT_PHYS:
1731                 case OBJT_VNODE:
1732                         res += obj->resident_page_count;
1733                         break;
1734                 }
1735         }
1736         return (res);
1737 }
1738
1739 void
1740 vm_pageout_oom(int shortage)
1741 {
1742         struct proc *p, *bigproc;
1743         vm_offset_t size, bigsize;
1744         struct thread *td;
1745         struct vmspace *vm;
1746         bool breakout;
1747
1748         /*
1749          * We keep the process bigproc locked once we find it to keep anyone
1750          * from messing with it; however, there is a possibility of
1751          * deadlock if process B is bigproc and one of its child processes
1752          * attempts to propagate a signal to B while we are waiting for A's
1753          * lock while walking this list.  To avoid this, we don't block on
1754          * the process lock but just skip a process if it is already locked.
1755          */
1756         bigproc = NULL;
1757         bigsize = 0;
1758         sx_slock(&allproc_lock);
1759         FOREACH_PROC_IN_SYSTEM(p) {
1760                 PROC_LOCK(p);
1761
1762                 /*
1763                  * If this is a system, protected or killed process, skip it.
1764                  */
1765                 if (p->p_state != PRS_NORMAL || (p->p_flag & (P_INEXEC |
1766                     P_PROTECTED | P_SYSTEM | P_WEXIT)) != 0 ||
1767                     p->p_pid == 1 || P_KILLED(p) ||
1768                     (p->p_pid < 48 && swap_pager_avail != 0)) {
1769                         PROC_UNLOCK(p);
1770                         continue;
1771                 }
1772                 /*
1773                  * If the process is in a non-running type state,
1774                  * don't touch it.  Check all the threads individually.
1775                  */
1776                 breakout = false;
1777                 FOREACH_THREAD_IN_PROC(p, td) {
1778                         thread_lock(td);
1779                         if (!TD_ON_RUNQ(td) &&
1780                             !TD_IS_RUNNING(td) &&
1781                             !TD_IS_SLEEPING(td) &&
1782                             !TD_IS_SUSPENDED(td) &&
1783                             !TD_IS_SWAPPED(td)) {
1784                                 thread_unlock(td);
1785                                 breakout = true;
1786                                 break;
1787                         }
1788                         thread_unlock(td);
1789                 }
1790                 if (breakout) {
1791                         PROC_UNLOCK(p);
1792                         continue;
1793                 }
1794                 /*
1795                  * get the process size
1796                  */
1797                 vm = vmspace_acquire_ref(p);
1798                 if (vm == NULL) {
1799                         PROC_UNLOCK(p);
1800                         continue;
1801                 }
1802                 _PHOLD_LITE(p);
1803                 PROC_UNLOCK(p);
1804                 sx_sunlock(&allproc_lock);
1805                 if (!vm_map_trylock_read(&vm->vm_map)) {
1806                         vmspace_free(vm);
1807                         sx_slock(&allproc_lock);
1808                         PRELE(p);
1809                         continue;
1810                 }
1811                 size = vmspace_swap_count(vm);
1812                 if (shortage == VM_OOM_MEM)
1813                         size += vm_pageout_oom_pagecount(vm);
1814                 vm_map_unlock_read(&vm->vm_map);
1815                 vmspace_free(vm);
1816                 sx_slock(&allproc_lock);
1817
1818                 /*
1819                  * If this process is bigger than the biggest one,
1820                  * remember it.
1821                  */
1822                 if (size > bigsize) {
1823                         if (bigproc != NULL)
1824                                 PRELE(bigproc);
1825                         bigproc = p;
1826                         bigsize = size;
1827                 } else {
1828                         PRELE(p);
1829                 }
1830         }
1831         sx_sunlock(&allproc_lock);
1832         if (bigproc != NULL) {
1833                 if (vm_panic_on_oom != 0)
1834                         panic("out of swap space");
1835                 PROC_LOCK(bigproc);
1836                 killproc(bigproc, "out of swap space");
1837                 sched_nice(bigproc, PRIO_MIN);
1838                 _PRELE(bigproc);
1839                 PROC_UNLOCK(bigproc);
1840         }
1841 }
1842
1843 static void
1844 vm_pageout_worker(void *arg)
1845 {
1846         struct vm_domain *vmd;
1847         int domain, pass, shortage;
1848         bool target_met;
1849
1850         domain = (uintptr_t)arg;
1851         vmd = VM_DOMAIN(domain);
1852         pass = 0;
1853         shortage = 0;
1854         target_met = true;
1855
1856         /*
1857          * XXXKIB It could be useful to bind pageout daemon threads to
1858          * the cores belonging to the domain, from which vm_page_array
1859          * is allocated.
1860          */
1861
1862         KASSERT(vmd->vmd_segs != 0, ("domain without segments"));
1863         vmd->vmd_last_active_scan = ticks;
1864
1865         /*
1866          * The pageout daemon worker is never done, so loop forever.
1867          */
1868         while (TRUE) {
1869                 vm_domain_pageout_lock(vmd);
1870                 /*
1871                  * We need to clear wanted before we check the limits.  This
1872                  * prevents races with wakers who will check wanted after they
1873                  * reach the limit.
1874                  */
1875                 atomic_store_int(&vmd->vmd_pageout_wanted, 0);
1876
1877                 /*
1878                  * Might the page daemon need to run again?
1879                  */
1880                 if (vm_paging_needed(vmd, vmd->vmd_free_count)) {
1881                         /*
1882                          * Yes, the scan failed to free enough pages.  If
1883                          * we have performed a level >= 1 (page reclamation)
1884                          * scan, then sleep a bit and try again.
1885                          */
1886                         vm_domain_pageout_unlock(vmd);
1887                         if (pass > 1)
1888                                 pause("pwait", hz / VM_INACT_SCAN_RATE);
1889                 } else {
1890                         /*
1891                          * No, sleep until the next wakeup or until pages
1892                          * need to have their reference stats updated.
1893                          */
1894                         if (mtx_sleep(&vmd->vmd_pageout_wanted,
1895                             vm_domain_pageout_lockptr(vmd), PDROP | PVM,
1896                             "psleep", hz / VM_INACT_SCAN_RATE) == 0)
1897                                 VM_CNT_INC(v_pdwakeups);
1898                 }
1899                 /* Prevent spurious wakeups by ensuring that wanted is set. */
1900                 atomic_store_int(&vmd->vmd_pageout_wanted, 1);
1901
1902                 /*
1903                  * Use the controller to calculate how many pages to free in
1904                  * this interval.
1905                  */
1906                 shortage = pidctrl_daemon(&vmd->vmd_pid, vmd->vmd_free_count);
1907                 if (shortage && pass == 0)
1908                         pass = 1;
1909
1910                 target_met = vm_pageout_scan(vmd, pass, shortage);
1911                 /*
1912                  * If the target was not met we must increase the pass to
1913                  * more aggressively reclaim.
1914                  */
1915                 if (!target_met)
1916                         pass++;
1917         }
1918 }
1919
1920 /*
1921  *      vm_pageout_init initialises basic pageout daemon settings.
1922  */
1923 static void
1924 vm_pageout_init_domain(int domain)
1925 {
1926         struct vm_domain *vmd;
1927         struct sysctl_oid *oid;
1928
1929         vmd = VM_DOMAIN(domain);
1930         vmd->vmd_interrupt_free_min = 2;
1931
1932         /*
1933          * v_free_reserved needs to include enough for the largest
1934          * swap pager structures plus enough for any pv_entry structs
1935          * when paging. 
1936          */
1937         if (vmd->vmd_page_count > 1024)
1938                 vmd->vmd_free_min = 4 + (vmd->vmd_page_count - 1024) / 200;
1939         else
1940                 vmd->vmd_free_min = 4;
1941         vmd->vmd_pageout_free_min = (2*MAXBSIZE)/PAGE_SIZE +
1942             vmd->vmd_interrupt_free_min;
1943         vmd->vmd_free_reserved = vm_pageout_page_count +
1944             vmd->vmd_pageout_free_min + (vmd->vmd_page_count / 768);
1945         vmd->vmd_free_severe = vmd->vmd_free_min / 2;
1946         vmd->vmd_free_target = 4 * vmd->vmd_free_min + vmd->vmd_free_reserved;
1947         vmd->vmd_free_min += vmd->vmd_free_reserved;
1948         vmd->vmd_free_severe += vmd->vmd_free_reserved;
1949         vmd->vmd_inactive_target = (3 * vmd->vmd_free_target) / 2;
1950         if (vmd->vmd_inactive_target > vmd->vmd_free_count / 3)
1951                 vmd->vmd_inactive_target = vmd->vmd_free_count / 3;
1952
1953         /*
1954          * Set the default wakeup threshold to be 10% below the paging
1955          * target.  This keeps the steady state out of shortfall.
1956          */
1957         vmd->vmd_pageout_wakeup_thresh = (vmd->vmd_free_target / 10) * 9;
1958
1959         /*
1960          * Target amount of memory to move out of the laundry queue during a
1961          * background laundering.  This is proportional to the amount of system
1962          * memory.
1963          */
1964         vmd->vmd_background_launder_target = (vmd->vmd_free_target -
1965             vmd->vmd_free_min) / 10;
1966
1967         /* Initialize the pageout daemon pid controller. */
1968         pidctrl_init(&vmd->vmd_pid, hz / VM_INACT_SCAN_RATE,
1969             vmd->vmd_free_target, PIDCTRL_BOUND,
1970             PIDCTRL_KPD, PIDCTRL_KID, PIDCTRL_KDD);
1971         oid = SYSCTL_ADD_NODE(NULL, SYSCTL_CHILDREN(vmd->vmd_oid), OID_AUTO,
1972             "pidctrl", CTLFLAG_RD, NULL, "");
1973         pidctrl_init_sysctl(&vmd->vmd_pid, SYSCTL_CHILDREN(oid));
1974 }
1975
1976 static void
1977 vm_pageout_init(void)
1978 {
1979         u_int freecount;
1980         int i;
1981
1982         /*
1983          * Initialize some paging parameters.
1984          */
1985         if (vm_cnt.v_page_count < 2000)
1986                 vm_pageout_page_count = 8;
1987
1988         freecount = 0;
1989         for (i = 0; i < vm_ndomains; i++) {
1990                 struct vm_domain *vmd;
1991
1992                 vm_pageout_init_domain(i);
1993                 vmd = VM_DOMAIN(i);
1994                 vm_cnt.v_free_reserved += vmd->vmd_free_reserved;
1995                 vm_cnt.v_free_target += vmd->vmd_free_target;
1996                 vm_cnt.v_free_min += vmd->vmd_free_min;
1997                 vm_cnt.v_inactive_target += vmd->vmd_inactive_target;
1998                 vm_cnt.v_pageout_free_min += vmd->vmd_pageout_free_min;
1999                 vm_cnt.v_interrupt_free_min += vmd->vmd_interrupt_free_min;
2000                 vm_cnt.v_free_severe += vmd->vmd_free_severe;
2001                 freecount += vmd->vmd_free_count;
2002         }
2003
2004         /*
2005          * Set interval in seconds for active scan.  We want to visit each
2006          * page at least once every ten minutes.  This is to prevent worst
2007          * case paging behaviors with stale active LRU.
2008          */
2009         if (vm_pageout_update_period == 0)
2010                 vm_pageout_update_period = 600;
2011
2012         if (vm_page_max_wired == 0)
2013                 vm_page_max_wired = freecount / 3;
2014 }
2015
2016 /*
2017  *     vm_pageout is the high level pageout daemon.
2018  */
2019 static void
2020 vm_pageout(void)
2021 {
2022         int error;
2023         int i;
2024
2025         swap_pager_swap_init();
2026         snprintf(curthread->td_name, sizeof(curthread->td_name), "dom0");
2027         error = kthread_add(vm_pageout_laundry_worker, NULL, curproc, NULL,
2028             0, 0, "laundry: dom0");
2029         if (error != 0)
2030                 panic("starting laundry for domain 0, error %d", error);
2031         for (i = 1; i < vm_ndomains; i++) {
2032                 error = kthread_add(vm_pageout_worker, (void *)(uintptr_t)i,
2033                     curproc, NULL, 0, 0, "dom%d", i);
2034                 if (error != 0) {
2035                         panic("starting pageout for domain %d, error %d\n",
2036                             i, error);
2037                 }
2038                 error = kthread_add(vm_pageout_laundry_worker,
2039                     (void *)(uintptr_t)i, curproc, NULL, 0, 0,
2040                     "laundry: dom%d", i);
2041                 if (error != 0)
2042                         panic("starting laundry for domain %d, error %d",
2043                             i, error);
2044         }
2045         error = kthread_add(uma_reclaim_worker, NULL, curproc, NULL,
2046             0, 0, "uma");
2047         if (error != 0)
2048                 panic("starting uma_reclaim helper, error %d\n", error);
2049         vm_pageout_worker((void *)(uintptr_t)0);
2050 }
2051
2052 /*
2053  * Perform an advisory wakeup of the page daemon.
2054  */
2055 void
2056 pagedaemon_wakeup(int domain)
2057 {
2058         struct vm_domain *vmd;
2059
2060         vmd = VM_DOMAIN(domain);
2061         vm_domain_pageout_assert_unlocked(vmd);
2062         if (curproc == pageproc)
2063                 return;
2064
2065         if (atomic_fetchadd_int(&vmd->vmd_pageout_wanted, 1) == 0) {
2066                 vm_domain_pageout_lock(vmd);
2067                 atomic_store_int(&vmd->vmd_pageout_wanted, 1);
2068                 wakeup(&vmd->vmd_pageout_wanted);
2069                 vm_domain_pageout_unlock(vmd);
2070         }
2071 }