Print this page
OS-6363 system went to dark side of moon for ~467 seconds OS-6404 ARC reclaim should throttle its calls to arc_kmem_reap_now() Reviewed by: Bryan Cantrill <bryan@joyent.com> Reviewed by: Dan McDonald <danmcd@joyent.com>
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/lib/libfakekernel/common/kmem.c
+++ new/usr/src/lib/libfakekernel/common/kmem.c
1 1 /*
2 2 * This file and its contents are supplied under the terms of the
3 3 * Common Development and Distribution License ("CDDL"), version 1.0.
|
↓ open down ↓ |
3 lines elided |
↑ open up ↑ |
4 4 * You may only use this file in accordance with the terms of version
5 5 * 1.0 of the CDDL.
6 6 *
7 7 * A full copy of the text of the CDDL should have accompanied this
8 8 * source. A copy of the CDDL is also available via the Internet at
9 9 * http://www.illumos.org/license/CDDL.
10 10 */
11 11
12 12 /*
13 13 * Copyright 2013 Nexenta Systems, Inc. All rights reserved.
14 + * Copyright (c) 2017, Joyent, Inc.
14 15 */
15 16
16 17 #include <sys/kmem.h>
17 18
18 19 #include <sys/debug.h>
19 20 #include <sys/ksynch.h>
20 21 #include <sys/systm.h>
21 22
22 23 #include <umem.h>
23 24
24 25 void abort(void) __NORETURN;
25 26
26 27 static int
27 28 kmem_failed_cb(void)
28 29 {
29 30 abort();
30 31 return (UMEM_CALLBACK_RETRY);
31 32 }
32 33
33 34 #pragma init(_kmem_init)
34 35 static int
35 36 _kmem_init(void)
36 37 {
37 38 umem_nofail_callback(kmem_failed_cb);
38 39 return (0);
39 40 }
40 41
41 42 static int
42 43 kmem2umem_flags(int kmflags)
43 44 {
44 45 int umflags = UMEM_NOFAIL;
45 46 if (kmflags & KM_NOSLEEP)
46 47 umflags = UMEM_DEFAULT;
47 48 return (umflags);
48 49 }
49 50
50 51 int
51 52 kmem_debugging(void)
52 53 {
53 54 return (0);
54 55 }
55 56
56 57 void *
57 58 kmem_alloc(size_t size, int kmflags)
58 59 {
59 60 return (umem_alloc(size, kmem2umem_flags(kmflags)));
60 61 }
61 62
62 63 void *
63 64 kmem_zalloc(size_t size, int kmflags)
64 65 {
65 66 return (umem_zalloc(size, kmem2umem_flags(kmflags)));
66 67 }
67 68
68 69
69 70 void
70 71 kmem_free(void *buf, size_t size)
71 72 {
72 73 umem_free(buf, size);
73 74 }
74 75
75 76 /* void *kmem_alloc_tryhard(size_t size, size_t *alloc_size, int kmflags); */
76 77
77 78 kmem_cache_t *
78 79 kmem_cache_create(
79 80 char *name, /* descriptive name for this cache */
80 81 size_t bufsize, /* size of the objects it manages */
81 82 size_t align, /* required object alignment */
82 83 int (*constructor)(void *, void *, int), /* object constructor */
83 84 void (*destructor)(void *, void *), /* object destructor */
84 85 void (*reclaim)(void *), /* memory reclaim callback */
85 86 void *private, /* pass-thru arg for constr/destr/reclaim */
86 87 vmem_t *vmp, /* vmem source for slab allocation */
87 88 int kcflags) /* cache creation flags */
88 89 {
89 90 umem_cache_t *uc;
90 91 int ucflags = 0;
91 92
92 93 /* Ignore KMC_NOTOUCH - not needed for userland caches */
93 94 if (kcflags & KMC_NODEBUG)
94 95 ucflags |= UMC_NODEBUG;
95 96 if (kcflags & KMC_NOMAGAZINE)
96 97 ucflags |= UMC_NOMAGAZINE;
97 98 if (kcflags & KMC_NOHASH)
98 99 ucflags |= UMC_NOHASH;
99 100
100 101 uc = umem_cache_create(name, bufsize, align,
101 102 constructor, destructor, reclaim,
102 103 private, vmp, ucflags);
103 104 return ((kmem_cache_t *)uc);
104 105 }
105 106
106 107 void
107 108 kmem_cache_destroy(kmem_cache_t *kc)
108 109 {
109 110 umem_cache_destroy((umem_cache_t *)kc);
110 111 }
111 112
112 113 void *
113 114 kmem_cache_alloc(kmem_cache_t *kc, int kmflags)
114 115 {
115 116 return (umem_cache_alloc((umem_cache_t *)kc,
116 117 kmem2umem_flags(kmflags)));
117 118 }
118 119
119 120 void
120 121 kmem_cache_free(kmem_cache_t *kc, void *p)
|
↓ open down ↓ |
97 lines elided |
↑ open up ↑ |
121 122 {
122 123 umem_cache_free((umem_cache_t *)kc, p);
123 124 }
124 125
125 126 /* ARGSUSED */
126 127 void
127 128 kmem_cache_set_move(kmem_cache_t *kc,
128 129 kmem_cbrc_t (*fun)(void *, void *, size_t, void *))
129 130 {
130 131 }
132 +
133 +boolean_t
134 +kmem_cache_reap_active(void)
135 +{
136 + return (B_FALSE);
137 +}
138 +
139 +/* ARGSUSED */
140 +void
141 +kmem_cache_reap_soon(kmem_cache_t *kc)
142 +{
143 +}
131 144
132 145 /* ARGSUSED */
133 146 void
134 147 kmem_cache_reap_now(kmem_cache_t *kc)
135 148 {
136 149 }
137 150
138 151 /* uint64_t kmem_cache_stat(kmem_cache_t *, char *); */
139 152
140 153 /* ARGSUSED */
141 154 void
142 155 vmem_qcache_reap(struct vmem *vmp)
143 156 {
144 157 }
145 158
146 159 void
147 160 strfree(char *str)
148 161 {
149 162 ASSERT(str != NULL);
150 163 kmem_free(str, strlen(str) + 1);
151 164 }
|
↓ open down ↓ |
11 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX