static int lstopo_obj_snprintf(struct lstopo_output *loutput, char *text, size_t textlen, hwloc_obj_t obj) { int logical = loutput->logical; unsigned idx = logical ? obj->logical_index : obj->os_index; const char *indexprefix = logical ? " L#" : " P#"; char typestr[32]; char indexstr[32]= ""; char attrstr[256]; char totmemstr[64] = ""; int attrlen; /* For OSDev, Misc and Group, name replaces type+index+attrs */ if (obj->name && (obj->type == HWLOC_OBJ_OS_DEVICE || obj->type == HWLOC_OBJ_MISC || obj->type == HWLOC_OBJ_GROUP)) { return snprintf(text, textlen, "%s", obj->name); } /* subtype replaces the basic type name */ if (obj->subtype) { snprintf(typestr, sizeof(typestr), "%s", obj->subtype); } else { hwloc_obj_type_snprintf(typestr, sizeof(typestr), obj, 0); } if (loutput->show_indexes[obj->type] && idx != (unsigned)-1 && obj->depth != 0 && obj->type != HWLOC_OBJ_PCI_DEVICE && (obj->type != HWLOC_OBJ_BRIDGE || obj->attr->bridge.upstream_type == HWLOC_OBJ_BRIDGE_HOST)) snprintf(indexstr, sizeof(indexstr), "%s%u", indexprefix, idx); if (loutput->show_attrs[obj->type]) { attrlen = hwloc_obj_attr_snprintf(attrstr, sizeof(attrstr), obj, " ", 0); /* display the root total_memory (cannot be local_memory since root cannot be a NUMA node) */ if (!obj->parent && obj->total_memory) snprintf(totmemstr, sizeof(totmemstr), " (%lu%s total)", (unsigned long) hwloc_memory_size_printf_value(obj->total_memory, 0), hwloc_memory_size_printf_unit(obj->total_memory, 0)); } else attrlen = 0; if (attrlen > 0) return snprintf(text, textlen, "%s%s (%s)%s", typestr, indexstr, attrstr, totmemstr); else return snprintf(text, textlen, "%s%s%s", typestr, indexstr, totmemstr); }
static int lstopo_obj_snprintf(char *text, size_t textlen, hwloc_obj_t obj, int logical) { unsigned idx = logical ? obj->logical_index : obj->os_index; const char *indexprefix = logical ? " L#" : " P#"; const char *value; char typestr[32]; char indexstr[32]= ""; char attrstr[256]; char totmemstr[64] = ""; int attrlen; /* For OSDev, Misc and Group, name replaces type+index+attrs */ if (obj->name && (obj->type == HWLOC_OBJ_OS_DEVICE || obj->type == HWLOC_OBJ_MISC || obj->type == HWLOC_OBJ_GROUP)) { return snprintf(text, textlen, "%s", obj->name); } /* Type replaces the basic type name */ if ((value = hwloc_obj_get_info_by_name(obj, "Type")) != NULL) { snprintf(typestr, sizeof(typestr), "%s", value); } else { hwloc_obj_type_snprintf(typestr, sizeof(typestr), obj, 0); } if (idx != (unsigned)-1 && obj->depth != 0 && obj->type != HWLOC_OBJ_PCI_DEVICE && (obj->type != HWLOC_OBJ_BRIDGE || obj->attr->bridge.upstream_type == HWLOC_OBJ_BRIDGE_HOST)) snprintf(indexstr, sizeof(indexstr), "%s%u", indexprefix, idx); attrlen = hwloc_obj_attr_snprintf(attrstr, sizeof(attrstr), obj, " ", 0); /* display the root total_memory if different from the local_memory (already shown) */ if (!obj->parent && obj->memory.total_memory > obj->memory.local_memory) snprintf(totmemstr, sizeof(totmemstr), " (%lu%s total)", (unsigned long) hwloc_memory_size_printf_value(obj->memory.total_memory, 0), hwloc_memory_size_printf_unit(obj->memory.total_memory, 0)); if (attrlen > 0) return snprintf(text, textlen, "%s%s (%s)%s", typestr, indexstr, attrstr, totmemstr); else return snprintf(text, textlen, "%s%s%s", typestr, indexstr, totmemstr); }
static void output_console_obj (hwloc_topology_t topology, hwloc_obj_t l, FILE *output, int logical, int verbose_mode, int collapsed) { unsigned idx = logical ? l->logical_index : l->os_index; const char *value; char pidxstr[16] = "P#[collapsed]"; char lidxstr[16] = "L#[collapsed]"; if (!collapsed || l->type != HWLOC_OBJ_PCI_DEVICE) { snprintf(pidxstr, sizeof(pidxstr), "P#%u", l->os_index); snprintf(lidxstr, sizeof(lidxstr), "L#%u", l->logical_index); } if (lstopo_show_cpuset < 2) { char type[64], *attr, phys[32] = ""; int len; value = hwloc_obj_get_info_by_name(l, "Type"); hwloc_obj_type_snprintf (type, sizeof(type), l, verbose_mode-1); if (value) fprintf(output, "%s(%s)", type, value); else fprintf(output, "%s", type); if (l->depth != 0 && idx != (unsigned)-1 && l->type != HWLOC_OBJ_MISC && l->type != HWLOC_OBJ_PCI_DEVICE && (l->type != HWLOC_OBJ_BRIDGE || l->attr->bridge.upstream_type == HWLOC_OBJ_BRIDGE_HOST)) fprintf(output, " %s", logical ? lidxstr : pidxstr); if (l->name && (l->type == HWLOC_OBJ_MISC || l->type == HWLOC_OBJ_GROUP)) fprintf(output, " %s", l->name); if (logical && l->os_index != (unsigned) -1 && (verbose_mode >= 2 || l->type == HWLOC_OBJ_PU || l->type == HWLOC_OBJ_NUMANODE)) snprintf(phys, sizeof(phys), "%s", pidxstr); /* display attributes */ len = hwloc_obj_attr_snprintf (NULL, 0, l, " ", verbose_mode-1); attr = malloc(len+1); *attr = '\0'; hwloc_obj_attr_snprintf (attr, len+1, l, " ", verbose_mode-1); if (*phys || *attr) { const char *separator = *phys != '\0' && *attr!= '\0' ? " " : ""; fprintf(output, " (%s%s%s)", phys, separator, attr); } free(attr); /* display the root total_memory if not verbose (already shown) * and different from the local_memory (already shown) */ if (verbose_mode == 1 && !l->parent && l->memory.total_memory > l->memory.local_memory) fprintf(output, " (%lu%s total)", (unsigned long) hwloc_memory_size_printf_value(l->memory.total_memory, 0), hwloc_memory_size_printf_unit(l->memory.total_memory, 0)); /* append the name */ if (l->name && (l->type == HWLOC_OBJ_OS_DEVICE || verbose_mode >= 2) && l->type != HWLOC_OBJ_MISC && l->type != HWLOC_OBJ_GROUP) fprintf(output, " \"%s\"", l->name); } if (!l->cpuset) return; if (lstopo_show_cpuset == 1) fprintf(output, " cpuset="); if (lstopo_show_cpuset) { char *cpusetstr; if (lstopo_show_taskset) hwloc_bitmap_taskset_asprintf(&cpusetstr, l->cpuset); else hwloc_bitmap_asprintf(&cpusetstr, l->cpuset); fprintf(output, "%s", cpusetstr); free(cpusetstr); } /* annotate if the PU is forbidden/running */ if (l->type == HWLOC_OBJ_PU && verbose_mode >= 2) { if (lstopo_pu_forbidden(l)) fprintf(output, " (forbidden)"); else if (lstopo_pu_running(topology, l)) fprintf(output, " (running)"); } }