split transactions

Comments and questions to the author of the "Down to the TLP" posts (Eli Billauer)

split transactions

Postby Guest » Fri Mar 15, 2013 4:32 pm

Hello,

i need an example of complex (split over multiple TLPs) transactions for memory read accesses (not only the simple/easy case).
If a completer receives a request that can not respond in one CplD-TLP, how does it respond?
How does the requester interpret the multiple CplD-TLPs and build internally a correct answer for it? How do it reassemble the multiple memory-chunks to one consistent memory-block?

Regards,
Erik
Guest
 

Re: split transactions

Postby support » Fri Mar 15, 2013 8:42 pm

A split transaction takes place whenever the read request is longer than the Maximal Payload size. In most settings, the maximal read request size is bigger than the allowed payload size, so this is a rather common scenario in data-intensive applications. The size limits are determined by both sides' capabilities.

When the request requires a data chunk which can't fit into a single TLP, the completer sends them in segments in increasing address order (unless relaxed ordering is allowed). There is also a Lower Address field in each completion TLP, which tells the receiver what the starting address' LSBs are, but that's actually unnecessary information, if the receiver increments its address pointer as it receives the data.

There's also a restriction on where the completion TLPs may be split (on 64 or 128 bytes' boundary) but this is, again, unnecessary to know if you're on the receiving part (unless you want to take advantage of this).

Hope this clarified things a bit.
support
 
Posts: 626
Joined: Tue Apr 24, 2012 3:46 pm

Re: split transactions

Postby Guest » Sat Mar 16, 2013 7:54 pm

Hello eli,

thank you for your response.

Hope this clarified things a bit.
Not really, sorry.
There are some other fields in the header that seems to have any meaning in the completions and i have no idea how they must be set.
I am interested in a (or multiple) complete real-world example for complex situations (not the easy cases) with complete headers and so on.
I have read the specification multiple times, but i think i need now descriptive examples for understanding.

There's also a restriction on where the completion TLPs may be split (on 64 or 128 bytes' boundary)
That is in the case of a big Maximum Payload Size (eg. ≥1kB)? That kind of meaning can have this small boundary for big TLPs?

but this is, again, unnecessary to know if you're on the receiving part (unless you want to take advantage of this).
I am on both sides and i would need the speed.

Regards,
Erik
Guest
 

Re: split transactions

Postby support » Sat Mar 16, 2013 8:36 pm

Please note that there's the Maximal Payload Size (how many bytes a single TLP can carry) and Maximal Request Size (how many bytes a single read request can ask for). Crossing 64-bytes boundaries are therefore pretty common.

As for just raw dumps, maybe this will help:

http://billauer.co.il/blog/2011/06/pcie ... ample-dma/
support
 
Posts: 626
Joined: Tue Apr 24, 2012 3:46 pm


Return to General PCIe

cron