Print this page
8115 parallel zfs mount
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/uts/common/sys/lgrp_user.h
+++ new/usr/src/uts/common/sys/lgrp_user.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License, Version 1.0 only
6 6 * (the "License"). You may not use this file except in compliance
7 7 * with the License.
8 8 *
9 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 10 * or http://www.opensolaris.org/os/licensing.
11 11 * See the License for the specific language governing permissions
12 12 * and limitations under the License.
13 13 *
↓ open down ↓ |
13 lines elided |
↑ open up ↑ |
14 14 * When distributing Covered Code, include this CDDL HEADER in each
15 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 16 * If applicable, add the following below this CDDL HEADER, with the
17 17 * fields enclosed by brackets "[]" replaced with your own identifying
18 18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 19 *
20 20 * CDDL HEADER END
21 21 */
22 22 /*
23 23 * Copyright 2014 Garrett D'Amore <garrett@damore.org>
24 + * Copyright 2017 RackTop Systems.
24 25 *
25 26 * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
26 27 * Use is subject to license terms.
27 28 */
28 29
29 30 #ifndef _LGRP_USER_H
30 31 #define _LGRP_USER_H
31 32
32 33 /*
33 34 * latency group definitions for user
34 35 */
35 36
36 37 #ifdef __cplusplus
37 38 extern "C" {
38 39 #endif
39 40
40 41
41 42 #include <sys/inttypes.h>
42 43 #include <sys/lgrp.h>
43 44 #include <sys/procset.h>
44 45 #include <sys/processor.h>
45 46 #include <sys/pset.h>
46 47 #include <sys/types.h>
47 48
48 49
49 50 /*
50 51 * lgroup interface version
51 52 */
52 53 #define LGRP_VER_NONE 0 /* no lgroup interface version */
53 54 #define LGRP_VER_CURRENT 2 /* current lgroup interface version */
54 55
55 56
56 57 /*
57 58 * lgroup system call subcodes
58 59 */
59 60 #define LGRP_SYS_MEMINFO 0 /* meminfo(2) aka MISYS_MEMINFO */
60 61 #define LGRP_SYS_GENERATION 1 /* lgrp_generation() */
61 62 #define LGRP_SYS_VERSION 2 /* lgrp_version() */
62 63 #define LGRP_SYS_SNAPSHOT 3 /* lgrp_snapshot() */
63 64 #define LGRP_SYS_AFFINITY_GET 4 /* lgrp_affinity_set() */
64 65 #define LGRP_SYS_AFFINITY_SET 5 /* lgrp_affinity_get() */
65 66 #define LGRP_SYS_LATENCY 6 /* lgrp_latency() */
66 67 #define LGRP_SYS_HOME 7 /* lgrp_home() */
67 68
68 69
69 70 /*
70 71 * lgroup resources
71 72 */
72 73 #define LGRP_RSRC_COUNT 2 /* no. of resource types in lgroup */
73 74 #define LGRP_RSRC_CPU 0 /* CPU resources */
74 75 #define LGRP_RSRC_MEM 1 /* memory resources */
75 76
76 77 typedef int lgrp_rsrc_t;
77 78
78 79
79 80
80 81 /*
81 82 * lgroup affinity
82 83 */
83 84 #define LGRP_AFF_NONE 0x0 /* no affinity */
84 85 #define LGRP_AFF_WEAK 0x10 /* weak affinity */
85 86 #define LGRP_AFF_STRONG 0x100 /* strong affinity */
86 87
87 88 typedef int lgrp_affinity_t;
88 89
89 90 /*
90 91 * Arguments to lgrp_affinity_{get,set}()
91 92 */
92 93 typedef struct lgrp_affinity_args {
93 94 idtype_t idtype; /* ID type */
94 95 id_t id; /* ID */
95 96 lgrp_id_t lgrp; /* lgroup */
96 97 lgrp_affinity_t aff; /* affinity */
97 98 } lgrp_affinity_args_t;
98 99
99 100
100 101 /*
101 102 * Flags to specify contents of lgroups desired
102 103 */
103 104 typedef enum lgrp_content {
104 105 LGRP_CONTENT_ALL, /* everything in lgroup */
105 106 /* everything in lgroup's hierarchy (for compatability) */
106 107 LGRP_CONTENT_HIERARCHY = LGRP_CONTENT_ALL,
107 108 LGRP_CONTENT_DIRECT /* what's directly contained in lgroup */
108 109 } lgrp_content_t;
109 110
110 111
111 112 /*
112 113 * Flags for lgrp_latency_cookie() specifying what hardware resources to get
113 114 * latency between
114 115 */
115 116 typedef enum lgrp_lat_between {
116 117 LGRP_LAT_CPU_TO_MEM /* latency between CPU and memory */
117 118 } lgrp_lat_between_t;
118 119
119 120
120 121 /*
121 122 * lgroup memory size type
122 123 */
123 124 typedef longlong_t lgrp_mem_size_t;
124 125
125 126
126 127 /*
127 128 * lgroup memory size flags
128 129 */
129 130 typedef enum lgrp_mem_size_flag {
130 131 LGRP_MEM_SZ_FREE, /* free memory */
131 132 LGRP_MEM_SZ_INSTALLED /* installed memory */
132 133 } lgrp_mem_size_flag_t;
133 134
134 135
135 136 /*
136 137 * View of lgroups
137 138 */
138 139 typedef enum lgrp_view {
139 140 LGRP_VIEW_CALLER, /* what's available to the caller */
140 141 LGRP_VIEW_OS /* what's available to operating system */
141 142 } lgrp_view_t;
142 143
143 144
144 145 /*
145 146 * lgroup information needed by user
146 147 */
147 148 typedef struct lgrp_info {
148 149 lgrp_id_t info_lgrpid; /* lgroup ID */
149 150 int info_latency; /* latency */
150 151 ulong_t *info_parents; /* parent lgroups */
151 152 ulong_t *info_children; /* children lgroups */
152 153 ulong_t *info_rset; /* lgroup resources */
153 154 pgcnt_t info_mem_free; /* free memory */
154 155 pgcnt_t info_mem_install; /* installed memory */
155 156 processorid_t *info_cpuids; /* CPU IDs */
156 157 int info_ncpus; /* number of CPUs */
157 158 } lgrp_info_t;
158 159
159 160
160 161 /*
161 162 * Type of lgroup cookie to use with interface routines
162 163 */
163 164 typedef uintptr_t lgrp_cookie_t;
164 165
165 166 #define LGRP_COOKIE_NONE 0 /* no cookie */
166 167
167 168
168 169 /*
169 170 * Type of lgroup generation number
170 171 */
171 172 typedef uint_t lgrp_gen_t;
172 173
173 174
174 175 /*
175 176 * Format of lgroup hierarchy snapshot
176 177 */
177 178 typedef struct lgrp_snapshot_header {
178 179 int ss_version; /* lgroup interface version */
179 180 int ss_levels; /* levels of hierarchy */
180 181 int ss_nlgrps; /* number of lgroups */
181 182 int ss_nlgrps_os; /* number of lgroups (OS view) */
182 183 int ss_nlgrps_max; /* maximum number of lgroups */
183 184 int ss_root; /* root lgroup */
184 185 int ss_ncpus; /* total number of CPUs */
185 186 lgrp_view_t ss_view; /* view of lgroup hierarchy */
186 187 psetid_t ss_pset; /* caller's pset ID */
187 188 lgrp_gen_t ss_gen; /* snapshot generation ID */
188 189 size_t ss_size; /* total size of snapshot */
189 190 uintptr_t ss_magic; /* snapshot magic number */
190 191 lgrp_info_t *ss_info; /* lgroup info array */
191 192 processorid_t *ss_cpuids; /* lgroup CPU ID array */
192 193 ulong_t *ss_lgrpset; /* bit mask of available lgroups */
193 194 ulong_t *ss_parents; /* lgroup parent bit masks */
194 195 ulong_t *ss_children; /* lgroup children bit masks */
195 196 ulong_t *ss_rsets; /* lgroup resource set bit masks */
196 197 int **ss_latencies; /* latencies between lgroups */
197 198 } lgrp_snapshot_header_t;
198 199
199 200
200 201 #ifdef _SYSCALL32
201 202 /*
202 203 * lgroup information needed by 32-bit user
203 204 */
204 205 typedef struct lgrp_info32 {
205 206 int info_lgrpid; /* lgroup ID */
206 207 int info_latency; /* latency */
207 208 caddr32_t info_parents; /* parent lgroups */
208 209 caddr32_t info_children; /* children lgroups */
209 210 caddr32_t info_rset; /* lgroup resources */
210 211 uint32_t info_mem_free; /* free memory */
211 212 uint32_t info_mem_install; /* installed memory */
212 213 caddr32_t info_cpuids; /* CPU IDs */
213 214 int info_ncpus; /* number of CPUs */
214 215 } lgrp_info32_t;
215 216
216 217
217 218 /*
218 219 * Format of lgroup hierarchy snapshot for 32-bit programs
219 220 */
220 221 typedef struct lgrp_snapshot_header32 {
221 222 int ss_version; /* lgroup interface version */
222 223 int ss_levels; /* levels of hierarchy */
223 224 int ss_nlgrps; /* number of lgroups */
224 225 int ss_nlgrps_os; /* number of lgroups (OS view) */
225 226 int ss_nlgrps_max; /* maximum number of lgroups */
226 227 int ss_root; /* root lgroup */
227 228 int ss_ncpus; /* total number of CPUs */
228 229 int ss_view; /* view of lgroup hierarchy */
229 230 int ss_pset; /* caller's pset ID */
230 231 uint_t ss_gen; /* snapshot generation ID */
231 232 size32_t ss_size; /* total size of snapshot */
232 233 uint32_t ss_magic; /* snapshot magic number */
233 234 caddr32_t ss_info; /* lgroup info array */
234 235 caddr32_t ss_cpuids; /* lgroup CPU ID array */
↓ open down ↓ |
201 lines elided |
↑ open up ↑ |
235 236 caddr32_t ss_lgrpset; /* bit mask of available lgroups */
236 237 caddr32_t ss_parents; /* lgroup parent bit masks */
237 238 caddr32_t ss_children; /* lgroup children bit masks */
238 239 caddr32_t ss_rsets; /* lgroup resource set bit masks */
239 240 caddr32_t ss_latencies; /* latencies between lgroups */
240 241 } lgrp_snapshot_header32_t;
241 242
242 243 #endif /* _SYSCALL32 */
243 244
244 245
245 -#if (!defined(_KERNEL) && !defined(_KMEMUSER))
246 +#if !defined(_KERNEL) && !defined(_FAKE_KERNEL) && !defined(_KMEMUSER)
246 247
247 248 lgrp_affinity_t lgrp_affinity_get(idtype_t idtype, id_t id, lgrp_id_t lgrp);
248 249
249 250 int lgrp_affinity_set(idtype_t idtype, id_t id, lgrp_id_t lgrp,
250 251 lgrp_affinity_t aff);
251 252
252 253 int lgrp_children(lgrp_cookie_t cookie, lgrp_id_t lgrp,
253 254 lgrp_id_t *children, uint_t count);
254 255
255 256 int lgrp_cookie_stale(lgrp_cookie_t cookie);
256 257
257 258 int lgrp_cpus(lgrp_cookie_t cookie, lgrp_id_t lgrp,
258 259 processorid_t *cpuids, uint_t count, lgrp_content_t content);
259 260
260 261 int lgrp_fini(lgrp_cookie_t cookie);
261 262
262 263 int lgrp_latency(lgrp_id_t from, lgrp_id_t to);
263 264
264 265 int lgrp_latency_cookie(lgrp_cookie_t cookie, lgrp_id_t from,
265 266 lgrp_id_t to, lgrp_lat_between_t between);
266 267
267 268 lgrp_id_t lgrp_home(idtype_t idtype, id_t id);
268 269
269 270 lgrp_cookie_t lgrp_init(lgrp_view_t view);
270 271
271 272 lgrp_mem_size_t lgrp_mem_size(lgrp_cookie_t cookie, lgrp_id_t lgrp,
272 273 lgrp_mem_size_flag_t type, lgrp_content_t content);
273 274
274 275 int lgrp_nlgrps(lgrp_cookie_t cookie);
275 276
276 277 int lgrp_parents(lgrp_cookie_t cookie, lgrp_id_t lgrp,
277 278 lgrp_id_t *parents, uint_t count);
↓ open down ↓ |
22 lines elided |
↑ open up ↑ |
278 279
279 280 int lgrp_resources(lgrp_cookie_t cookie, lgrp_id_t lgrp,
280 281 lgrp_id_t *lgrps, uint_t count, lgrp_rsrc_t type);
281 282
282 283 lgrp_id_t lgrp_root(lgrp_cookie_t cookie);
283 284
284 285 int lgrp_version(int version);
285 286
286 287 lgrp_view_t lgrp_view(lgrp_cookie_t cookie);
287 288
288 -#endif /* !_KERNEL && !_KMEMUSER */
289 +#endif /* !_KERNEL && !_FAKE_KERNEL && !_KMEMUSER */
289 290
290 291 #ifdef __cplusplus
291 292 }
292 293 #endif
293 294
294 295 #endif /* _LGRP_USER_H */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX