MCPcopy Create free account
hub / github.com/F-Stack/f-stack / memstat_kvm_uma

Function memstat_kvm_uma

tools/libmemstat/memstat_uma.c:317–499  ·  view source on GitHub ↗

* memstat_kvm_uma() is similar to memstat_sysctl_uma(), only it extracts * UMA(9) statistics from a kernel core/memory file. */

Source from the content-addressed store, hash-verified

315 * UMA(9) statistics from a kernel core/memory file.
316 */
317int
318memstat_kvm_uma(struct memory_type_list *list, void *kvm_handle)
319{
320 LIST_HEAD(, uma_keg) uma_kegs;
321 struct memory_type *mtp;
322 struct uma_zone_domain uzd;
323 struct uma_domain ukd;
324 struct uma_bucket *ubp, ub;
325 struct uma_cache *ucp, *ucp_array;
326 struct uma_zone *uzp, uz;
327 struct uma_keg *kzp, kz;
328 uint64_t kegfree;
329 int hint_dontsearch, i, mp_maxid, ndomains, ret;
330 char name[MEMTYPE_MAXNAME];
331 cpuset_t all_cpus;
332 long cpusetsize;
333 kvm_t *kvm;
334
335 kvm = (kvm_t *)kvm_handle;
336 hint_dontsearch = LIST_EMPTY(&list->mtl_list);
337 if (kvm_nlist(kvm, namelist) != 0) {
338 list->mtl_error = MEMSTAT_ERROR_KVM;
339 return (-1);
340 }
341 if (namelist[X_UMA_KEGS].n_type == 0 ||
342 namelist[X_UMA_KEGS].n_value == 0) {
343 list->mtl_error = MEMSTAT_ERROR_KVM_NOSYMBOL;
344 return (-1);
345 }
346 ret = kread_symbol(kvm, X_MP_MAXID, &mp_maxid, sizeof(mp_maxid), 0);
347 if (ret != 0) {
348 list->mtl_error = ret;
349 return (-1);
350 }
351 ret = kread_symbol(kvm, X_VM_NDOMAINS, &ndomains,
352 sizeof(ndomains), 0);
353 if (ret != 0) {
354 list->mtl_error = ret;
355 return (-1);
356 }
357 ret = kread_symbol(kvm, X_UMA_KEGS, &uma_kegs, sizeof(uma_kegs), 0);
358 if (ret != 0) {
359 list->mtl_error = ret;
360 return (-1);
361 }
362 cpusetsize = sysconf(_SC_CPUSET_SIZE);
363 if (cpusetsize == -1 || (u_long)cpusetsize > sizeof(cpuset_t)) {
364 list->mtl_error = MEMSTAT_ERROR_KVM_NOSYMBOL;
365 return (-1);
366 }
367 CPU_ZERO(&all_cpus);
368 ret = kread_symbol(kvm, X_ALL_CPUS, &all_cpus, cpusetsize, 0);
369 if (ret != 0) {
370 list->mtl_error = ret;
371 return (-1);
372 }
373 ucp_array = malloc(sizeof(struct uma_cache) * (mp_maxid + 1));
374 if (ucp_array == NULL) {

Callers 1

memstat_kvm_allFunction · 0.85

Calls 9

mallocFunction · 0.85
_memstat_mtl_emptyFunction · 0.85
memstat_mtl_findFunction · 0.85
_memstat_mt_allocateFunction · 0.85
_memstat_mt_reset_statsFunction · 0.85
kread_symbolFunction · 0.70
kreadFunction · 0.70
kread_stringFunction · 0.70
freeFunction · 0.50

Tested by

no test coverage detected