Deleted Added
full compact
kern_mbuf.c (243999) kern_mbuf.c (245575)
1/*-
2 * Copyright (c) 2004, 2005,
3 * Bosko Milekic <bmilekic@FreeBSD.org>. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

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

21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27
28#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2004, 2005,
3 * Bosko Milekic <bmilekic@FreeBSD.org>. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

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

21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27
28#include <sys/cdefs.h>
29__FBSDID("$FreeBSD: head/sys/kern/kern_mbuf.c 243999 2012-12-07 22:30:30Z pjd $");
29__FBSDID("$FreeBSD: head/sys/kern/kern_mbuf.c 245575 2013-01-17 21:28:31Z andre $");
30
31#include "opt_param.h"
32
33#include <sys/param.h>
34#include <sys/malloc.h>
35#include <sys/systm.h>
36#include <sys/mbuf.h>
37#include <sys/domain.h>

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

42#include <sys/sysctl.h>
43
44#include <security/mac/mac_framework.h>
45
46#include <vm/vm.h>
47#include <vm/vm_extern.h>
48#include <vm/vm_kern.h>
49#include <vm/vm_page.h>
30
31#include "opt_param.h"
32
33#include <sys/param.h>
34#include <sys/malloc.h>
35#include <sys/systm.h>
36#include <sys/mbuf.h>
37#include <sys/domain.h>

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

42#include <sys/sysctl.h>
43
44#include <security/mac/mac_framework.h>
45
46#include <vm/vm.h>
47#include <vm/vm_extern.h>
48#include <vm/vm_kern.h>
49#include <vm/vm_page.h>
50#include <vm/vm_map.h>
50#include <vm/uma.h>
51#include <vm/uma_int.h>
52#include <vm/uma_dbg.h>
53
54/*
55 * In FreeBSD, Mbufs and Mbuf Clusters are allocated from UMA
56 * Zones.
57 *

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

99int nmbufs; /* limits number of mbufs */
100int nmbclusters; /* limits number of mbuf clusters */
101int nmbjumbop; /* limits number of page size jumbo clusters */
102int nmbjumbo9; /* limits number of 9k jumbo clusters */
103int nmbjumbo16; /* limits number of 16k jumbo clusters */
104struct mbstat mbstat;
105
106/*
51#include <vm/uma.h>
52#include <vm/uma_int.h>
53#include <vm/uma_dbg.h>
54
55/*
56 * In FreeBSD, Mbufs and Mbuf Clusters are allocated from UMA
57 * Zones.
58 *

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

100int nmbufs; /* limits number of mbufs */
101int nmbclusters; /* limits number of mbuf clusters */
102int nmbjumbop; /* limits number of page size jumbo clusters */
103int nmbjumbo9; /* limits number of 9k jumbo clusters */
104int nmbjumbo16; /* limits number of 16k jumbo clusters */
105struct mbstat mbstat;
106
107/*
107 * tunable_mbinit() has to be run before init_maxsockets() thus
108 * the SYSINIT order below is SI_ORDER_MIDDLE while init_maxsockets()
109 * runs at SI_ORDER_ANY.
110 *
111 * NB: This has to be done before VM init.
108 * tunable_mbinit() has to be run before any mbuf allocations are done.
112 */
113static void
114tunable_mbinit(void *dummy)
115{
109 */
110static void
111tunable_mbinit(void *dummy)
112{
113 quad_t realmem, maxmbufmem;
116
114
115 /*
116 * The default limit for all mbuf related memory is 1/2 of all
117 * available kernel memory (physical or kmem).
118 * At most it can be 3/4 of available kernel memory.
119 */
120 realmem = qmin((quad_t)physmem * PAGE_SIZE,
121 vm_map_max(kernel_map) - vm_map_min(kernel_map));
122 maxmbufmem = realmem / 2;
123 TUNABLE_QUAD_FETCH("kern.maxmbufmem", &maxmbufmem);
124 if (maxmbufmem > realmem / 4 * 3)
125 maxmbufmem = realmem / 4 * 3;
126
117 TUNABLE_INT_FETCH("kern.ipc.nmbclusters", &nmbclusters);
118 if (nmbclusters == 0)
119 nmbclusters = maxmbufmem / MCLBYTES / 4;
120
121 TUNABLE_INT_FETCH("kern.ipc.nmbjumbop", &nmbjumbop);
122 if (nmbjumbop == 0)
123 nmbjumbop = maxmbufmem / MJUMPAGESIZE / 4;
124

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

134 * We need at least as many mbufs as we have clusters of
135 * the various types added together.
136 */
137 TUNABLE_INT_FETCH("kern.ipc.nmbufs", &nmbufs);
138 if (nmbufs < nmbclusters + nmbjumbop + nmbjumbo9 + nmbjumbo16)
139 nmbufs = lmax(maxmbufmem / MSIZE / 5,
140 nmbclusters + nmbjumbop + nmbjumbo9 + nmbjumbo16);
141}
127 TUNABLE_INT_FETCH("kern.ipc.nmbclusters", &nmbclusters);
128 if (nmbclusters == 0)
129 nmbclusters = maxmbufmem / MCLBYTES / 4;
130
131 TUNABLE_INT_FETCH("kern.ipc.nmbjumbop", &nmbjumbop);
132 if (nmbjumbop == 0)
133 nmbjumbop = maxmbufmem / MJUMPAGESIZE / 4;
134

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

144 * We need at least as many mbufs as we have clusters of
145 * the various types added together.
146 */
147 TUNABLE_INT_FETCH("kern.ipc.nmbufs", &nmbufs);
148 if (nmbufs < nmbclusters + nmbjumbop + nmbjumbo9 + nmbjumbo16)
149 nmbufs = lmax(maxmbufmem / MSIZE / 5,
150 nmbclusters + nmbjumbop + nmbjumbo9 + nmbjumbo16);
151}
142SYSINIT(tunable_mbinit, SI_SUB_TUNABLES, SI_ORDER_MIDDLE, tunable_mbinit, NULL);
152SYSINIT(tunable_mbinit, SI_SUB_KMEM, SI_ORDER_MIDDLE, tunable_mbinit, NULL);
143
144static int
145sysctl_nmbclusters(SYSCTL_HANDLER_ARGS)
146{
147 int error, newnmbclusters;
148
149 newnmbclusters = nmbclusters;
150 error = sysctl_handle_int(oidp, &newnmbclusters, 0, req);

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

274static int mb_ctor_pack(void *, int, void *, int);
275static void mb_dtor_mbuf(void *, int, void *);
276static void mb_dtor_clust(void *, int, void *);
277static void mb_dtor_pack(void *, int, void *);
278static int mb_zinit_pack(void *, int, int);
279static void mb_zfini_pack(void *, int);
280
281static void mb_reclaim(void *);
153
154static int
155sysctl_nmbclusters(SYSCTL_HANDLER_ARGS)
156{
157 int error, newnmbclusters;
158
159 newnmbclusters = nmbclusters;
160 error = sysctl_handle_int(oidp, &newnmbclusters, 0, req);

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

284static int mb_ctor_pack(void *, int, void *, int);
285static void mb_dtor_mbuf(void *, int, void *);
286static void mb_dtor_clust(void *, int, void *);
287static void mb_dtor_pack(void *, int, void *);
288static int mb_zinit_pack(void *, int, int);
289static void mb_zfini_pack(void *, int);
290
291static void mb_reclaim(void *);
282static void mbuf_init(void *);
283static void *mbuf_jumbo_alloc(uma_zone_t, int, uint8_t *, int);
284
292static void *mbuf_jumbo_alloc(uma_zone_t, int, uint8_t *, int);
293
285/* Ensure that MSIZE must be a power of 2. */
294/* Ensure that MSIZE is a power of 2. */
286CTASSERT((((MSIZE - 1) ^ MSIZE) + 1) >> 1 == MSIZE);
287
288/*
289 * Initialize FreeBSD Network buffer allocation.
290 */
295CTASSERT((((MSIZE - 1) ^ MSIZE) + 1) >> 1 == MSIZE);
296
297/*
298 * Initialize FreeBSD Network buffer allocation.
299 */
291SYSINIT(mbuf, SI_SUB_MBUF, SI_ORDER_FIRST, mbuf_init, NULL);
292static void
293mbuf_init(void *dummy)
294{
295
296 /*
297 * Configure UMA zones for Mbufs, Clusters, and Packets.
298 */
299 zone_mbuf = uma_zcreate(MBUF_MEM_NAME, MSIZE,

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

391 mbstat.m_mlen = MLEN;
392 mbstat.m_mhlen = MHLEN;
393 mbstat.m_numtypes = MT_NTYPES;
394
395 mbstat.m_mcfail = mbstat.m_mpfail = 0;
396 mbstat.sf_iocnt = 0;
397 mbstat.sf_allocwait = mbstat.sf_allocfail = 0;
398}
300static void
301mbuf_init(void *dummy)
302{
303
304 /*
305 * Configure UMA zones for Mbufs, Clusters, and Packets.
306 */
307 zone_mbuf = uma_zcreate(MBUF_MEM_NAME, MSIZE,

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

399 mbstat.m_mlen = MLEN;
400 mbstat.m_mhlen = MHLEN;
401 mbstat.m_numtypes = MT_NTYPES;
402
403 mbstat.m_mcfail = mbstat.m_mpfail = 0;
404 mbstat.sf_iocnt = 0;
405 mbstat.sf_allocwait = mbstat.sf_allocfail = 0;
406}
407SYSINIT(mbuf, SI_SUB_MBUF, SI_ORDER_FIRST, mbuf_init, NULL);
399
400/*
401 * UMA backend page allocator for the jumbo frame zones.
402 *
403 * Allocates kernel virtual memory that is backed by contiguous physical
404 * pages.
405 */
406static void *

--- 342 unchanged lines hidden ---
408
409/*
410 * UMA backend page allocator for the jumbo frame zones.
411 *
412 * Allocates kernel virtual memory that is backed by contiguous physical
413 * pages.
414 */
415static void *

--- 342 unchanged lines hidden ---