Open MPI logo

Hardware Locality Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Hardware Locality Development mailing list

Subject: [hwloc-devel] [RFC] I/O objects in level
From: Brice Goglin (Brice.Goglin_at_[hidden])
Date: 2011-08-22 05:17:58


Before branching v1.3 and doing RC1, I'd like to discuss how I/O devices
are stored in the topology. We currently have dedicated pci device and
OS device lists together with custom helpers (get_next_pcidev/osdev).
Having helpers to traverse hostbridges or bridges may help in some
cases, but I don't think we want to add that many custom things.

So instead I wroted the attached patch which puts I/O devices in levels
so that they are almost regular objects. The only caveat is that those
objects are still special so they can't have a real depth, that's why I
am adding some special depth for them:
    HWLOC_TYPE_DEPTH_BRIDGE = -3
    HWLOC_TYPE_DEPTH_PCI_DEVICE = -4
    HWLOC_TYPE_DEPTH_OS_DEVICE = -5
There might a way to use normal depth for I/O devices too, but it would
make the code much more ugly and I am not sure we really need this. And
we can still change this after RC1 anyway.

Pros:
* Uniform interface
  + no need for custom get_next_<type> helpers anymore (I kept them in
hwloc/helpers.h but they could go away)
  + helpers such as get_obj_by_type/depth work fine
  + documentation is more simple, we just need to say that they have
special depth
* Easy to extend to other special types without adding new helpers (just
need to add new special depth for new types
* Changes in the core are actually small

Cons:
* Several internal functions need special care for this new special depths
* The bridge levels contains objects that may be parent/child of each other

Opinions ?

Brice