public inbox for linux-pci@vger.kernel.org
 help / color / mirror / Atom feed
From: Sinan Kaya <okaya@codeaurora.org>
To: Bjorn Helgaas <helgaas@kernel.org>
Cc: Myron Stowe <myron.stowe@gmail.com>,
	Ron Yuan <ron.yuan@memblaze.com>,
	Radjendirane Codandaramane <radjendirane.codanda@microsemi.com>,
	Bjorn Helgaas <bhelgaas@google.com>,
	Bo Chen <bo.chen@memblaze.com>,
	William Huang <william.huang@memblaze.com>,
	Fengming Wu <fengming.wu@memblaze.com>,
	Jason Jiang <jason.jiang@microsemi.com>,
	Ramyakanth Edupuganti <Ramyakanth.Edupuganti@microsemi.com>,
	William Cheng <william.cheng@microsemi.com>,
	"Kim Helper (khelper)" <khelper@micron.com>,
	Linux PCI <linux-pci@vger.kernel.org>
Subject: Re: One Question About PCIe BUS Config Type with pcie_bus_safe or pcie_bus_perf On NVMe Device
Date: Thu, 1 Feb 2018 10:14:14 -0500	[thread overview]
Message-ID: <31eecdff-68e7-4891-5034-9a387e79a97b@codeaurora.org> (raw)
In-Reply-To: <20180201033753.GA98500@bhelgaas-glaptop.roam.corp.google.com>

