RE: [PATCH] SCSI driver for VMware's virtual HBA.

Chetan.Loke
2009-08-29T12:05:21Z

> -----Original Message-----
> From: Alok Kataria [mailto:akataria@vmware.com]
> Sent: Friday, August 28, 2009 6:31 PM
> To: Loke,Chetan
> Cc: linux-kernel@vger.kernel.org; akpm@linux-foundation.org; Dmitry
> Torokhov; James.Bottomley@HansenPartnership.com; robert.w.love@intel.com;
> randy.dunlap@oracle.com; michaelc@cs.wisc.edu
> Subject: RE: [PATCH] SCSI driver for VMware's virtual HBA.
>
> Hi Chetan,

Hi

>
> On Fri, 2009-08-28 at 14:18 -0700, Chetan.Loke@Emulex.Com wrote:
> > Alok,
> >
> >
> > > +static int __devinit pvscsi_allocate_rings(struct pvscsi_adapter
> > > *adapter)
> > > +{
> > > + adapter->rings_state = pci_alloc_consistent(adapter->dev, PAGE_SIZE,
> > > + &adapter->ringStatePA);
> > > + adapter->req_ring = pci_alloc_consistent(adapter->dev,
> > > + adapter->req_pages * PAGE_SIZE,
> > > + &adapter->reqRingPA);
> > > + adapter->cmp_ring = pci_alloc_consistent(adapter->dev,
> > > + adapter->cmp_pages * PAGE_SIZE,
> > > + &adapter->cmpRingPA);

> >
> > I understand the emulation etc. But I see that this function isn't
> > allocating multiple rings right? Didn't see any performance benefits?
> >
>
> The function is allocating multiple rings, actually 2 of them for the
> IO path, request and completion rings (req_ring, cmp_ring).
>
> Let me know if you were asking something else.
>

I was using 'Ring' loosely.
So, Ring == [req_path,cmpl_path]
Example - R0[req-path,cmpl-path]

But the code doesn't allocate R0,R1,...,RN.

Existing code -

--------
Ring-0
--------
Req
+
|
+
Cmpl

Why not multiple rings as shown below -

-------- --------
Ring-0 Ring-M
-------- --------
Req Req
+ +
| |
+ +
Cmpl Cmpl

Creating multiple rings @ the guest level buys nothing in terms of performance? This is also related to how the hypervisor will schedule the world-interrupts. If 'a' pv-driver has multiple interrupt lines enabled then will the interrupts/ISR's get routed on different PCPU's for a vmworld? Or is there a limitation?

Chetan