[igt-dev] [RFC] IGT device scanning and selection

Michał Winiarski michal.winiarski at intel.com
Tue Jun 4 09:10:21 UTC 2019


On Tue, Jun 04, 2019 at 08:29:42AM +0000, Ser, Simon wrote:
> On Tue, 2019-06-04 at 08:09 +0000, Kempczynski, Zbigniew wrote:
> > Hi all.
> > 
> > IGT device management is a little bit old. More than one GPU on the machine 
> > are available on the market from years so there's time to propose new device
> > management in IGT.
> 
> Nice! There is definitely room for improvement here, thanks for working
> on this!
> 
> I think we already have an env variable for (some of) this:
> IGT_FORCE_DRIVER. It's not great though.
> 
> > Selection using bus-device or functional specifiers.
> > ---
> > 1. bus-device selection
> >    Current devices are mostly PCI-Express devices, but we should be able to
> >    open to specify device using any bus selection. For example:
> >    --device PCI:00:02.0
> >    would select PCI device on 00 bus, 02 device and function 0.
> > 
> >    --device USB:002:003
> >    would select device 003 on bus 002.
> 
> Why not specify the DRM node path, instead of this?

To avoid coupling DRM node with device. Even today you can run IGT without any
DRM modules loaded (IGT is going to load the modules on an attempt to open DRM
node).

As a bonus, if we follow that convention while refactoring in IGT, writing tests
for module-reload / device-unbind / device-remove will become slightly less
convoluted.

-Michał

> 
> >    Future buses can be specified by extending --device argument parsing.
> 
> Some devices like the Raspberry Pi use platform buses. vc4 uses IGT, so
> it would be nice to support that.
> 
> > 2. Functional selection
> >    CI environments shouldn't rely on bus-device. Same devices (GPUs) may be 
> >    inserted into different slots so functional selection is required. 
> >    
> >    Let's imagine machine have 5 cards:
> >    00:02:0 - VendorX, product: A
> >    00:03:0 - VendorY, product: B
> >    00:04:0 - VendorX, product: A
> >    00:05:0 - VendorY, product: C
> >    00:06:0 - VendorX, product: D
> > 
> >    We should be able to select same device regardless order on the bus.
> >    For example:
> >    --device VendorX:A 
> >    --device VendorX:A:0 
> >    will select first A card of VendorX
> > 
> >    --device VendorY:A:1
> >    will select second A card of VendorX
> 
> Hmm. What defines the order between the "first" and the "second" one?
> This doesn't seem like it's "regardless order on the bus" to me? Am I
> missing something?
> 
> >    If vendor would like to have its own parsing method for the product
> >    overriding parsing will be possible. For example:
> >    --device VendorX:GPU-Card:0
> >    VendorX must then register its own function to handle 'GPU-Card:0'
> >    string on his own. 
> 
> What is the use-case for this?
> 
> > 
> > ===
> > 
> > Device management
> > ---
> > New device management should allow user to see current devices. 
> > I propose IGT tool called 'lsgpu' which would discover devices in 
> > any registered bus topologies scanning methods.
> 
> I believe we can do everything with libdrm's drmGetDevice.
> 
> Note that some utilities (e.g. https://github.com/ascent12/drm_info)
> already expose this functionality to some extend.
> _______________________________________________
> igt-dev mailing list
> igt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev


More information about the igt-dev mailing list