(Forgot to CC the list)

Hi Brice,

On Wednesday, July 07, 2010 04:16:19 pm Brice Goglin wrote:
> Le 07/07/2010 13:40, Jirka Hladky a écrit :
> > Well, I would expect to get following reported on STDERR (refer to lstopo
> > output) when -v is specified:
> > 
> > ./hwloc-calc -v --list 4 proc:60
> > 
> >         L2 #30 (256KB)
> > 
> > ./hwloc-calc -v --list 5 proc:60
> > 
> >           L1 #30 (32KB)
> > 
> > ./hwloc-calc -v --list 6 proc:60
> > 
> >             Core #30
> > 
> > Without "-v" it's fine to report just a number. Does it make sense?
> 
> Well, --list was designed to generate x,y,z strings that may be passed
> to external tools such as numactl or taskset. Adding the type as a
> prefix would not help much there.
Right. I completely agree. 

> 
> > BTW, --objects reports Cache (It would be useful to add the size of Cache
> > to the report)
> 
> Could add that to -v maybe.
That was my point. STDOUT output has to stay intact. This is nice-to-have 
(IMHO very low priority) for STDERR.

> the above is expected. --objects return the largest objects included
> inside your input.
> 
> The largest object inside a hypethread is this hyperthread. The largest
> object inside two hyperthreads of the same core is this entire core. The
> largest objects inside 2 hyperthreads of one core and another
> hyperthread of another core is the first core + the other hyperthread.
> See ? Maybe it's not well documented, and --objects is probably not the
> right name. In the API, I say:
> 
> /** \brief Get the first largest object included in the given cpuset \p
> set. *
>  * \return the first object that is included in \p set and whose parent is
> not. *
>  * This is convenient for iterating over all largest objects within a CPU
> set * by doing a loop getting the first largest object and clearing its
> CPU set * from the remaining CPU set.
>  */
> hwloc_obj_t hwloc_get_first_largest_obj_inside_cpuset(hwloc_topology_t
> topology, hwloc_const_cpuset_t set);
> 
> /** \brief Get the set of largest objects covering exactly a given cpuset
> \p set *
>  * \return the number of objects returned in \p objs.
>  */
> int hwloc_get_largest_objs_inside_cpuset (hwloc_topology_t topology,
> hwloc_const_cpuset_t set, hwloc_obj_t * __hwloc_restrict objs, int max);
I do agree with you. hwloc_get_largest_objs_inside_cpuset does it right. On 
the other hand, I do believe that on user level you would expect --objects to 
give you the parrent object. If it gives you the same object as in input it's 
not useful. 

IMHO, hwloc_get_largest_objs_inside_cpuset is right but hwloc-calc --objects 
should call hwloc_get_largest_objs_inside_cpuset 2 times on system with 
hyperthreading enabled to get meaningful output. 

You can perhaps solve this problem by adding the new option 
--ancestor_tree
to show all ancestors.

IMHO, these options do not belong to hwloc-calc utility anyhow. The output of 
this utility should be passed to either numactl or taskset or hwloc-bind. The 
output of objects option does not fit into this framework:


[root@dell-per810-01 utils]# ./hwloc-calc --objects core:0 2>/dev/null
L2Cache:0

IMHO, not even hwloc-bind can handle "L2Cache:0" output. I would suggest to 
move --objects option to hwloc-info or change it's behaviour so that it gives 
output useful for CPU affinity commands (taskset, numactl, hwloc-bind)

Please notice that I'm not using --objects option in real life and I may be 
just wrong. These are just mine 2 cents.

> 
> >> Yes, recently added error messages are ok, I need to fix the old ones,
> >> those that only appear in verbose mode.
> > 
> > Thanks! :-)
> 
> I committed this fix.
Thanks Brice!!

I do apologize for the long posts today. I really love hwloc. Perhaps I'm just 
too picky:-) and I'm pointing out tiny problems. You see, I'm not using --
objects but I will definitely use --list option once it's released.

Greetings,
Jirka

Reply via email to