]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/vm/vm_pageout.c
awk: Merge upstream 2nd Edition Awk Book
[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 #include "opt_vm.h"
79
80 #include <sys/param.h>
81 #include <sys/systm.h>
82 #include <sys/kernel.h>
83 #include <sys/blockcount.h>
84 #include <sys/eventhandler.h>
85 #include <sys/lock.h>
86 #include <sys/mutex.h>
87 #include <sys/proc.h>
88 #include <sys/kthread.h>
89 #include <sys/ktr.h>
90 #include <sys/mount.h>
91 #include <sys/racct.h>
92 #include <sys/resourcevar.h>
93 #include <sys/sched.h>
94 #include <sys/sdt.h>
95 #include <sys/signalvar.h>
96 #include <sys/smp.h>
97 #include <sys/time.h>
98 #include <sys/vnode.h>
99 #include <sys/vmmeter.h>
100 #include <sys/rwlock.h>
101 #include <sys/sx.h>
102 #include <sys/sysctl.h>
103
104 #include <vm/vm.h>
105 #include <vm/vm_param.h>
106 #include <vm/vm_object.h>
107 #include <vm/vm_page.h>
108 #include <vm/vm_map.h>
109 #include <vm/vm_pageout.h>
110 #include <vm/vm_pager.h>
111 #include <vm/vm_phys.h>
112 #include <vm/vm_pagequeue.h>
113 #include <vm/swap_pager.h>
114 #include <vm/vm_extern.h>
115 #include <vm/uma.h>
116
117 /*
118  * System initialization
119  */
120
121 /* the kernel process "vm_pageout"*/
122 static void vm_pageout(void);
123 static void vm_pageout_init(void);
124 static int vm_pageout_clean(vm_page_t m, int *numpagedout);
125 static int vm_pageout_cluster(vm_page_t m);
126 static void vm_pageout_mightbe_oom(struct vm_domain *vmd, int page_shortage,
127     int starting_page_shortage);
128
129 SYSINIT(pagedaemon_init, SI_SUB_KTHREAD_PAGE, SI_ORDER_FIRST, vm_pageout_init,
130     NULL);
131
132 struct proc *pageproc;
133
134 static struct kproc_desc page_kp = {
135         "pagedaemon",
136         vm_pageout,
137         &pageproc
138 };
139 SYSINIT(pagedaemon, SI_SUB_KTHREAD_PAGE, SI_ORDER_SECOND, kproc_start,
140     &page_kp);
141
142 SDT_PROVIDER_DEFINE(vm);
143 SDT_PROBE_DEFINE(vm, , , vm__lowmem_scan);
144
145 /* Pagedaemon activity rates, in subdivisions of one second. */
146 #define VM_LAUNDER_RATE         10
147 #define VM_INACT_SCAN_RATE      10
148
149 static int swapdev_enabled;
150 int vm_pageout_page_count = 32;
151
152 static int vm_panic_on_oom = 0;
153 SYSCTL_INT(_vm, OID_AUTO, panic_on_oom,
154     CTLFLAG_RWTUN, &vm_panic_on_oom, 0,
155     "Panic on the given number of out-of-memory errors instead of "
156     "killing the largest process");
157
158 static int vm_pageout_update_period;
159 SYSCTL_INT(_vm, OID_AUTO, pageout_update_period,
160     CTLFLAG_RWTUN, &vm_pageout_update_period, 0,
161     "Maximum active LRU update period");
162
163 static int pageout_cpus_per_thread = 16;
164 SYSCTL_INT(_vm, OID_AUTO, pageout_cpus_per_thread, CTLFLAG_RDTUN,
165     &pageout_cpus_per_thread, 0,
166     "Number of CPUs per pagedaemon worker thread");
167   
168 static int lowmem_period = 10;
169 SYSCTL_INT(_vm, OID_AUTO, lowmem_period, CTLFLAG_RWTUN, &lowmem_period, 0,
170     "Low memory callback period");
171
172 static int disable_swap_pageouts;
173 SYSCTL_INT(_vm, OID_AUTO, disable_swapspace_pageouts,
174     CTLFLAG_RWTUN, &disable_swap_pageouts, 0,
175     "Disallow swapout of dirty pages");
176
177 static int pageout_lock_miss;
178 SYSCTL_INT(_vm, OID_AUTO, pageout_lock_miss,
179     CTLFLAG_RD, &pageout_lock_miss, 0,
180     "vget() lock misses during pageout");
181
182 static int vm_pageout_oom_seq = 12;
183 SYSCTL_INT(_vm, OID_AUTO, pageout_oom_seq,
184     CTLFLAG_RWTUN, &vm_pageout_oom_seq, 0,
185     "back-to-back calls to oom detector to start OOM");
186
187 static int act_scan_laundry_weight = 3;
188 SYSCTL_INT(_vm, OID_AUTO, act_scan_laundry_weight, CTLFLAG_RWTUN,
189     &act_scan_laundry_weight, 0,
190     "weight given to clean vs. dirty pages in active queue scans");
191
192 static u_int vm_background_launder_rate = 4096;
193 SYSCTL_UINT(_vm, OID_AUTO, background_launder_rate, CTLFLAG_RWTUN,
194     &vm_background_launder_rate, 0,
195     "background laundering rate, in kilobytes per second");
196
197 static u_int vm_background_launder_max = 20 * 1024;
198 SYSCTL_UINT(_vm, OID_AUTO, background_launder_max, CTLFLAG_RWTUN,
199     &vm_background_launder_max, 0,
200     "background laundering cap, in kilobytes");
201
202 u_long vm_page_max_user_wired;
203 SYSCTL_ULONG(_vm, OID_AUTO, max_user_wired, CTLFLAG_RW,
204     &vm_page_max_user_wired, 0,
205     "system-wide limit to user-wired page count");
206
207 static u_int isqrt(u_int num);
208 static int vm_pageout_launder(struct vm_domain *vmd, int launder,
209     bool in_shortfall);
210 static void vm_pageout_laundry_worker(void *arg);
211
212 struct scan_state {
213         struct vm_batchqueue bq;
214         struct vm_pagequeue *pq;
215         vm_page_t       marker;
216         int             maxscan;
217         int             scanned;
218 };
219
220 static void
221 vm_pageout_init_scan(struct scan_state *ss, struct vm_pagequeue *pq,
222     vm_page_t marker, vm_page_t after, int maxscan)
223 {
224
225         vm_pagequeue_assert_locked(pq);
226         KASSERT((marker->a.flags & PGA_ENQUEUED) == 0,
227             ("marker %p already enqueued", marker));
228
229         if (after == NULL)
230                 TAILQ_INSERT_HEAD(&pq->pq_pl, marker, plinks.q);
231         else
232                 TAILQ_INSERT_AFTER(&pq->pq_pl, after, marker, plinks.q);
233         vm_page_aflag_set(marker, PGA_ENQUEUED);
234
235         vm_batchqueue_init(&ss->bq);
236         ss->pq = pq;
237         ss->marker = marker;
238         ss->maxscan = maxscan;
239         ss->scanned = 0;
240         vm_pagequeue_unlock(pq);
241 }
242
243 static void
244 vm_pageout_end_scan(struct scan_state *ss)
245 {
246         struct vm_pagequeue *pq;
247
248         pq = ss->pq;
249         vm_pagequeue_assert_locked(pq);
250         KASSERT((ss->marker->a.flags & PGA_ENQUEUED) != 0,
251             ("marker %p not enqueued", ss->marker));
252
253         TAILQ_REMOVE(&pq->pq_pl, ss->marker, plinks.q);
254         vm_page_aflag_clear(ss->marker, PGA_ENQUEUED);
255         pq->pq_pdpages += ss->scanned;
256 }
257
258 /*
259  * Add a small number of queued pages to a batch queue for later processing
260  * without the corresponding queue lock held.  The caller must have enqueued a
261  * marker page at the desired start point for the scan.  Pages will be
262  * physically dequeued if the caller so requests.  Otherwise, the returned
263  * batch may contain marker pages, and it is up to the caller to handle them.
264  *
265  * When processing the batch queue, vm_pageout_defer() must be used to
266  * determine whether the page has been logically dequeued since the batch was
267  * collected.
268  */
269 static __always_inline void
270 vm_pageout_collect_batch(struct scan_state *ss, const bool dequeue)
271 {
272         struct vm_pagequeue *pq;
273         vm_page_t m, marker, n;
274
275         marker = ss->marker;
276         pq = ss->pq;
277
278         KASSERT((marker->a.flags & PGA_ENQUEUED) != 0,
279             ("marker %p not enqueued", ss->marker));
280
281         vm_pagequeue_lock(pq);
282         for (m = TAILQ_NEXT(marker, plinks.q); m != NULL &&
283             ss->scanned < ss->maxscan && ss->bq.bq_cnt < VM_BATCHQUEUE_SIZE;
284             m = n, ss->scanned++) {
285                 n = TAILQ_NEXT(m, plinks.q);
286                 if ((m->flags & PG_MARKER) == 0) {
287                         KASSERT((m->a.flags & PGA_ENQUEUED) != 0,
288                             ("page %p not enqueued", m));
289                         KASSERT((m->flags & PG_FICTITIOUS) == 0,
290                             ("Fictitious page %p cannot be in page queue", m));
291                         KASSERT((m->oflags & VPO_UNMANAGED) == 0,
292                             ("Unmanaged page %p cannot be in page queue", m));
293                 } else if (dequeue)
294                         continue;
295
296                 (void)vm_batchqueue_insert(&ss->bq, m);
297                 if (dequeue) {
298                         TAILQ_REMOVE(&pq->pq_pl, m, plinks.q);
299                         vm_page_aflag_clear(m, PGA_ENQUEUED);
300                 }
301         }
302         TAILQ_REMOVE(&pq->pq_pl, marker, plinks.q);
303         if (__predict_true(m != NULL))
304                 TAILQ_INSERT_BEFORE(m, marker, plinks.q);
305         else
306                 TAILQ_INSERT_TAIL(&pq->pq_pl, marker, plinks.q);
307         if (dequeue)
308                 vm_pagequeue_cnt_add(pq, -ss->bq.bq_cnt);
309         vm_pagequeue_unlock(pq);
310 }
311
312 /*
313  * Return the next page to be scanned, or NULL if the scan is complete.
314  */
315 static __always_inline vm_page_t
316 vm_pageout_next(struct scan_state *ss, const bool dequeue)
317 {
318
319         if (ss->bq.bq_cnt == 0)
320                 vm_pageout_collect_batch(ss, dequeue);
321         return (vm_batchqueue_pop(&ss->bq));
322 }
323
324 /*
325  * Determine whether processing of a page should be deferred and ensure that any
326  * outstanding queue operations are processed.
327  */
328 static __always_inline bool
329 vm_pageout_defer(vm_page_t m, const uint8_t queue, const bool enqueued)
330 {
331         vm_page_astate_t as;
332
333         as = vm_page_astate_load(m);
334         if (__predict_false(as.queue != queue ||
335             ((as.flags & PGA_ENQUEUED) != 0) != enqueued))
336                 return (true);
337         if ((as.flags & PGA_QUEUE_OP_MASK) != 0) {
338                 vm_page_pqbatch_submit(m, queue);
339                 return (true);
340         }
341         return (false);
342 }
343
344 /*
345  * Scan for pages at adjacent offsets within the given page's object that are
346  * eligible for laundering, form a cluster of these pages and the given page,
347  * and launder that cluster.
348  */
349 static int
350 vm_pageout_cluster(vm_page_t m)
351 {
352         vm_object_t object;
353         vm_page_t mc[2 * vm_pageout_page_count], p, pb, ps;
354         vm_pindex_t pindex;
355         int ib, is, page_base, pageout_count;
356
357         object = m->object;
358         VM_OBJECT_ASSERT_WLOCKED(object);
359         pindex = m->pindex;
360
361         vm_page_assert_xbusied(m);
362
363         mc[vm_pageout_page_count] = pb = ps = m;
364         pageout_count = 1;
365         page_base = vm_pageout_page_count;
366         ib = 1;
367         is = 1;
368
369         /*
370          * We can cluster only if the page is not clean, busy, or held, and
371          * the page is in the laundry queue.
372          *
373          * During heavy mmap/modification loads the pageout
374          * daemon can really fragment the underlying file
375          * due to flushing pages out of order and not trying to
376          * align the clusters (which leaves sporadic out-of-order
377          * holes).  To solve this problem we do the reverse scan
378          * first and attempt to align our cluster, then do a 
379          * forward scan if room remains.
380          */
381 more:
382         while (ib != 0 && pageout_count < vm_pageout_page_count) {
383                 if (ib > pindex) {
384                         ib = 0;
385                         break;
386                 }
387                 if ((p = vm_page_prev(pb)) == NULL ||
388                     vm_page_tryxbusy(p) == 0) {
389                         ib = 0;
390                         break;
391                 }
392                 if (vm_page_wired(p)) {
393                         ib = 0;
394                         vm_page_xunbusy(p);
395                         break;
396                 }
397                 vm_page_test_dirty(p);
398                 if (p->dirty == 0) {
399                         ib = 0;
400                         vm_page_xunbusy(p);
401                         break;
402                 }
403                 if (!vm_page_in_laundry(p) || !vm_page_try_remove_write(p)) {
404                         vm_page_xunbusy(p);
405                         ib = 0;
406                         break;
407                 }
408                 mc[--page_base] = pb = p;
409                 ++pageout_count;
410                 ++ib;
411
412                 /*
413                  * We are at an alignment boundary.  Stop here, and switch
414                  * directions.  Do not clear ib.
415                  */
416                 if ((pindex - (ib - 1)) % vm_pageout_page_count == 0)
417                         break;
418         }
419         while (pageout_count < vm_pageout_page_count && 
420             pindex + is < object->size) {
421                 if ((p = vm_page_next(ps)) == NULL ||
422                     vm_page_tryxbusy(p) == 0)
423                         break;
424                 if (vm_page_wired(p)) {
425                         vm_page_xunbusy(p);
426                         break;
427                 }
428                 vm_page_test_dirty(p);
429                 if (p->dirty == 0) {
430                         vm_page_xunbusy(p);
431                         break;
432                 }
433                 if (!vm_page_in_laundry(p) || !vm_page_try_remove_write(p)) {
434                         vm_page_xunbusy(p);
435                         break;
436                 }
437                 mc[page_base + pageout_count] = ps = p;
438                 ++pageout_count;
439                 ++is;
440         }
441
442         /*
443          * If we exhausted our forward scan, continue with the reverse scan
444          * when possible, even past an alignment boundary.  This catches
445          * boundary conditions.
446          */
447         if (ib != 0 && pageout_count < vm_pageout_page_count)
448                 goto more;
449
450         return (vm_pageout_flush(&mc[page_base], pageout_count,
451             VM_PAGER_PUT_NOREUSE, 0, NULL, NULL));
452 }
453
454 /*
455  * vm_pageout_flush() - launder the given pages
456  *
457  *      The given pages are laundered.  Note that we setup for the start of
458  *      I/O ( i.e. busy the page ), mark it read-only, and bump the object
459  *      reference count all in here rather then in the parent.  If we want
460  *      the parent to do more sophisticated things we may have to change
461  *      the ordering.
462  *
463  *      Returned runlen is the count of pages between mreq and first
464  *      page after mreq with status VM_PAGER_AGAIN.
465  *      *eio is set to TRUE if pager returned VM_PAGER_ERROR or VM_PAGER_FAIL
466  *      for any page in runlen set.
467  */
468 int
469 vm_pageout_flush(vm_page_t *mc, int count, int flags, int mreq, int *prunlen,
470     boolean_t *eio)
471 {
472         vm_object_t object = mc[0]->object;
473         int pageout_status[count];
474         int numpagedout = 0;
475         int i, runlen;
476
477         VM_OBJECT_ASSERT_WLOCKED(object);
478
479         /*
480          * Initiate I/O.  Mark the pages shared busy and verify that they're
481          * valid and read-only.
482          *
483          * We do not have to fixup the clean/dirty bits here... we can
484          * allow the pager to do it after the I/O completes.
485          *
486          * NOTE! mc[i]->dirty may be partial or fragmented due to an
487          * edge case with file fragments.
488          */
489         for (i = 0; i < count; i++) {
490                 KASSERT(vm_page_all_valid(mc[i]),
491                     ("vm_pageout_flush: partially invalid page %p index %d/%d",
492                         mc[i], i, count));
493                 KASSERT((mc[i]->a.flags & PGA_WRITEABLE) == 0,
494                     ("vm_pageout_flush: writeable page %p", mc[i]));
495                 vm_page_busy_downgrade(mc[i]);
496         }
497         vm_object_pip_add(object, count);
498
499         vm_pager_put_pages(object, mc, count, flags, pageout_status);
500
501         runlen = count - mreq;
502         if (eio != NULL)
503                 *eio = FALSE;
504         for (i = 0; i < count; i++) {
505                 vm_page_t mt = mc[i];
506
507                 KASSERT(pageout_status[i] == VM_PAGER_PEND ||
508                     !pmap_page_is_write_mapped(mt),
509                     ("vm_pageout_flush: page %p is not write protected", mt));
510                 switch (pageout_status[i]) {
511                 case VM_PAGER_OK:
512                         /*
513                          * The page may have moved since laundering started, in
514                          * which case it should be left alone.
515                          */
516                         if (vm_page_in_laundry(mt))
517                                 vm_page_deactivate_noreuse(mt);
518                         /* FALLTHROUGH */
519                 case VM_PAGER_PEND:
520                         numpagedout++;
521                         break;
522                 case VM_PAGER_BAD:
523                         /*
524                          * The page is outside the object's range.  We pretend
525                          * that the page out worked and clean the page, so the
526                          * changes will be lost if the page is reclaimed by
527                          * the page daemon.
528                          */
529                         vm_page_undirty(mt);
530                         if (vm_page_in_laundry(mt))
531                                 vm_page_deactivate_noreuse(mt);
532                         break;
533                 case VM_PAGER_ERROR:
534                 case VM_PAGER_FAIL:
535                         /*
536                          * If the page couldn't be paged out to swap because the
537                          * pager wasn't able to find space, place the page in
538                          * the PQ_UNSWAPPABLE holding queue.  This is an
539                          * optimization that prevents the page daemon from
540                          * wasting CPU cycles on pages that cannot be reclaimed
541                          * because no swap device is configured.
542                          *
543                          * Otherwise, reactivate the page so that it doesn't
544                          * clog the laundry and inactive queues.  (We will try
545                          * paging it out again later.)
546                          */
547                         if ((object->flags & OBJ_SWAP) != 0 &&
548                             pageout_status[i] == VM_PAGER_FAIL) {
549                                 vm_page_unswappable(mt);
550                                 numpagedout++;
551                         } else
552                                 vm_page_activate(mt);
553                         if (eio != NULL && i >= mreq && i - mreq < runlen)
554                                 *eio = TRUE;
555                         break;
556                 case VM_PAGER_AGAIN:
557                         if (i >= mreq && i - mreq < runlen)
558                                 runlen = i - mreq;
559                         break;
560                 }
561
562                 /*
563                  * If the operation is still going, leave the page busy to
564                  * block all other accesses. Also, leave the paging in
565                  * progress indicator set so that we don't attempt an object
566                  * collapse.
567                  */
568                 if (pageout_status[i] != VM_PAGER_PEND) {
569                         vm_object_pip_wakeup(object);
570                         vm_page_sunbusy(mt);
571                 }
572         }
573         if (prunlen != NULL)
574                 *prunlen = runlen;
575         return (numpagedout);
576 }
577
578 static void
579 vm_pageout_swapon(void *arg __unused, struct swdevt *sp __unused)
580 {
581
582         atomic_store_rel_int(&swapdev_enabled, 1);
583 }
584
585 static void
586 vm_pageout_swapoff(void *arg __unused, struct swdevt *sp __unused)
587 {
588
589         if (swap_pager_nswapdev() == 1)
590                 atomic_store_rel_int(&swapdev_enabled, 0);
591 }
592
593 /*
594  * Attempt to acquire all of the necessary locks to launder a page and
595  * then call through the clustering layer to PUTPAGES.  Wait a short
596  * time for a vnode lock.
597  *
598  * Requires the page and object lock on entry, releases both before return.
599  * Returns 0 on success and an errno otherwise.
600  */
601 static int
602 vm_pageout_clean(vm_page_t m, int *numpagedout)
603 {
604         struct vnode *vp;
605         struct mount *mp;
606         vm_object_t object;
607         vm_pindex_t pindex;
608         int error;
609
610         object = m->object;
611         VM_OBJECT_ASSERT_WLOCKED(object);
612         error = 0;
613         vp = NULL;
614         mp = NULL;
615
616         /*
617          * The object is already known NOT to be dead.   It
618          * is possible for the vget() to block the whole
619          * pageout daemon, but the new low-memory handling
620          * code should prevent it.
621          *
622          * We can't wait forever for the vnode lock, we might
623          * deadlock due to a vn_read() getting stuck in
624          * vm_wait while holding this vnode.  We skip the 
625          * vnode if we can't get it in a reasonable amount
626          * of time.
627          */
628         if (object->type == OBJT_VNODE) {
629                 vm_page_xunbusy(m);
630                 vp = object->handle;
631                 if (vp->v_type == VREG &&
632                     vn_start_write(vp, &mp, V_NOWAIT) != 0) {
633                         mp = NULL;
634                         error = EDEADLK;
635                         goto unlock_all;
636                 }
637                 KASSERT(mp != NULL,
638                     ("vp %p with NULL v_mount", vp));
639                 vm_object_reference_locked(object);
640                 pindex = m->pindex;
641                 VM_OBJECT_WUNLOCK(object);
642                 if (vget(vp, vn_lktype_write(NULL, vp) | LK_TIMELOCK) != 0) {
643                         vp = NULL;
644                         error = EDEADLK;
645                         goto unlock_mp;
646                 }
647                 VM_OBJECT_WLOCK(object);
648
649                 /*
650                  * Ensure that the object and vnode were not disassociated
651                  * while locks were dropped.
652                  */
653                 if (vp->v_object != object) {
654                         error = ENOENT;
655                         goto unlock_all;
656                 }
657
658                 /*
659                  * While the object was unlocked, the page may have been:
660                  * (1) moved to a different queue,
661                  * (2) reallocated to a different object,
662                  * (3) reallocated to a different offset, or
663                  * (4) cleaned.
664                  */
665                 if (!vm_page_in_laundry(m) || m->object != object ||
666                     m->pindex != pindex || m->dirty == 0) {
667                         error = ENXIO;
668                         goto unlock_all;
669                 }
670
671                 /*
672                  * The page may have been busied while the object lock was
673                  * released.
674                  */
675                 if (vm_page_tryxbusy(m) == 0) {
676                         error = EBUSY;
677                         goto unlock_all;
678                 }
679         }
680
681         /*
682          * Remove all writeable mappings, failing if the page is wired.
683          */
684         if (!vm_page_try_remove_write(m)) {
685                 vm_page_xunbusy(m);
686                 error = EBUSY;
687                 goto unlock_all;
688         }
689
690         /*
691          * If a page is dirty, then it is either being washed
692          * (but not yet cleaned) or it is still in the
693          * laundry.  If it is still in the laundry, then we
694          * start the cleaning operation. 
695          */
696         if ((*numpagedout = vm_pageout_cluster(m)) == 0)
697                 error = EIO;
698
699 unlock_all:
700         VM_OBJECT_WUNLOCK(object);
701
702 unlock_mp:
703         if (mp != NULL) {
704                 if (vp != NULL)
705                         vput(vp);
706                 vm_object_deallocate(object);
707                 vn_finished_write(mp);
708         }
709
710         return (error);
711 }
712
713 /*
714  * Attempt to launder the specified number of pages.
715  *
716  * Returns the number of pages successfully laundered.
717  */
718 static int
719 vm_pageout_launder(struct vm_domain *vmd, int launder, bool in_shortfall)
720 {
721         struct scan_state ss;
722         struct vm_pagequeue *pq;
723         vm_object_t object;
724         vm_page_t m, marker;
725         vm_page_astate_t new, old;
726         int act_delta, error, numpagedout, queue, refs, starting_target;
727         int vnodes_skipped;
728         bool pageout_ok;
729
730         object = NULL;
731         starting_target = launder;
732         vnodes_skipped = 0;
733
734         /*
735          * Scan the laundry queues for pages eligible to be laundered.  We stop
736          * once the target number of dirty pages have been laundered, or once
737          * we've reached the end of the queue.  A single iteration of this loop
738          * may cause more than one page to be laundered because of clustering.
739          *
740          * As an optimization, we avoid laundering from PQ_UNSWAPPABLE when no
741          * swap devices are configured.
742          */
743         if (atomic_load_acq_int(&swapdev_enabled))
744                 queue = PQ_UNSWAPPABLE;
745         else
746                 queue = PQ_LAUNDRY;
747
748 scan:
749         marker = &vmd->vmd_markers[queue];
750         pq = &vmd->vmd_pagequeues[queue];
751         vm_pagequeue_lock(pq);
752         vm_pageout_init_scan(&ss, pq, marker, NULL, pq->pq_cnt);
753         while (launder > 0 && (m = vm_pageout_next(&ss, false)) != NULL) {
754                 if (__predict_false((m->flags & PG_MARKER) != 0))
755                         continue;
756
757                 /*
758                  * Don't touch a page that was removed from the queue after the
759                  * page queue lock was released.  Otherwise, ensure that any
760                  * pending queue operations, such as dequeues for wired pages,
761                  * are handled.
762                  */
763                 if (vm_pageout_defer(m, queue, true))
764                         continue;
765
766                 /*
767                  * Lock the page's object.
768                  */
769                 if (object == NULL || object != m->object) {
770                         if (object != NULL)
771                                 VM_OBJECT_WUNLOCK(object);
772                         object = atomic_load_ptr(&m->object);
773                         if (__predict_false(object == NULL))
774                                 /* The page is being freed by another thread. */
775                                 continue;
776
777                         /* Depends on type-stability. */
778                         VM_OBJECT_WLOCK(object);
779                         if (__predict_false(m->object != object)) {
780                                 VM_OBJECT_WUNLOCK(object);
781                                 object = NULL;
782                                 continue;
783                         }
784                 }
785
786                 if (vm_page_tryxbusy(m) == 0)
787                         continue;
788
789                 /*
790                  * Check for wirings now that we hold the object lock and have
791                  * exclusively busied the page.  If the page is mapped, it may
792                  * still be wired by pmap lookups.  The call to
793                  * vm_page_try_remove_all() below atomically checks for such
794                  * wirings and removes mappings.  If the page is unmapped, the
795                  * wire count is guaranteed not to increase after this check.
796                  */
797                 if (__predict_false(vm_page_wired(m)))
798                         goto skip_page;
799
800                 /*
801                  * Invalid pages can be easily freed.  They cannot be
802                  * mapped; vm_page_free() asserts this.
803                  */
804                 if (vm_page_none_valid(m))
805                         goto free_page;
806
807                 refs = object->ref_count != 0 ? pmap_ts_referenced(m) : 0;
808
809                 for (old = vm_page_astate_load(m);;) {
810                         /*
811                          * Check to see if the page has been removed from the
812                          * queue since the first such check.  Leave it alone if
813                          * so, discarding any references collected by
814                          * pmap_ts_referenced().
815                          */
816                         if (__predict_false(_vm_page_queue(old) == PQ_NONE))
817                                 goto skip_page;
818
819                         new = old;
820                         act_delta = refs;
821                         if ((old.flags & PGA_REFERENCED) != 0) {
822                                 new.flags &= ~PGA_REFERENCED;
823                                 act_delta++;
824                         }
825                         if (act_delta == 0) {
826                                 ;
827                         } else if (object->ref_count != 0) {
828                                 /*
829                                  * Increase the activation count if the page was
830                                  * referenced while in the laundry queue.  This
831                                  * makes it less likely that the page will be
832                                  * returned prematurely to the laundry queue.
833                                  */
834                                 new.act_count += ACT_ADVANCE +
835                                     act_delta;
836                                 if (new.act_count > ACT_MAX)
837                                         new.act_count = ACT_MAX;
838
839                                 new.flags &= ~PGA_QUEUE_OP_MASK;
840                                 new.flags |= PGA_REQUEUE;
841                                 new.queue = PQ_ACTIVE;
842                                 if (!vm_page_pqstate_commit(m, &old, new))
843                                         continue;
844
845                                 /*
846                                  * If this was a background laundering, count
847                                  * activated pages towards our target.  The
848                                  * purpose of background laundering is to ensure
849                                  * that pages are eventually cycled through the
850                                  * laundry queue, and an activation is a valid
851                                  * way out.
852                                  */
853                                 if (!in_shortfall)
854                                         launder--;
855                                 VM_CNT_INC(v_reactivated);
856                                 goto skip_page;
857                         } else if ((object->flags & OBJ_DEAD) == 0) {
858                                 new.flags |= PGA_REQUEUE;
859                                 if (!vm_page_pqstate_commit(m, &old, new))
860                                         continue;
861                                 goto skip_page;
862                         }
863                         break;
864                 }
865
866                 /*
867                  * If the page appears to be clean at the machine-independent
868                  * layer, then remove all of its mappings from the pmap in
869                  * anticipation of freeing it.  If, however, any of the page's
870                  * mappings allow write access, then the page may still be
871                  * modified until the last of those mappings are removed.
872                  */
873                 if (object->ref_count != 0) {
874                         vm_page_test_dirty(m);
875                         if (m->dirty == 0 && !vm_page_try_remove_all(m))
876                                 goto skip_page;
877                 }
878
879                 /*
880                  * Clean pages are freed, and dirty pages are paged out unless
881                  * they belong to a dead object.  Requeueing dirty pages from
882                  * dead objects is pointless, as they are being paged out and
883                  * freed by the thread that destroyed the object.
884                  */
885                 if (m->dirty == 0) {
886 free_page:
887                         /*
888                          * Now we are guaranteed that no other threads are
889                          * manipulating the page, check for a last-second
890                          * reference.
891                          */
892                         if (vm_pageout_defer(m, queue, true))
893                                 goto skip_page;
894                         vm_page_free(m);
895                         VM_CNT_INC(v_dfree);
896                 } else if ((object->flags & OBJ_DEAD) == 0) {
897                         if ((object->flags & OBJ_SWAP) != 0)
898                                 pageout_ok = disable_swap_pageouts == 0;
899                         else
900                                 pageout_ok = true;
901                         if (!pageout_ok) {
902                                 vm_page_launder(m);
903                                 goto skip_page;
904                         }
905
906                         /*
907                          * Form a cluster with adjacent, dirty pages from the
908                          * same object, and page out that entire cluster.
909                          *
910                          * The adjacent, dirty pages must also be in the
911                          * laundry.  However, their mappings are not checked
912                          * for new references.  Consequently, a recently
913                          * referenced page may be paged out.  However, that
914                          * page will not be prematurely reclaimed.  After page
915                          * out, the page will be placed in the inactive queue,
916                          * where any new references will be detected and the
917                          * page reactivated.
918                          */
919                         error = vm_pageout_clean(m, &numpagedout);
920                         if (error == 0) {
921                                 launder -= numpagedout;
922                                 ss.scanned += numpagedout;
923                         } else if (error == EDEADLK) {
924                                 pageout_lock_miss++;
925                                 vnodes_skipped++;
926                         }
927                         object = NULL;
928                 } else {
929 skip_page:
930                         vm_page_xunbusy(m);
931                 }
932         }
933         if (object != NULL) {
934                 VM_OBJECT_WUNLOCK(object);
935                 object = NULL;
936         }
937         vm_pagequeue_lock(pq);
938         vm_pageout_end_scan(&ss);
939         vm_pagequeue_unlock(pq);
940
941         if (launder > 0 && queue == PQ_UNSWAPPABLE) {
942                 queue = PQ_LAUNDRY;
943                 goto scan;
944         }
945
946         /*
947          * Wakeup the sync daemon if we skipped a vnode in a writeable object
948          * and we didn't launder enough pages.
949          */
950         if (vnodes_skipped > 0 && launder > 0)
951                 (void)speedup_syncer();
952
953         return (starting_target - launder);
954 }
955
956 /*
957  * Compute the integer square root.
958  */
959 static u_int
960 isqrt(u_int num)
961 {
962         u_int bit, root, tmp;
963
964         bit = num != 0 ? (1u << ((fls(num) - 1) & ~1)) : 0;
965         root = 0;
966         while (bit != 0) {
967                 tmp = root + bit;
968                 root >>= 1;
969                 if (num >= tmp) {
970                         num -= tmp;
971                         root += bit;
972                 }
973                 bit >>= 2;
974         }
975         return (root);
976 }
977
978 /*
979  * Perform the work of the laundry thread: periodically wake up and determine
980  * whether any pages need to be laundered.  If so, determine the number of pages
981  * that need to be laundered, and launder them.
982  */
983 static void
984 vm_pageout_laundry_worker(void *arg)
985 {
986         struct vm_domain *vmd;
987         struct vm_pagequeue *pq;
988         uint64_t nclean, ndirty, nfreed;
989         int domain, last_target, launder, shortfall, shortfall_cycle, target;
990         bool in_shortfall;
991
992         domain = (uintptr_t)arg;
993         vmd = VM_DOMAIN(domain);
994         pq = &vmd->vmd_pagequeues[PQ_LAUNDRY];
995         KASSERT(vmd->vmd_segs != 0, ("domain without segments"));
996
997         shortfall = 0;
998         in_shortfall = false;
999         shortfall_cycle = 0;
1000         last_target = target = 0;
1001         nfreed = 0;
1002
1003         /*
1004          * Calls to these handlers are serialized by the swap syscall lock.
1005          */
1006         (void)EVENTHANDLER_REGISTER(swapon, vm_pageout_swapon, vmd,
1007             EVENTHANDLER_PRI_ANY);
1008         (void)EVENTHANDLER_REGISTER(swapoff, vm_pageout_swapoff, vmd,
1009             EVENTHANDLER_PRI_ANY);
1010
1011         /*
1012          * The pageout laundry worker is never done, so loop forever.
1013          */
1014         for (;;) {
1015                 KASSERT(target >= 0, ("negative target %d", target));
1016                 KASSERT(shortfall_cycle >= 0,
1017                     ("negative cycle %d", shortfall_cycle));
1018                 launder = 0;
1019
1020                 /*
1021                  * First determine whether we need to launder pages to meet a
1022                  * shortage of free pages.
1023                  */
1024                 if (shortfall > 0) {
1025                         in_shortfall = true;
1026                         shortfall_cycle = VM_LAUNDER_RATE / VM_INACT_SCAN_RATE;
1027                         target = shortfall;
1028                 } else if (!in_shortfall)
1029                         goto trybackground;
1030                 else if (shortfall_cycle == 0 || vm_laundry_target(vmd) <= 0) {
1031                         /*
1032                          * We recently entered shortfall and began laundering
1033                          * pages.  If we have completed that laundering run
1034                          * (and we are no longer in shortfall) or we have met
1035                          * our laundry target through other activity, then we
1036                          * can stop laundering pages.
1037                          */
1038                         in_shortfall = false;
1039                         target = 0;
1040                         goto trybackground;
1041                 }
1042                 launder = target / shortfall_cycle--;
1043                 goto dolaundry;
1044
1045                 /*
1046                  * There's no immediate need to launder any pages; see if we
1047                  * meet the conditions to perform background laundering:
1048                  *
1049                  * 1. The ratio of dirty to clean inactive pages exceeds the
1050                  *    background laundering threshold, or
1051                  * 2. we haven't yet reached the target of the current
1052                  *    background laundering run.
1053                  *
1054                  * The background laundering threshold is not a constant.
1055                  * Instead, it is a slowly growing function of the number of
1056                  * clean pages freed by the page daemon since the last
1057                  * background laundering.  Thus, as the ratio of dirty to
1058                  * clean inactive pages grows, the amount of memory pressure
1059                  * required to trigger laundering decreases.  We ensure
1060                  * that the threshold is non-zero after an inactive queue
1061                  * scan, even if that scan failed to free a single clean page.
1062                  */
1063 trybackground:
1064                 nclean = vmd->vmd_free_count +
1065                     vmd->vmd_pagequeues[PQ_INACTIVE].pq_cnt;
1066                 ndirty = vmd->vmd_pagequeues[PQ_LAUNDRY].pq_cnt;
1067                 if (target == 0 && ndirty * isqrt(howmany(nfreed + 1,
1068                     vmd->vmd_free_target - vmd->vmd_free_min)) >= nclean) {
1069                         target = vmd->vmd_background_launder_target;
1070                 }
1071
1072                 /*
1073                  * We have a non-zero background laundering target.  If we've
1074                  * laundered up to our maximum without observing a page daemon
1075                  * request, just stop.  This is a safety belt that ensures we
1076                  * don't launder an excessive amount if memory pressure is low
1077                  * and the ratio of dirty to clean pages is large.  Otherwise,
1078                  * proceed at the background laundering rate.
1079                  */
1080                 if (target > 0) {
1081                         if (nfreed > 0) {
1082                                 nfreed = 0;
1083                                 last_target = target;
1084                         } else if (last_target - target >=
1085                             vm_background_launder_max * PAGE_SIZE / 1024) {
1086                                 target = 0;
1087                         }
1088                         launder = vm_background_launder_rate * PAGE_SIZE / 1024;
1089                         launder /= VM_LAUNDER_RATE;
1090                         if (launder > target)
1091                                 launder = target;
1092                 }
1093
1094 dolaundry:
1095                 if (launder > 0) {
1096                         /*
1097                          * Because of I/O clustering, the number of laundered
1098                          * pages could exceed "target" by the maximum size of
1099                          * a cluster minus one. 
1100                          */
1101                         target -= min(vm_pageout_launder(vmd, launder,
1102                             in_shortfall), target);
1103                         pause("laundp", hz / VM_LAUNDER_RATE);
1104                 }
1105
1106                 /*
1107                  * If we're not currently laundering pages and the page daemon
1108                  * hasn't posted a new request, sleep until the page daemon
1109                  * kicks us.
1110                  */
1111                 vm_pagequeue_lock(pq);
1112                 if (target == 0 && vmd->vmd_laundry_request == VM_LAUNDRY_IDLE)
1113                         (void)mtx_sleep(&vmd->vmd_laundry_request,
1114                             vm_pagequeue_lockptr(pq), PVM, "launds", 0);
1115
1116                 /*
1117                  * If the pagedaemon has indicated that it's in shortfall, start
1118                  * a shortfall laundering unless we're already in the middle of
1119                  * one.  This may preempt a background laundering.
1120                  */
1121                 if (vmd->vmd_laundry_request == VM_LAUNDRY_SHORTFALL &&
1122                     (!in_shortfall || shortfall_cycle == 0)) {
1123                         shortfall = vm_laundry_target(vmd) +
1124                             vmd->vmd_pageout_deficit;
1125                         target = 0;
1126                 } else
1127                         shortfall = 0;
1128
1129                 if (target == 0)
1130                         vmd->vmd_laundry_request = VM_LAUNDRY_IDLE;
1131                 nfreed += vmd->vmd_clean_pages_freed;
1132                 vmd->vmd_clean_pages_freed = 0;
1133                 vm_pagequeue_unlock(pq);
1134         }
1135 }
1136
1137 /*
1138  * Compute the number of pages we want to try to move from the
1139  * active queue to either the inactive or laundry queue.
1140  *
1141  * When scanning active pages during a shortage, we make clean pages
1142  * count more heavily towards the page shortage than dirty pages.
1143  * This is because dirty pages must be laundered before they can be
1144  * reused and thus have less utility when attempting to quickly
1145  * alleviate a free page shortage.  However, this weighting also
1146  * causes the scan to deactivate dirty pages more aggressively,
1147  * improving the effectiveness of clustering.
1148  */
1149 static int
1150 vm_pageout_active_target(struct vm_domain *vmd)
1151 {
1152         int shortage;
1153
1154         shortage = vmd->vmd_inactive_target + vm_paging_target(vmd) -
1155             (vmd->vmd_pagequeues[PQ_INACTIVE].pq_cnt +
1156             vmd->vmd_pagequeues[PQ_LAUNDRY].pq_cnt / act_scan_laundry_weight);
1157         shortage *= act_scan_laundry_weight;
1158         return (shortage);
1159 }
1160
1161 /*
1162  * Scan the active queue.  If there is no shortage of inactive pages, scan a
1163  * small portion of the queue in order to maintain quasi-LRU.
1164  */
1165 static void
1166 vm_pageout_scan_active(struct vm_domain *vmd, int page_shortage)
1167 {
1168         struct scan_state ss;
1169         vm_object_t object;
1170         vm_page_t m, marker;
1171         struct vm_pagequeue *pq;
1172         vm_page_astate_t old, new;
1173         long min_scan;
1174         int act_delta, max_scan, ps_delta, refs, scan_tick;
1175         uint8_t nqueue;
1176
1177         marker = &vmd->vmd_markers[PQ_ACTIVE];
1178         pq = &vmd->vmd_pagequeues[PQ_ACTIVE];
1179         vm_pagequeue_lock(pq);
1180
1181         /*
1182          * If we're just idle polling attempt to visit every
1183          * active page within 'update_period' seconds.
1184          */
1185         scan_tick = ticks;
1186         if (vm_pageout_update_period != 0) {
1187                 min_scan = pq->pq_cnt;
1188                 min_scan *= scan_tick - vmd->vmd_last_active_scan;
1189                 min_scan /= hz * vm_pageout_update_period;
1190         } else
1191                 min_scan = 0;
1192         if (min_scan > 0 || (page_shortage > 0 && pq->pq_cnt > 0))
1193                 vmd->vmd_last_active_scan = scan_tick;
1194
1195         /*
1196          * Scan the active queue for pages that can be deactivated.  Update
1197          * the per-page activity counter and use it to identify deactivation
1198          * candidates.  Held pages may be deactivated.
1199          *
1200          * To avoid requeuing each page that remains in the active queue, we
1201          * implement the CLOCK algorithm.  To keep the implementation of the
1202          * enqueue operation consistent for all page queues, we use two hands,
1203          * represented by marker pages. Scans begin at the first hand, which
1204          * precedes the second hand in the queue.  When the two hands meet,
1205          * they are moved back to the head and tail of the queue, respectively,
1206          * and scanning resumes.
1207          */
1208         max_scan = page_shortage > 0 ? pq->pq_cnt : min_scan;
1209 act_scan:
1210         vm_pageout_init_scan(&ss, pq, marker, &vmd->vmd_clock[0], max_scan);
1211         while ((m = vm_pageout_next(&ss, false)) != NULL) {
1212                 if (__predict_false(m == &vmd->vmd_clock[1])) {
1213                         vm_pagequeue_lock(pq);
1214                         TAILQ_REMOVE(&pq->pq_pl, &vmd->vmd_clock[0], plinks.q);
1215                         TAILQ_REMOVE(&pq->pq_pl, &vmd->vmd_clock[1], plinks.q);
1216                         TAILQ_INSERT_HEAD(&pq->pq_pl, &vmd->vmd_clock[0],
1217                             plinks.q);
1218                         TAILQ_INSERT_TAIL(&pq->pq_pl, &vmd->vmd_clock[1],
1219                             plinks.q);
1220                         max_scan -= ss.scanned;
1221                         vm_pageout_end_scan(&ss);
1222                         goto act_scan;
1223                 }
1224                 if (__predict_false((m->flags & PG_MARKER) != 0))
1225                         continue;
1226
1227                 /*
1228                  * Don't touch a page that was removed from the queue after the
1229                  * page queue lock was released.  Otherwise, ensure that any
1230                  * pending queue operations, such as dequeues for wired pages,
1231                  * are handled.
1232                  */
1233                 if (vm_pageout_defer(m, PQ_ACTIVE, true))
1234                         continue;
1235
1236                 /*
1237                  * A page's object pointer may be set to NULL before
1238                  * the object lock is acquired.
1239                  */
1240                 object = atomic_load_ptr(&m->object);
1241                 if (__predict_false(object == NULL))
1242                         /*
1243                          * The page has been removed from its object.
1244                          */
1245                         continue;
1246
1247                 /* Deferred free of swap space. */
1248                 if ((m->a.flags & PGA_SWAP_FREE) != 0 &&
1249                     VM_OBJECT_TRYWLOCK(object)) {
1250                         if (m->object == object)
1251                                 vm_pager_page_unswapped(m);
1252                         VM_OBJECT_WUNLOCK(object);
1253                 }
1254
1255                 /*
1256                  * Check to see "how much" the page has been used.
1257                  *
1258                  * Test PGA_REFERENCED after calling pmap_ts_referenced() so
1259                  * that a reference from a concurrently destroyed mapping is
1260                  * observed here and now.
1261                  *
1262                  * Perform an unsynchronized object ref count check.  While
1263                  * the page lock ensures that the page is not reallocated to
1264                  * another object, in particular, one with unmanaged mappings
1265                  * that cannot support pmap_ts_referenced(), two races are,
1266                  * nonetheless, possible:
1267                  * 1) The count was transitioning to zero, but we saw a non-
1268                  *    zero value.  pmap_ts_referenced() will return zero
1269                  *    because the page is not mapped.
1270                  * 2) The count was transitioning to one, but we saw zero.
1271                  *    This race delays the detection of a new reference.  At
1272                  *    worst, we will deactivate and reactivate the page.
1273                  */
1274                 refs = object->ref_count != 0 ? pmap_ts_referenced(m) : 0;
1275
1276                 old = vm_page_astate_load(m);
1277                 do {
1278                         /*
1279                          * Check to see if the page has been removed from the
1280                          * queue since the first such check.  Leave it alone if
1281                          * so, discarding any references collected by
1282                          * pmap_ts_referenced().
1283                          */
1284                         if (__predict_false(_vm_page_queue(old) == PQ_NONE)) {
1285                                 ps_delta = 0;
1286                                 break;
1287                         }
1288
1289                         /*
1290                          * Advance or decay the act_count based on recent usage.
1291                          */
1292                         new = old;
1293                         act_delta = refs;
1294                         if ((old.flags & PGA_REFERENCED) != 0) {
1295                                 new.flags &= ~PGA_REFERENCED;
1296                                 act_delta++;
1297                         }
1298                         if (act_delta != 0) {
1299                                 new.act_count += ACT_ADVANCE + act_delta;
1300                                 if (new.act_count > ACT_MAX)
1301                                         new.act_count = ACT_MAX;
1302                         } else {
1303                                 new.act_count -= min(new.act_count,
1304                                     ACT_DECLINE);
1305                         }
1306
1307                         if (new.act_count > 0) {
1308                                 /*
1309                                  * Adjust the activation count and keep the page
1310                                  * in the active queue.  The count might be left
1311                                  * unchanged if it is saturated.  The page may
1312                                  * have been moved to a different queue since we
1313                                  * started the scan, in which case we move it
1314                                  * back.
1315                                  */
1316                                 ps_delta = 0;
1317                                 if (old.queue != PQ_ACTIVE) {
1318                                         new.flags &= ~PGA_QUEUE_OP_MASK;
1319                                         new.flags |= PGA_REQUEUE;
1320                                         new.queue = PQ_ACTIVE;
1321                                 }
1322                         } else {
1323                                 /*
1324                                  * When not short for inactive pages, let dirty
1325                                  * pages go through the inactive queue before
1326                                  * moving to the laundry queue.  This gives them
1327                                  * some extra time to be reactivated,
1328                                  * potentially avoiding an expensive pageout.
1329                                  * However, during a page shortage, the inactive
1330                                  * queue is necessarily small, and so dirty
1331                                  * pages would only spend a trivial amount of
1332                                  * time in the inactive queue.  Therefore, we
1333                                  * might as well place them directly in the
1334                                  * laundry queue to reduce queuing overhead.
1335                                  *
1336                                  * Calling vm_page_test_dirty() here would
1337                                  * require acquisition of the object's write
1338                                  * lock.  However, during a page shortage,
1339                                  * directing dirty pages into the laundry queue
1340                                  * is only an optimization and not a
1341                                  * requirement.  Therefore, we simply rely on
1342                                  * the opportunistic updates to the page's dirty
1343                                  * field by the pmap.
1344                                  */
1345                                 if (page_shortage <= 0) {
1346                                         nqueue = PQ_INACTIVE;
1347                                         ps_delta = 0;
1348                                 } else if (m->dirty == 0) {
1349                                         nqueue = PQ_INACTIVE;
1350                                         ps_delta = act_scan_laundry_weight;
1351                                 } else {
1352                                         nqueue = PQ_LAUNDRY;
1353                                         ps_delta = 1;
1354                                 }
1355
1356                                 new.flags &= ~PGA_QUEUE_OP_MASK;
1357                                 new.flags |= PGA_REQUEUE;
1358                                 new.queue = nqueue;
1359                         }
1360                 } while (!vm_page_pqstate_commit(m, &old, new));
1361
1362                 page_shortage -= ps_delta;
1363         }
1364         vm_pagequeue_lock(pq);
1365         TAILQ_REMOVE(&pq->pq_pl, &vmd->vmd_clock[0], plinks.q);
1366         TAILQ_INSERT_AFTER(&pq->pq_pl, marker, &vmd->vmd_clock[0], plinks.q);
1367         vm_pageout_end_scan(&ss);
1368         vm_pagequeue_unlock(pq);
1369 }
1370
1371 static int
1372 vm_pageout_reinsert_inactive_page(struct vm_pagequeue *pq, vm_page_t marker,
1373     vm_page_t m)
1374 {
1375         vm_page_astate_t as;
1376
1377         vm_pagequeue_assert_locked(pq);
1378
1379         as = vm_page_astate_load(m);
1380         if (as.queue != PQ_INACTIVE || (as.flags & PGA_ENQUEUED) != 0)
1381                 return (0);
1382         vm_page_aflag_set(m, PGA_ENQUEUED);
1383         TAILQ_INSERT_BEFORE(marker, m, plinks.q);
1384         return (1);
1385 }
1386
1387 /*
1388  * Re-add stuck pages to the inactive queue.  We will examine them again
1389  * during the next scan.  If the queue state of a page has changed since
1390  * it was physically removed from the page queue in
1391  * vm_pageout_collect_batch(), don't do anything with that page.
1392  */
1393 static void
1394 vm_pageout_reinsert_inactive(struct scan_state *ss, struct vm_batchqueue *bq,
1395     vm_page_t m)
1396 {
1397         struct vm_pagequeue *pq;
1398         vm_page_t marker;
1399         int delta;
1400
1401         delta = 0;
1402         marker = ss->marker;
1403         pq = ss->pq;
1404
1405         if (m != NULL) {
1406                 if (vm_batchqueue_insert(bq, m) != 0)
1407                         return;
1408                 vm_pagequeue_lock(pq);
1409                 delta += vm_pageout_reinsert_inactive_page(pq, marker, m);
1410         } else
1411                 vm_pagequeue_lock(pq);
1412         while ((m = vm_batchqueue_pop(bq)) != NULL)
1413                 delta += vm_pageout_reinsert_inactive_page(pq, marker, m);
1414         vm_pagequeue_cnt_add(pq, delta);
1415         vm_pagequeue_unlock(pq);
1416         vm_batchqueue_init(bq);
1417 }
1418
1419 static void
1420 vm_pageout_scan_inactive(struct vm_domain *vmd, int page_shortage)
1421 {
1422         struct timeval start, end;
1423         struct scan_state ss;
1424         struct vm_batchqueue rq;
1425         struct vm_page marker_page;
1426         vm_page_t m, marker;
1427         struct vm_pagequeue *pq;
1428         vm_object_t object;
1429         vm_page_astate_t old, new;
1430         int act_delta, addl_page_shortage, starting_page_shortage, refs;
1431
1432         object = NULL;
1433         vm_batchqueue_init(&rq);
1434         getmicrouptime(&start);
1435
1436         /*
1437          * The addl_page_shortage is an estimate of the number of temporarily
1438          * stuck pages in the inactive queue.  In other words, the
1439          * number of pages from the inactive count that should be
1440          * discounted in setting the target for the active queue scan.
1441          */
1442         addl_page_shortage = 0;
1443
1444         /*
1445          * Start scanning the inactive queue for pages that we can free.  The
1446          * scan will stop when we reach the target or we have scanned the
1447          * entire queue.  (Note that m->a.act_count is not used to make
1448          * decisions for the inactive queue, only for the active queue.)
1449          */
1450         starting_page_shortage = page_shortage;
1451         marker = &marker_page;
1452         vm_page_init_marker(marker, PQ_INACTIVE, 0);
1453         pq = &vmd->vmd_pagequeues[PQ_INACTIVE];
1454         vm_pagequeue_lock(pq);
1455         vm_pageout_init_scan(&ss, pq, marker, NULL, pq->pq_cnt);
1456         while (page_shortage > 0 && (m = vm_pageout_next(&ss, true)) != NULL) {
1457                 KASSERT((m->flags & PG_MARKER) == 0,
1458                     ("marker page %p was dequeued", m));
1459
1460                 /*
1461                  * Don't touch a page that was removed from the queue after the
1462                  * page queue lock was released.  Otherwise, ensure that any
1463                  * pending queue operations, such as dequeues for wired pages,
1464                  * are handled.
1465                  */
1466                 if (vm_pageout_defer(m, PQ_INACTIVE, false))
1467                         continue;
1468
1469                 /*
1470                  * Lock the page's object.
1471                  */
1472                 if (object == NULL || object != m->object) {
1473                         if (object != NULL)
1474                                 VM_OBJECT_WUNLOCK(object);
1475                         object = atomic_load_ptr(&m->object);
1476                         if (__predict_false(object == NULL))
1477                                 /* The page is being freed by another thread. */
1478                                 continue;
1479
1480                         /* Depends on type-stability. */
1481                         VM_OBJECT_WLOCK(object);
1482                         if (__predict_false(m->object != object)) {
1483                                 VM_OBJECT_WUNLOCK(object);
1484                                 object = NULL;
1485                                 goto reinsert;
1486                         }
1487                 }
1488
1489                 if (vm_page_tryxbusy(m) == 0) {
1490                         /*
1491                          * Don't mess with busy pages.  Leave them at
1492                          * the front of the queue.  Most likely, they
1493                          * are being paged out and will leave the
1494                          * queue shortly after the scan finishes.  So,
1495                          * they ought to be discounted from the
1496                          * inactive count.
1497                          */
1498                         addl_page_shortage++;
1499                         goto reinsert;
1500                 }
1501
1502                 /* Deferred free of swap space. */
1503                 if ((m->a.flags & PGA_SWAP_FREE) != 0)
1504                         vm_pager_page_unswapped(m);
1505
1506                 /*
1507                  * Check for wirings now that we hold the object lock and have
1508                  * exclusively busied the page.  If the page is mapped, it may
1509                  * still be wired by pmap lookups.  The call to
1510                  * vm_page_try_remove_all() below atomically checks for such
1511                  * wirings and removes mappings.  If the page is unmapped, the
1512                  * wire count is guaranteed not to increase after this check.
1513                  */
1514                 if (__predict_false(vm_page_wired(m)))
1515                         goto skip_page;
1516
1517                 /*
1518                  * Invalid pages can be easily freed. They cannot be
1519                  * mapped, vm_page_free() asserts this.
1520                  */
1521                 if (vm_page_none_valid(m))
1522                         goto free_page;
1523
1524                 refs = object->ref_count != 0 ? pmap_ts_referenced(m) : 0;
1525
1526                 for (old = vm_page_astate_load(m);;) {
1527                         /*
1528                          * Check to see if the page has been removed from the
1529                          * queue since the first such check.  Leave it alone if
1530                          * so, discarding any references collected by
1531                          * pmap_ts_referenced().
1532                          */
1533                         if (__predict_false(_vm_page_queue(old) == PQ_NONE))
1534                                 goto skip_page;
1535
1536                         new = old;
1537                         act_delta = refs;
1538                         if ((old.flags & PGA_REFERENCED) != 0) {
1539                                 new.flags &= ~PGA_REFERENCED;
1540                                 act_delta++;
1541                         }
1542                         if (act_delta == 0) {
1543                                 ;
1544                         } else if (object->ref_count != 0) {
1545                                 /*
1546                                  * Increase the activation count if the
1547                                  * page was referenced while in the
1548                                  * inactive queue.  This makes it less
1549                                  * likely that the page will be returned
1550                                  * prematurely to the inactive queue.
1551                                  */
1552                                 new.act_count += ACT_ADVANCE +
1553                                     act_delta;
1554                                 if (new.act_count > ACT_MAX)
1555                                         new.act_count = ACT_MAX;
1556
1557                                 new.flags &= ~PGA_QUEUE_OP_MASK;
1558                                 new.flags |= PGA_REQUEUE;
1559                                 new.queue = PQ_ACTIVE;
1560                                 if (!vm_page_pqstate_commit(m, &old, new))
1561                                         continue;
1562
1563                                 VM_CNT_INC(v_reactivated);
1564                                 goto skip_page;
1565                         } else if ((object->flags & OBJ_DEAD) == 0) {
1566                                 new.queue = PQ_INACTIVE;
1567                                 new.flags |= PGA_REQUEUE;
1568                                 if (!vm_page_pqstate_commit(m, &old, new))
1569                                         continue;
1570                                 goto skip_page;
1571                         }
1572                         break;
1573                 }
1574
1575                 /*
1576                  * If the page appears to be clean at the machine-independent
1577                  * layer, then remove all of its mappings from the pmap in
1578                  * anticipation of freeing it.  If, however, any of the page's
1579                  * mappings allow write access, then the page may still be
1580                  * modified until the last of those mappings are removed.
1581                  */
1582                 if (object->ref_count != 0) {
1583                         vm_page_test_dirty(m);
1584                         if (m->dirty == 0 && !vm_page_try_remove_all(m))
1585                                 goto skip_page;
1586                 }
1587
1588                 /*
1589                  * Clean pages can be freed, but dirty pages must be sent back
1590                  * to the laundry, unless they belong to a dead object.
1591                  * Requeueing dirty pages from dead objects is pointless, as
1592                  * they are being paged out and freed by the thread that
1593                  * destroyed the object.
1594                  */
1595                 if (m->dirty == 0) {
1596 free_page:
1597                         /*
1598                          * Now we are guaranteed that no other threads are
1599                          * manipulating the page, check for a last-second
1600                          * reference that would save it from doom.
1601                          */
1602                         if (vm_pageout_defer(m, PQ_INACTIVE, false))
1603                                 goto skip_page;
1604
1605                         /*
1606                          * Because we dequeued the page and have already checked
1607                          * for pending dequeue and enqueue requests, we can
1608                          * safely disassociate the page from the inactive queue
1609                          * without holding the queue lock.
1610                          */
1611                         m->a.queue = PQ_NONE;
1612                         vm_page_free(m);
1613                         page_shortage--;
1614                         continue;
1615                 }
1616                 if ((object->flags & OBJ_DEAD) == 0)
1617                         vm_page_launder(m);
1618 skip_page:
1619                 vm_page_xunbusy(m);
1620                 continue;
1621 reinsert:
1622                 vm_pageout_reinsert_inactive(&ss, &rq, m);
1623         }
1624         if (object != NULL)
1625                 VM_OBJECT_WUNLOCK(object);
1626         vm_pageout_reinsert_inactive(&ss, &rq, NULL);
1627         vm_pageout_reinsert_inactive(&ss, &ss.bq, NULL);
1628         vm_pagequeue_lock(pq);
1629         vm_pageout_end_scan(&ss);
1630         vm_pagequeue_unlock(pq);
1631
1632         /*
1633          * Record the remaining shortage and the progress and rate it was made.
1634          */
1635         atomic_add_int(&vmd->vmd_addl_shortage, addl_page_shortage);
1636         getmicrouptime(&end);
1637         timevalsub(&end, &start);
1638         atomic_add_int(&vmd->vmd_inactive_us,
1639             end.tv_sec * 1000000 + end.tv_usec);
1640         atomic_add_int(&vmd->vmd_inactive_freed,
1641             starting_page_shortage - page_shortage);
1642 }
1643
1644 /*
1645  * Dispatch a number of inactive threads according to load and collect the
1646  * results to present a coherent view of paging activity on this domain.
1647  */
1648 static int
1649 vm_pageout_inactive_dispatch(struct vm_domain *vmd, int shortage)
1650 {
1651         u_int freed, pps, slop, threads, us;
1652
1653         vmd->vmd_inactive_shortage = shortage;
1654         slop = 0;
1655
1656         /*
1657          * If we have more work than we can do in a quarter of our interval, we
1658          * fire off multiple threads to process it.
1659          */
1660         threads = vmd->vmd_inactive_threads;
1661         if (threads > 1 && vmd->vmd_inactive_pps != 0 &&
1662             shortage > vmd->vmd_inactive_pps / VM_INACT_SCAN_RATE / 4) {
1663                 vmd->vmd_inactive_shortage /= threads;
1664                 slop = shortage % threads;
1665                 vm_domain_pageout_lock(vmd);
1666                 blockcount_acquire(&vmd->vmd_inactive_starting, threads - 1);
1667                 blockcount_acquire(&vmd->vmd_inactive_running, threads - 1);
1668                 wakeup(&vmd->vmd_inactive_shortage);
1669                 vm_domain_pageout_unlock(vmd);
1670         }
1671
1672         /* Run the local thread scan. */
1673         vm_pageout_scan_inactive(vmd, vmd->vmd_inactive_shortage + slop);
1674
1675         /*
1676          * Block until helper threads report results and then accumulate
1677          * totals.
1678          */
1679         blockcount_wait(&vmd->vmd_inactive_running, NULL, "vmpoid", PVM);
1680         freed = atomic_readandclear_int(&vmd->vmd_inactive_freed);
1681         VM_CNT_ADD(v_dfree, freed);
1682
1683         /*
1684          * Calculate the per-thread paging rate with an exponential decay of
1685          * prior results.  Careful to avoid integer rounding errors with large
1686          * us values.
1687          */
1688         us = max(atomic_readandclear_int(&vmd->vmd_inactive_us), 1);
1689         if (us > 1000000)
1690                 /* Keep rounding to tenths */
1691                 pps = (freed * 10) / ((us * 10) / 1000000);
1692         else
1693                 pps = (1000000 / us) * freed;
1694         vmd->vmd_inactive_pps = (vmd->vmd_inactive_pps / 2) + (pps / 2);
1695
1696         return (shortage - freed);
1697 }
1698
1699 /*
1700  * Attempt to reclaim the requested number of pages from the inactive queue.
1701  * Returns true if the shortage was addressed.
1702  */
1703 static int
1704 vm_pageout_inactive(struct vm_domain *vmd, int shortage, int *addl_shortage)
1705 {
1706         struct vm_pagequeue *pq;
1707         u_int addl_page_shortage, deficit, page_shortage;
1708         u_int starting_page_shortage;
1709
1710         /*
1711          * vmd_pageout_deficit counts the number of pages requested in
1712          * allocations that failed because of a free page shortage.  We assume
1713          * that the allocations will be reattempted and thus include the deficit
1714          * in our scan target.
1715          */
1716         deficit = atomic_readandclear_int(&vmd->vmd_pageout_deficit);
1717         starting_page_shortage = shortage + deficit;
1718
1719         /*
1720          * Run the inactive scan on as many threads as is necessary.
1721          */
1722         page_shortage = vm_pageout_inactive_dispatch(vmd, starting_page_shortage);
1723         addl_page_shortage = atomic_readandclear_int(&vmd->vmd_addl_shortage);
1724
1725         /*
1726          * Wake up the laundry thread so that it can perform any needed
1727          * laundering.  If we didn't meet our target, we're in shortfall and
1728          * need to launder more aggressively.  If PQ_LAUNDRY is empty and no
1729          * swap devices are configured, the laundry thread has no work to do, so
1730          * don't bother waking it up.
1731          *
1732          * The laundry thread uses the number of inactive queue scans elapsed
1733          * since the last laundering to determine whether to launder again, so
1734          * keep count.
1735          */
1736         if (starting_page_shortage > 0) {
1737                 pq = &vmd->vmd_pagequeues[PQ_LAUNDRY];
1738                 vm_pagequeue_lock(pq);
1739                 if (vmd->vmd_laundry_request == VM_LAUNDRY_IDLE &&
1740                     (pq->pq_cnt > 0 || atomic_load_acq_int(&swapdev_enabled))) {
1741                         if (page_shortage > 0) {
1742                                 vmd->vmd_laundry_request = VM_LAUNDRY_SHORTFALL;
1743                                 VM_CNT_INC(v_pdshortfalls);
1744                         } else if (vmd->vmd_laundry_request !=
1745                             VM_LAUNDRY_SHORTFALL)
1746                                 vmd->vmd_laundry_request =
1747                                     VM_LAUNDRY_BACKGROUND;
1748                         wakeup(&vmd->vmd_laundry_request);
1749                 }
1750                 vmd->vmd_clean_pages_freed +=
1751                     starting_page_shortage - page_shortage;
1752                 vm_pagequeue_unlock(pq);
1753         }
1754
1755         /*
1756          * Wakeup the swapout daemon if we didn't free the targeted number of
1757          * pages.
1758          */
1759         if (page_shortage > 0)
1760                 vm_swapout_run();
1761
1762         /*
1763          * If the inactive queue scan fails repeatedly to meet its
1764          * target, kill the largest process.
1765          */
1766         vm_pageout_mightbe_oom(vmd, page_shortage, starting_page_shortage);
1767
1768         /*
1769          * Reclaim pages by swapping out idle processes, if configured to do so.
1770          */
1771         vm_swapout_run_idle();
1772
1773         /*
1774          * See the description of addl_page_shortage above.
1775          */
1776         *addl_shortage = addl_page_shortage + deficit;
1777
1778         return (page_shortage <= 0);
1779 }
1780
1781 static int vm_pageout_oom_vote;
1782
1783 /*
1784  * The pagedaemon threads randlomly select one to perform the
1785  * OOM.  Trying to kill processes before all pagedaemons
1786  * failed to reach free target is premature.
1787  */
1788 static void
1789 vm_pageout_mightbe_oom(struct vm_domain *vmd, int page_shortage,
1790     int starting_page_shortage)
1791 {
1792         int old_vote;
1793
1794         if (starting_page_shortage <= 0 || starting_page_shortage !=
1795             page_shortage)
1796                 vmd->vmd_oom_seq = 0;
1797         else
1798                 vmd->vmd_oom_seq++;
1799         if (vmd->vmd_oom_seq < vm_pageout_oom_seq) {
1800                 if (vmd->vmd_oom) {
1801                         vmd->vmd_oom = FALSE;
1802                         atomic_subtract_int(&vm_pageout_oom_vote, 1);
1803                 }
1804                 return;
1805         }
1806
1807         /*
1808          * Do not follow the call sequence until OOM condition is
1809          * cleared.
1810          */
1811         vmd->vmd_oom_seq = 0;
1812
1813         if (vmd->vmd_oom)
1814                 return;
1815
1816         vmd->vmd_oom = TRUE;
1817         old_vote = atomic_fetchadd_int(&vm_pageout_oom_vote, 1);
1818         if (old_vote != vm_ndomains - 1)
1819                 return;
1820
1821         /*
1822          * The current pagedaemon thread is the last in the quorum to
1823          * start OOM.  Initiate the selection and signaling of the
1824          * victim.
1825          */
1826         vm_pageout_oom(VM_OOM_MEM);
1827
1828         /*
1829          * After one round of OOM terror, recall our vote.  On the
1830          * next pass, current pagedaemon would vote again if the low
1831          * memory condition is still there, due to vmd_oom being
1832          * false.
1833          */
1834         vmd->vmd_oom = FALSE;
1835         atomic_subtract_int(&vm_pageout_oom_vote, 1);
1836 }
1837
1838 /*
1839  * The OOM killer is the page daemon's action of last resort when
1840  * memory allocation requests have been stalled for a prolonged period
1841  * of time because it cannot reclaim memory.  This function computes
1842  * the approximate number of physical pages that could be reclaimed if
1843  * the specified address space is destroyed.
1844  *
1845  * Private, anonymous memory owned by the address space is the
1846  * principal resource that we expect to recover after an OOM kill.
1847  * Since the physical pages mapped by the address space's COW entries
1848  * are typically shared pages, they are unlikely to be released and so
1849  * they are not counted.
1850  *
1851  * To get to the point where the page daemon runs the OOM killer, its
1852  * efforts to write-back vnode-backed pages may have stalled.  This
1853  * could be caused by a memory allocation deadlock in the write path
1854  * that might be resolved by an OOM kill.  Therefore, physical pages
1855  * belonging to vnode-backed objects are counted, because they might
1856  * be freed without being written out first if the address space holds
1857  * the last reference to an unlinked vnode.
1858  *
1859  * Similarly, physical pages belonging to OBJT_PHYS objects are
1860  * counted because the address space might hold the last reference to
1861  * the object.
1862  */
1863 static long
1864 vm_pageout_oom_pagecount(struct vmspace *vmspace)
1865 {
1866         vm_map_t map;
1867         vm_map_entry_t entry;
1868         vm_object_t obj;
1869         long res;
1870
1871         map = &vmspace->vm_map;
1872         KASSERT(!map->system_map, ("system map"));
1873         sx_assert(&map->lock, SA_LOCKED);
1874         res = 0;
1875         VM_MAP_ENTRY_FOREACH(entry, map) {
1876                 if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) != 0)
1877                         continue;
1878                 obj = entry->object.vm_object;
1879                 if (obj == NULL)
1880                         continue;
1881                 if ((entry->eflags & MAP_ENTRY_NEEDS_COPY) != 0 &&
1882                     obj->ref_count != 1)
1883                         continue;
1884                 if (obj->type == OBJT_PHYS || obj->type == OBJT_VNODE ||
1885                     (obj->flags & OBJ_SWAP) != 0)
1886                         res += obj->resident_page_count;
1887         }
1888         return (res);
1889 }
1890
1891 static int vm_oom_ratelim_last;
1892 static int vm_oom_pf_secs = 10;
1893 SYSCTL_INT(_vm, OID_AUTO, oom_pf_secs, CTLFLAG_RWTUN, &vm_oom_pf_secs, 0,
1894     "");
1895 static struct mtx vm_oom_ratelim_mtx;
1896
1897 void
1898 vm_pageout_oom(int shortage)
1899 {
1900         const char *reason;
1901         struct proc *p, *bigproc;
1902         vm_offset_t size, bigsize;
1903         struct thread *td;
1904         struct vmspace *vm;
1905         int now;
1906         bool breakout;
1907
1908         /*
1909          * For OOM requests originating from vm_fault(), there is a high
1910          * chance that a single large process faults simultaneously in
1911          * several threads.  Also, on an active system running many
1912          * processes of middle-size, like buildworld, all of them
1913          * could fault almost simultaneously as well.
1914          *
1915          * To avoid killing too many processes, rate-limit OOMs
1916          * initiated by vm_fault() time-outs on the waits for free
1917          * pages.
1918          */
1919         mtx_lock(&vm_oom_ratelim_mtx);
1920         now = ticks;
1921         if (shortage == VM_OOM_MEM_PF &&
1922             (u_int)(now - vm_oom_ratelim_last) < hz * vm_oom_pf_secs) {
1923                 mtx_unlock(&vm_oom_ratelim_mtx);
1924                 return;
1925         }
1926         vm_oom_ratelim_last = now;
1927         mtx_unlock(&vm_oom_ratelim_mtx);
1928
1929         /*
1930          * We keep the process bigproc locked once we find it to keep anyone
1931          * from messing with it; however, there is a possibility of
1932          * deadlock if process B is bigproc and one of its child processes
1933          * attempts to propagate a signal to B while we are waiting for A's
1934          * lock while walking this list.  To avoid this, we don't block on
1935          * the process lock but just skip a process if it is already locked.
1936          */
1937         bigproc = NULL;
1938         bigsize = 0;
1939         sx_slock(&allproc_lock);
1940         FOREACH_PROC_IN_SYSTEM(p) {
1941                 PROC_LOCK(p);
1942
1943                 /*
1944                  * If this is a system, protected or killed process, skip it.
1945                  */
1946                 if (p->p_state != PRS_NORMAL || (p->p_flag & (P_INEXEC |
1947                     P_PROTECTED | P_SYSTEM | P_WEXIT)) != 0 ||
1948                     p->p_pid == 1 || P_KILLED(p) ||
1949                     (p->p_pid < 48 && swap_pager_avail != 0)) {
1950                         PROC_UNLOCK(p);
1951                         continue;
1952                 }
1953                 /*
1954                  * If the process is in a non-running type state,
1955                  * don't touch it.  Check all the threads individually.
1956                  */
1957                 breakout = false;
1958                 FOREACH_THREAD_IN_PROC(p, td) {
1959                         thread_lock(td);
1960                         if (!TD_ON_RUNQ(td) &&
1961                             !TD_IS_RUNNING(td) &&
1962                             !TD_IS_SLEEPING(td) &&
1963                             !TD_IS_SUSPENDED(td) &&
1964                             !TD_IS_SWAPPED(td)) {
1965                                 thread_unlock(td);
1966                                 breakout = true;
1967                                 break;
1968                         }
1969                         thread_unlock(td);
1970                 }
1971                 if (breakout) {
1972                         PROC_UNLOCK(p);
1973                         continue;
1974                 }
1975                 /*
1976                  * get the process size
1977                  */
1978                 vm = vmspace_acquire_ref(p);
1979                 if (vm == NULL) {
1980                         PROC_UNLOCK(p);
1981                         continue;
1982                 }
1983                 _PHOLD_LITE(p);
1984                 PROC_UNLOCK(p);
1985                 sx_sunlock(&allproc_lock);
1986                 if (!vm_map_trylock_read(&vm->vm_map)) {
1987                         vmspace_free(vm);
1988                         sx_slock(&allproc_lock);
1989                         PRELE(p);
1990                         continue;
1991                 }
1992                 size = vmspace_swap_count(vm);
1993                 if (shortage == VM_OOM_MEM || shortage == VM_OOM_MEM_PF)
1994                         size += vm_pageout_oom_pagecount(vm);
1995                 vm_map_unlock_read(&vm->vm_map);
1996                 vmspace_free(vm);
1997                 sx_slock(&allproc_lock);
1998
1999                 /*
2000                  * If this process is bigger than the biggest one,
2001                  * remember it.
2002                  */
2003                 if (size > bigsize) {
2004                         if (bigproc != NULL)
2005                                 PRELE(bigproc);
2006                         bigproc = p;
2007                         bigsize = size;
2008                 } else {
2009                         PRELE(p);
2010                 }
2011         }
2012         sx_sunlock(&allproc_lock);
2013
2014         if (bigproc != NULL) {
2015                 switch (shortage) {
2016                 case VM_OOM_MEM:
2017                         reason = "failed to reclaim memory";
2018                         break;
2019                 case VM_OOM_MEM_PF:
2020                         reason = "a thread waited too long to allocate a page";
2021                         break;
2022                 case VM_OOM_SWAPZ:
2023                         reason = "out of swap space";
2024                         break;
2025                 default:
2026                         panic("unknown OOM reason %d", shortage);
2027                 }
2028                 if (vm_panic_on_oom != 0 && --vm_panic_on_oom == 0)
2029                         panic("%s", reason);
2030                 PROC_LOCK(bigproc);
2031                 killproc(bigproc, reason);
2032                 sched_nice(bigproc, PRIO_MIN);
2033                 _PRELE(bigproc);
2034                 PROC_UNLOCK(bigproc);
2035         }
2036 }
2037
2038 /*
2039  * Signal a free page shortage to subsystems that have registered an event
2040  * handler.  Reclaim memory from UMA in the event of a severe shortage.
2041  * Return true if the free page count should be re-evaluated.
2042  */
2043 static bool
2044 vm_pageout_lowmem(void)
2045 {
2046         static int lowmem_ticks = 0;
2047         int last;
2048         bool ret;
2049
2050         ret = false;
2051
2052         last = atomic_load_int(&lowmem_ticks);
2053         while ((u_int)(ticks - last) / hz >= lowmem_period) {
2054                 if (atomic_fcmpset_int(&lowmem_ticks, &last, ticks) == 0)
2055                         continue;
2056
2057                 /*
2058                  * Decrease registered cache sizes.
2059                  */
2060                 SDT_PROBE0(vm, , , vm__lowmem_scan);
2061                 EVENTHANDLER_INVOKE(vm_lowmem, VM_LOW_PAGES);
2062
2063                 /*
2064                  * We do this explicitly after the caches have been
2065                  * drained above.
2066                  */
2067                 uma_reclaim(UMA_RECLAIM_TRIM);
2068                 ret = true;
2069                 break;
2070         }
2071
2072         /*
2073          * Kick off an asynchronous reclaim of cached memory if one of the
2074          * page daemons is failing to keep up with demand.  Use the "severe"
2075          * threshold instead of "min" to ensure that we do not blow away the
2076          * caches if a subset of the NUMA domains are depleted by kernel memory
2077          * allocations; the domainset iterators automatically skip domains
2078          * below the "min" threshold on the first pass.
2079          *
2080          * UMA reclaim worker has its own rate-limiting mechanism, so don't
2081          * worry about kicking it too often.
2082          */
2083         if (vm_page_count_severe())
2084                 uma_reclaim_wakeup();
2085
2086         return (ret);
2087 }
2088
2089 static void
2090 vm_pageout_worker(void *arg)
2091 {
2092         struct vm_domain *vmd;
2093         u_int ofree;
2094         int addl_shortage, domain, shortage;
2095         bool target_met;
2096
2097         domain = (uintptr_t)arg;
2098         vmd = VM_DOMAIN(domain);
2099         shortage = 0;
2100         target_met = true;
2101
2102         /*
2103          * XXXKIB It could be useful to bind pageout daemon threads to
2104          * the cores belonging to the domain, from which vm_page_array
2105          * is allocated.
2106          */
2107
2108         KASSERT(vmd->vmd_segs != 0, ("domain without segments"));
2109         vmd->vmd_last_active_scan = ticks;
2110
2111         /*
2112          * The pageout daemon worker is never done, so loop forever.
2113          */
2114         while (TRUE) {
2115                 vm_domain_pageout_lock(vmd);
2116
2117                 /*
2118                  * We need to clear wanted before we check the limits.  This
2119                  * prevents races with wakers who will check wanted after they
2120                  * reach the limit.
2121                  */
2122                 atomic_store_int(&vmd->vmd_pageout_wanted, 0);
2123
2124                 /*
2125                  * Might the page daemon need to run again?
2126                  */
2127                 if (vm_paging_needed(vmd, vmd->vmd_free_count)) {
2128                         /*
2129                          * Yes.  If the scan failed to produce enough free
2130                          * pages, sleep uninterruptibly for some time in the
2131                          * hope that the laundry thread will clean some pages.
2132                          */
2133                         vm_domain_pageout_unlock(vmd);
2134                         if (!target_met)
2135                                 pause("pwait", hz / VM_INACT_SCAN_RATE);
2136                 } else {
2137                         /*
2138                          * No, sleep until the next wakeup or until pages
2139                          * need to have their reference stats updated.
2140                          */
2141                         if (mtx_sleep(&vmd->vmd_pageout_wanted,
2142                             vm_domain_pageout_lockptr(vmd), PDROP | PVM,
2143                             "psleep", hz / VM_INACT_SCAN_RATE) == 0)
2144                                 VM_CNT_INC(v_pdwakeups);
2145                 }
2146
2147                 /* Prevent spurious wakeups by ensuring that wanted is set. */
2148                 atomic_store_int(&vmd->vmd_pageout_wanted, 1);
2149
2150                 /*
2151                  * Use the controller to calculate how many pages to free in
2152                  * this interval, and scan the inactive queue.  If the lowmem
2153                  * handlers appear to have freed up some pages, subtract the
2154                  * difference from the inactive queue scan target.
2155                  */
2156                 shortage = pidctrl_daemon(&vmd->vmd_pid, vmd->vmd_free_count);
2157                 if (shortage > 0) {
2158                         ofree = vmd->vmd_free_count;
2159                         if (vm_pageout_lowmem() && vmd->vmd_free_count > ofree)
2160                                 shortage -= min(vmd->vmd_free_count - ofree,
2161                                     (u_int)shortage);
2162                         target_met = vm_pageout_inactive(vmd, shortage,
2163                             &addl_shortage);
2164                 } else
2165                         addl_shortage = 0;
2166
2167                 /*
2168                  * Scan the active queue.  A positive value for shortage
2169                  * indicates that we must aggressively deactivate pages to avoid
2170                  * a shortfall.
2171                  */
2172                 shortage = vm_pageout_active_target(vmd) + addl_shortage;
2173                 vm_pageout_scan_active(vmd, shortage);
2174         }
2175 }
2176
2177 /*
2178  * vm_pageout_helper runs additional pageout daemons in times of high paging
2179  * activity.
2180  */
2181 static void
2182 vm_pageout_helper(void *arg)
2183 {
2184         struct vm_domain *vmd;
2185         int domain;
2186
2187         domain = (uintptr_t)arg;
2188         vmd = VM_DOMAIN(domain);
2189
2190         vm_domain_pageout_lock(vmd);
2191         for (;;) {
2192                 msleep(&vmd->vmd_inactive_shortage,
2193                     vm_domain_pageout_lockptr(vmd), PVM, "psleep", 0);
2194                 blockcount_release(&vmd->vmd_inactive_starting, 1);
2195
2196                 vm_domain_pageout_unlock(vmd);
2197                 vm_pageout_scan_inactive(vmd, vmd->vmd_inactive_shortage);
2198                 vm_domain_pageout_lock(vmd);
2199
2200                 /*
2201                  * Release the running count while the pageout lock is held to
2202                  * prevent wakeup races.
2203                  */
2204                 blockcount_release(&vmd->vmd_inactive_running, 1);
2205         }
2206 }
2207
2208 static int
2209 get_pageout_threads_per_domain(const struct vm_domain *vmd)
2210 {
2211         unsigned total_pageout_threads, eligible_cpus, domain_cpus;
2212
2213         if (VM_DOMAIN_EMPTY(vmd->vmd_domain))
2214                 return (0);
2215
2216         /*
2217          * Semi-arbitrarily constrain pagedaemon threads to less than half the
2218          * total number of CPUs in the system as an upper limit.
2219          */
2220         if (pageout_cpus_per_thread < 2)
2221                 pageout_cpus_per_thread = 2;
2222         else if (pageout_cpus_per_thread > mp_ncpus)
2223                 pageout_cpus_per_thread = mp_ncpus;
2224
2225         total_pageout_threads = howmany(mp_ncpus, pageout_cpus_per_thread);
2226         domain_cpus = CPU_COUNT(&cpuset_domain[vmd->vmd_domain]);
2227
2228         /* Pagedaemons are not run in empty domains. */
2229         eligible_cpus = mp_ncpus;
2230         for (unsigned i = 0; i < vm_ndomains; i++)
2231                 if (VM_DOMAIN_EMPTY(i))
2232                         eligible_cpus -= CPU_COUNT(&cpuset_domain[i]);
2233
2234         /*
2235          * Assign a portion of the total pageout threads to this domain
2236          * corresponding to the fraction of pagedaemon-eligible CPUs in the
2237          * domain.  In asymmetric NUMA systems, domains with more CPUs may be
2238          * allocated more threads than domains with fewer CPUs.
2239          */
2240         return (howmany(total_pageout_threads * domain_cpus, eligible_cpus));
2241 }
2242
2243 /*
2244  * Initialize basic pageout daemon settings.  See the comment above the
2245  * definition of vm_domain for some explanation of how these thresholds are
2246  * used.
2247  */
2248 static void
2249 vm_pageout_init_domain(int domain)
2250 {
2251         struct vm_domain *vmd;
2252         struct sysctl_oid *oid;
2253
2254         vmd = VM_DOMAIN(domain);
2255         vmd->vmd_interrupt_free_min = 2;
2256
2257         /*
2258          * v_free_reserved needs to include enough for the largest
2259          * swap pager structures plus enough for any pv_entry structs
2260          * when paging. 
2261          */
2262         vmd->vmd_pageout_free_min = 2 * MAXBSIZE / PAGE_SIZE +
2263             vmd->vmd_interrupt_free_min;
2264         vmd->vmd_free_reserved = vm_pageout_page_count +
2265             vmd->vmd_pageout_free_min + vmd->vmd_page_count / 768;
2266         vmd->vmd_free_min = vmd->vmd_page_count / 200;
2267         vmd->vmd_free_severe = vmd->vmd_free_min / 2;
2268         vmd->vmd_free_target = 4 * vmd->vmd_free_min + vmd->vmd_free_reserved;
2269         vmd->vmd_free_min += vmd->vmd_free_reserved;
2270         vmd->vmd_free_severe += vmd->vmd_free_reserved;
2271         vmd->vmd_inactive_target = (3 * vmd->vmd_free_target) / 2;
2272         if (vmd->vmd_inactive_target > vmd->vmd_free_count / 3)
2273                 vmd->vmd_inactive_target = vmd->vmd_free_count / 3;
2274
2275         /*
2276          * Set the default wakeup threshold to be 10% below the paging
2277          * target.  This keeps the steady state out of shortfall.
2278          */
2279         vmd->vmd_pageout_wakeup_thresh = (vmd->vmd_free_target / 10) * 9;
2280
2281         /*
2282          * Target amount of memory to move out of the laundry queue during a
2283          * background laundering.  This is proportional to the amount of system
2284          * memory.
2285          */
2286         vmd->vmd_background_launder_target = (vmd->vmd_free_target -
2287             vmd->vmd_free_min) / 10;
2288
2289         /* Initialize the pageout daemon pid controller. */
2290         pidctrl_init(&vmd->vmd_pid, hz / VM_INACT_SCAN_RATE,
2291             vmd->vmd_free_target, PIDCTRL_BOUND,
2292             PIDCTRL_KPD, PIDCTRL_KID, PIDCTRL_KDD);
2293         oid = SYSCTL_ADD_NODE(NULL, SYSCTL_CHILDREN(vmd->vmd_oid), OID_AUTO,
2294             "pidctrl", CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "");
2295         pidctrl_init_sysctl(&vmd->vmd_pid, SYSCTL_CHILDREN(oid));
2296
2297         vmd->vmd_inactive_threads = get_pageout_threads_per_domain(vmd);
2298 }
2299
2300 static void
2301 vm_pageout_init(void)
2302 {
2303         u_long freecount;
2304         int i;
2305
2306         /*
2307          * Initialize some paging parameters.
2308          */
2309         if (vm_cnt.v_page_count < 2000)
2310                 vm_pageout_page_count = 8;
2311
2312         freecount = 0;
2313         for (i = 0; i < vm_ndomains; i++) {
2314                 struct vm_domain *vmd;
2315
2316                 vm_pageout_init_domain(i);
2317                 vmd = VM_DOMAIN(i);
2318                 vm_cnt.v_free_reserved += vmd->vmd_free_reserved;
2319                 vm_cnt.v_free_target += vmd->vmd_free_target;
2320                 vm_cnt.v_free_min += vmd->vmd_free_min;
2321                 vm_cnt.v_inactive_target += vmd->vmd_inactive_target;
2322                 vm_cnt.v_pageout_free_min += vmd->vmd_pageout_free_min;
2323                 vm_cnt.v_interrupt_free_min += vmd->vmd_interrupt_free_min;
2324                 vm_cnt.v_free_severe += vmd->vmd_free_severe;
2325                 freecount += vmd->vmd_free_count;
2326         }
2327
2328         /*
2329          * Set interval in seconds for active scan.  We want to visit each
2330          * page at least once every ten minutes.  This is to prevent worst
2331          * case paging behaviors with stale active LRU.
2332          */
2333         if (vm_pageout_update_period == 0)
2334                 vm_pageout_update_period = 600;
2335
2336         /*
2337          * Set the maximum number of user-wired virtual pages.  Historically the
2338          * main source of such pages was mlock(2) and mlockall(2).  Hypervisors
2339          * may also request user-wired memory.
2340          */
2341         if (vm_page_max_user_wired == 0)
2342                 vm_page_max_user_wired = 4 * freecount / 5;
2343 }
2344
2345 /*
2346  *     vm_pageout is the high level pageout daemon.
2347  */
2348 static void
2349 vm_pageout(void)
2350 {
2351         struct proc *p;
2352         struct thread *td;
2353         int error, first, i, j, pageout_threads;
2354
2355         p = curproc;
2356         td = curthread;
2357
2358         mtx_init(&vm_oom_ratelim_mtx, "vmoomr", NULL, MTX_DEF);
2359         swap_pager_swap_init();
2360         for (first = -1, i = 0; i < vm_ndomains; i++) {
2361                 if (VM_DOMAIN_EMPTY(i)) {
2362                         if (bootverbose)
2363                                 printf("domain %d empty; skipping pageout\n",
2364                                     i);
2365                         continue;
2366                 }
2367                 if (first == -1)
2368                         first = i;
2369                 else {
2370                         error = kthread_add(vm_pageout_worker,
2371                             (void *)(uintptr_t)i, p, NULL, 0, 0, "dom%d", i);
2372                         if (error != 0)
2373                                 panic("starting pageout for domain %d: %d\n",
2374                                     i, error);
2375                 }
2376                 pageout_threads = VM_DOMAIN(i)->vmd_inactive_threads;
2377                 for (j = 0; j < pageout_threads - 1; j++) {
2378                         error = kthread_add(vm_pageout_helper,
2379                             (void *)(uintptr_t)i, p, NULL, 0, 0,
2380                             "dom%d helper%d", i, j);
2381                         if (error != 0)
2382                                 panic("starting pageout helper %d for domain "
2383                                     "%d: %d\n", j, i, error);
2384                 }
2385                 error = kthread_add(vm_pageout_laundry_worker,
2386                     (void *)(uintptr_t)i, p, NULL, 0, 0, "laundry: dom%d", i);
2387                 if (error != 0)
2388                         panic("starting laundry for domain %d: %d", i, error);
2389         }
2390         error = kthread_add(uma_reclaim_worker, NULL, p, NULL, 0, 0, "uma");
2391         if (error != 0)
2392                 panic("starting uma_reclaim helper, error %d\n", error);
2393
2394         snprintf(td->td_name, sizeof(td->td_name), "dom%d", first);
2395         vm_pageout_worker((void *)(uintptr_t)first);
2396 }
2397
2398 /*
2399  * Perform an advisory wakeup of the page daemon.
2400  */
2401 void
2402 pagedaemon_wakeup(int domain)
2403 {
2404         struct vm_domain *vmd;
2405
2406         vmd = VM_DOMAIN(domain);
2407         vm_domain_pageout_assert_unlocked(vmd);
2408         if (curproc == pageproc)
2409                 return;
2410
2411         if (atomic_fetchadd_int(&vmd->vmd_pageout_wanted, 1) == 0) {
2412                 vm_domain_pageout_lock(vmd);
2413                 atomic_store_int(&vmd->vmd_pageout_wanted, 1);
2414                 wakeup(&vmd->vmd_pageout_wanted);
2415                 vm_domain_pageout_unlock(vmd);
2416         }
2417 }