[openstack-dev] FPGA as a dynamic nested resources
Roman Dobosz
roman.dobosz at intel.com
Fri Jul 29 07:17:39 UTC 2016
On Thu, 28 Jul 2016 10:50:08 -0400
Jay Pipes <jaypipes at gmail.com> wrote:
> Roman, great thread, thanks for posting! Comment inline :)
Thanks!
> <snip>
> > It can identified 3 levels of FPGA resources, which can be nested one
> > on the others:
> >
> > 1. Whole FPGA. If used discrete FPGA, than even today it might be pass
> > through to the VM.
> >
> > 2. Region in FPGA. Some of the FPGA models can be divided into regions
> > or slots. Also, for some model it is possible to (re)program such
> > region individually - in this case there is a possibility to pass
> > entire slot to the VM, so that it might be possible to reprogram
> > such slot, and utilize the algorithm within the VM.
> >
> > 3. Accelerator in region/FPGA. If there is an accelerator programmed
> > in the slot, it is possible, that such accelerator provides us with
> > Virtual Functions (similar to the SR-IOV), than every available VF
> > can be treated as a resource.
> >
> > 4. It might be also necessary to track every VF individually, although
> > I didn't assumed it will be needed, nevertheless with nested
> > resources it should be easy to handle it.
> >
> > Correlation between such resources are a bit different from NUMA -
> > while in NUMA case there is a possibility to either schedule a VM with
> > some memory specified, or request memory within NUMA cell, in FPGA if
> > there is slot taken, or accelerator already programmed and used, there
> > is no way to offer FPGA as a whole to the tenant, until all
> > accelerators and slots are free.
> >
> > I've followed Jay idea about nested resources and having in mind
> > blueprint[2] regarding dynamic resources I've prepared how it fit in.
> >
> <snip>
> >
> > To get id of resource of type acceleratorX to allocate 8 VF:
> >
> >
> > SELECT rp.id
> > FROM resource_providers rp
> > LEFT JOIN allocations al ON al.resource_provider_id = rp.id
> > LEFT JOIN inventories iv ON iv.resource_provider_id = rp.id
> > WHERE al.resource_class_id = 1668
> > AND (iv.total - COALESCE(al.used, 0)) >= 8;
>
> Right idea, yes, but you would need to INNER JOIN inventories and LEFT
> JOIN from the winnowed set of inventory records to a grouped projection
> of allocations. :)
>
> The SQL would be this:
>
> SELECT rp.id
> FROM resource_providers rp
> INNER JOIN inventories iv
> ON rp.id = iv.resource_provider_id
> AND iv.resource_class_id = 1688
> LEFT JOIN (
> SELECT resource_provider_id, SUM(used) as used
> FROM allocations
> WHERE resource_class_id = 1688
> GROUP BY resource_provider_id
> ) AS al
> ON iv.resource_provider_id = al.id
> WHERE (iv.total - COALESCE(al.used, 0)) >= 8;
Hm. I'm getting same results using the both queries. Certainly, I can't
see something obvious here, and for sure I'm no sql expert :)
> The other SQL queries you listed had a couple errors, but the ideas were
> mostly sound. I'll include the FPGA use cases when I write up the nested
> resource providers spec proposal.
Great, thank you!
> The only thing I'd say is that I was envisioning the dynamic resource
> classes for FPGAs to be the resource context to an already-flashed
> algorithm, not to the FPGA root device (or a region even). But, who
> knows, perhaps we can work something out. More discussion on the spec...
For sure, we can start from defining basic case, and expand it if
needed.
--
Cheers,
Roman Dobosz
More information about the OpenStack-dev
mailing list