On 1/31/2018 10:37 PM, Bjorn Helgaas wrote:
> On Wed, Jan 31, 2018 at 07:13:56PM -0500, Sinan Kaya wrote:
>> On 1/31/2018 7:01 PM, Myron Stowe wrote:
>>>> I think from above examples:
>>>> 1. perf mode is moving devices to 256 MPS as it can.
>>>> 2. safe mode is setting to 128 MPS
>>>> 3. perf mode set MRRS=MPS is a CORRECT call for device with MPSC lower than its parents.
>>>> 4. perf mode set MRRS=MPS is not necessary for a device with SAME MPSC as its parents?
>>>> 5. it is an interested point to me that slot/switch/root MRRS are always set to 128B, I have not found out why.
> 
>>> In Sinan's original posting, a reference to
>>> https://www.xilinx.com/support/documentation/white_papers/wp350.pdf
>>> was provided.  When I read that paper and got to the "Read
>>> Completion Boundary" section I thought to myself: "If RCB can only
>>> be 64 or 128 bytes then what's the point of MPS (or MRRS) as all
>>> TLP completions would be limited to 64 or 128 bytes? (see also the
>>> paper's 'Read Completions with the RCB Set to 64 Bytes' figure)".
>>> I brought this up to a colleague and they surmised that possibly
>>> only _lower end_ (a.k.a. lazy) chipset implementations would truly
>>> have RCB limited sized completions; higher end chipsets would of
>>> course have to comply with RCB when communicating with the memory
>>> controller but could then aggregate data into larger MPS (or MRRS)
>>> sized TLP completion packets.  Perhaps this might explain why you
>>> always saw slot/switch/root values set at 128B?
>>
>> I have looked at that paper before. It is plain wrong. Read
>> Completion Boundary is about the alignment of addresses that an
>> endpoint is sending in memory read packets according to the spec. It
>> has nothing to do with the packet size.
> 
> I hope this isn't being too pedantic, but I think RCB applies to the
> *completer*, not the requester.  Typically an endpoint generates a
> memory read and a root port supplies data to complete it.
> 
> I didn't see anything in the "Read Completion Boundary" section of the
> paper that I thought *contradicted* the spec.  I did think this was
> speculation:
> 
>   Typically, most root complexes set the RCB at 64 bytes and return
>   data in 64-byte completions instead of what might be allowed by the
>   MPS.
> 
> That would be legal per spec, but I don't have direct knowledge of
> whether root complexes actually do that.  I tend to doubt it because
> it seems like people do observe performance differences based on the
> MPS setting.
> 
> I agree that the "Read Transaction Throughput" section is inaccurate
> when it says:
> 
>   The size of the completion is determined by a completer's read
>   completion boundary.
> 
> RCB may limit the size of the first completion to less than MPS, but
> subsequent completions (except the final one) only need to be a
> multiple of RCB.
> 
> RCB determines the boundaries at which a completer is allowed to end a
> TLP (PCIe r4.0, sec 2.3.1.1 has the rules).  Let's work through an
> example:
> 
>   MPS=128
>   RCB=64
> 
>   Endpoint generates a 256-byte read request for addresses 0x2-0x101
> 
> In the absence of RCB, a root port could satisfy this request with two
> completions:
> 
>   completion 0: bytes   0x2- 0x81  (128 bytes)  <-- illegal
>   completion 0: bytes  0x82-0x101  (128 bytes)
> 
> But with RCB, the first completion is illegal because it doesn't
> satisfy the entire request and it doesn't end on a multiple of RCB.
> Because of RCB the completer must respond with at least three
> completions.  The best it can do is this:
> 
>   completion 0: bytes   0x2- 0x7f  (126 bytes)
>   completion 1: bytes  0x80- 0xff  (128 bytes)
>   completion 2: bytes 0x100-0x101  (2 bytes)
> 
> It is *allowed* but not required to respond with more completions,
> e.g.,
> 
>   completion 0: bytes   0x2- 0x3f  (62 bytes)
>   completion 1: bytes  0x40- 0x7f  (64 bytes)
>   completion 2: bytes  0x80- 0xbf  (64 bytes)
>   completion 3: bytes  0xc0- 0xff  (64 bytes)
>   completion 4: bytes 0x100-0x101  (2 bytes)
> 

Very good summary. Thanks for doing a detailed analysis.


-- 
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.

  reply	other threads:[~2018-02-01 15:14 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <SH2PR01MB106A1E21DEB5FE3FFB3D61C83E90@SH2PR01MB106.CHNPR01.prod.partner.outlook.cn>
     [not found] ` <ef16a3cc-b641-a30d-644a-7940e340eb3e@codeaurora.org>
     [not found]   ` <SHAPR01MB173A5EA1677C2138CB528F2FEE90@SHAPR01MB173.CHNPR01.prod.partner.outlook.cn>
     [not found]     ` <5727b0b1-f0d5-7c78-373e-fc9d1bd662d2@codeaurora.org>
     [not found]       ` <CABhMZUU0643U-qVc9ymA+1PMZToSLFm2dg8-cu=iQ2LGw2Pi8Q@mail.gmail.com>
     [not found]         ` <SHAPR01MB173A36104635A8BFF9A83E1FEE80@SHAPR01MB173.CHNPR01.prod.partner.outlook.cn>
2018-01-18 16:24           ` One Question About PCIe BUS Config Type with pcie_bus_safe or pcie_bus_perf On NVMe Device Sinan Kaya
2018-01-19 20:51             ` Bjorn Helgaas
2018-01-20 19:20               ` Sinan Kaya
2018-01-20 19:29                 ` Sinan Kaya
2018-01-22 21:36                 ` Bjorn Helgaas
2018-01-22 22:04                   ` Sinan Kaya
2018-01-22 22:51                     ` Bjorn Helgaas
2018-01-22 23:24                       ` Sinan Kaya
2018-01-23  0:16                         ` Bjorn Helgaas
2018-01-23  2:27                           ` Sinan Kaya
2018-01-23 13:25                             ` Ron Yuan
2018-01-23 14:01                               ` Ron Yuan
2018-01-23 17:48                                 ` Bjorn Helgaas
2018-01-23 18:07                                   ` Bjorn Helgaas
2018-01-23 14:38                               ` Bjorn Helgaas
2018-01-23 23:50                                 ` Radjendirane Codandaramane
2018-01-24 16:29                                   ` Myron Stowe
2018-01-24 17:59                                     ` Ron Yuan
2018-01-24 18:01                                   ` Bjorn Helgaas
2018-01-31  8:40                                     ` Ron Yuan
2018-02-01  0:01                                       ` Myron Stowe
2018-02-01  0:13                                         ` Sinan Kaya
2018-02-01  3:37                                           ` Bjorn Helgaas
2018-02-01 15:14                                             ` Sinan Kaya [this message]
2018-02-05  1:02                                               ` Sinan Kaya

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=31eecdff-68e7-4891-5034-9a387e79a97b@codeaurora.org \
    --to=okaya@codeaurora.org \
    --cc=Ramyakanth.Edupuganti@microsemi.com \
    --cc=bhelgaas@google.com \
    --cc=bo.chen@memblaze.com \
    --cc=fengming.wu@memblaze.com \
    --cc=helgaas@kernel.org \
    --cc=jason.jiang@microsemi.com \
    --cc=khelper@micron.com \
    --cc=linux-pci@vger.kernel.org \
    --cc=myron.stowe@gmail.com \
    --cc=radjendirane.codanda@microsemi.com \
    --cc=ron.yuan@memblaze.com \
    --cc=william.cheng@microsemi.com \
    --cc=william.huang@memblaze.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox