Hi JeeHeng, > > +const char *cpu_topo_to_string(CPUTopoLevel topo) > > +{ > > + return cpu_topo_descriptors[topo].name; > > +} > > + > > +CPUTopoLevel string_to_cpu_topo(char *str) > > Can use const char *str. Okay, I'll. > > +{ > > + for (int i = 0; i < ARRAY_SIZE(cpu_topo_descriptors); i++) { > > + CPUTopoInfo *info = &cpu_topo_descriptors[i]; > > + > > + if (!strcmp(info->name, str)) { > > Suggest to use strncmp instead. Thanks! I tries "l1i-cache=coree", and it causes Segmentation fault. Will fix. > > + return (CPUTopoLevel)i; > > + } > > + } > > + return CPU_TOPO_LEVEL_MAX; > > +} > > @@ -304,7 +304,7 @@ static uint32_t num_threads_by_topo_level(X86CPUTopoInfo *topo_info, > > enum CPUTopoLevel topo_level) > > { > > switch (topo_level) { > > - case CPU_TOPO_LEVEL_SMT: > > + case CPU_TOPO_LEVEL_THREAD: > > return 1; > Just wondering why 'return 1' is used directly for the thread, but not > for the rest? This helper returens how many threads in one topology domain/container at this level. For thread level, it calculates how many threads are in one thread domain, so it returns 1 directly. Thanks, Zhao