METHOD AND APPARATUS TO ALLOW DYNAMIC VARIATION OF ORDERING ENFORCEMENT BETWEEN TRANSACTIONS IN A STRONGLY ORDERED COMPUTER INTERCONNECT
A method of enforcing the ordering of read and write transactions for an adapter unit connected to a strongly-ordered bus. The adapter unit has a set of read buffers and write buffers. Initiator write transactions and target read completion transactions are performed on the bus in the original order in which the transactions are received. An initiator read transaction request is enqueued in the read buffer but selectively awaits the performance of one or more pending initiator write transactions in the write buffer before the read transaction request is presented to the bus. In this way, initiator write transactions on which the read transaction request depends and pending in the write buffer are retired to the bus before the initiator read transaction request is performed, thus assuring that the initiator read transaction request is not performed ahead of the initiator write transaction on which the read transaction request depends.
This application is a divisional of copending application Ser. No. 10/864,617, filed Jun. 9, 2004, which is a continuation of copending application Ser. No. 10/035,983, filed Dec. 24, 2001, (now U.S. Pat. No. 6,754,737, issued Jun. 22, 2004), which are hereby incorporated by reference herein.
This application is related to U.S. application entitled “Method And Apparatus For Ensuring Multi-Threaded Transaction Ordering In A Strongly Ordered Computer Interconnect,” filed on Dec. 24, 2001, Ser. No. 10/035,988.
BACKGROUNDThe present invention relates generally to transactions on a computer interconnect and, more specifically, to the ordering of read and write transactions on a computer bus.
In one version of the PCI bus 10, an initiator (master) connects to a target (slave) via the bus to perform a transaction.
In addition to data transactions, the PCI bus supports Delayed Transactions for reads and writes. A Delayed Transaction has two parts, the request part and the completion part. In the first part 44 in
It is easily appreciated by one skilled in the art that the above-described operation of the PCI bus is exceedingly inefficient. Throughput on the PCI bus is lost for two reasons, the insertion of wait states and the use of the retry protocol.
Wait states cause a direct loss in throughput. Just one wait state inserted in each data phase is a 50% loss in throughput during the data burst. This means that for a 32 bit PCI bus clocked at 33 MHz, the throughput during the data phase is reduced to 66 Megabytes per second from 132 Megabytes per second. If the bus were clocked at 66 MHz, the throughput loss is even greater—a full 132 Megabytes per second of loss. For devices that can sustain transfer rates of about 1 Gigabyte per second, the bus is simply unworkable.
The Delayed Transaction protocol also causes a significant loss in throughput because bus cycles that could be used for data transfers are used to support a high-overhead protocol. Bus cycles are wasted when the target replies with a disconnect, when the initiator ends the current transaction, lets the bus go idle, re-arbitrates for the bus, and initiator then re-performs the address phase of the disconnected transaction. Thus, the cost of each retry is at least 6 clocks, 4 clocks to return the bus to the idle state, at least one clock for arbitration, and at least one more clock for an address phase. During these 6 clocks an entire 4 dword burst could have occurred.
In both of these cases throughput was lost because the target was not ready to respond. Clocking the bus faster to improve the throughput only causes more clock cycles to be lost due to wait states and the inefficient Delayed Transaction protocol.
An updated version of the PCI bus, PCI-X, was developed to address these and other deficiencies. In the PCI-X specification, wait states are not permitted once data transfers have begun. A data burst, once started, must proceed at full speed on the bus. The read, write and split request transactions for PCI-X are shown for reference in
Additionally, in the PCI-X specification, the inefficient Delayed Transactions have been replaced by Split Transactions, as shown in
In a Split Transaction, a Requester initiates a transfer 75 by performing an address/cmd phase 86, an attribute phase 88, a response phase 90, an unused data phase 92 and a surrender phase 94. Upon receiving a Split Response Request 96 from a Completer at the appropriate time in the transaction, the Requester removes itself from the bus, commits resources to the transaction and suspends the transaction until the Completer responds. This makes the bus available for use to other Requesters and Completers in the interim. When the data transfer is ready to occur at the Completer, the Completer acts as an Initiator, obtaining the bus and performing a Split Completion transaction 71, which includes an address phase 70, an attribute phase 72, a response phase 74 and one or more data phases 76a-d during which the requested data is transferred to the Requester.
To make it easier to conform to the newer PCI-X specification and to improve the performance of the older PCI protocol, it is best that both the Requester and Completer are implemented with read and write storage buffers so that when a write or read data burst is ready to occur, it can proceed at full bus speeds. Additionally, both the Requester and Completer are likely, in most implementations, to have Initiator and Target interfaces to carry out the Split Transaction protocol and each interface is required to be registered on both inputs and outputs.
However, the use of read and write buffers and Initiator and Target interfaces on the adapter increases the chances that PCI and PCI-X read/write ordering and deadlock avoidance rules may not be met.
PCI bus ordering rules require that if write data is posted to a write buffer (such as a posted-write buffer in a PCI-to-PCI or host/PCI bridge) the data must be flushed to its final destination (memory) before a read of that same data is allowed by the same or different bus master. Also, a bridge must perform all posted writes in the same order in which they were originally posted and is only permitted to post writes to regular memory targets.
On the PCI-X bus, there are more extensive read-write ordering rules when buffers are involved because of Split Transactions. For example, for bridges between a PCI-X bus and a host bus or between two PCI-X busses, there are three sets of rules, as set forth, in summary, below. The rules are set forth in more detail on pages 573-577 of PCI-X System Architecture, Tom Shanley, ISBN 0-201-72682-3, which is incorporated by reference into the present application.
Case I. A posted memory write transaction (PMW) is received in a bridge.
-
- (i) a subsequent split read request (SRR) or split write request (SWR) cannot be reordered to avoid returning incorrect read data (SRR) and to maintain write ordering (SWR);
- (ii) a subsequent split read completion (SRC) generally cannot be reordered to avoid returning incorrect read data;
- (iii) a subsequent split write completion may be permitted because the writes are in different directions; and
- (iv) a subsequent PMW generally cannot be performed until the first PMW is completed and PMWs must complete in the order received to maintain write ordering;
Case II—A split read request (SRR) or split write request (SWR) occurs at a bridge.
-
- (i) a subsequent split read request or split write request can be reordered;
- (ii) a subsequent split read completion, or split write completion or posted memory write must be allowed ahead of the SRR or SWR to avoid a deadlock;
Case III—A split read completion (SRC) or a split write completion (SWC) occurs at a bridge.
-
- (i) a subsequent split read request (SRR), split write request (SWR), split read completion (SRC) or split write completion (SWC) can be reordered;
- (ii) a posted memory write must go ahead of the SRC or SWC to avoid a deadlock.
Though there are some exceptions to these rules if a relaxed ordering (RO) bit is set in a transaction, the rules set forth the ordering of reads and writes so as to guarantee the proper operation of system software (Case I) and the avoidance of deadlocks (Cases II and III) for a bridge between the host bus and a PCI-X bus or between two PCI-X busses.
The use of read and write buffers and both an Initiator and Target interface on adapter units connected to the PCI bus along with the split transaction protocol creates a need to maintain certain ordering of read and write transactions on the adapter units.
Currently, one method of dealing with the ordering problem is to control all of the read-write transaction activity from a single thread, thereby serializing all of the transactions from a single point of control. While this may assure that the ordering problem is correctly addressed, the single thread approach is performance limiting both to the adapter and the system.
Therefore, there is a need to address the ordering problem on an adapter that has read and write buffers, Initiator and Target interfaces that connect to a strongly-ordered bus, such as the PCI or PCI-X bus, and a split transaction protocol, without using a single thread to serialize all of the activity of the adapter. The present invention is directed towards such a need.
BRIEF SUMMARYThe present invention provides an apparatus and method for meeting the ordering rules of PCI and PCI-X on an adapter unit connected to the PCI or PCI-X bus. The adapter unit has both an Initiator and Target interface for handling delayed or split transactions. In addition, the adapter unit is capable of multi-threaded operation, supporting more than one read or write transaction thread.
In accordance with one version of the present invention, buffer sharing is used to enforce ordering between split or delayed read completions (SRC, supplied by the target interface) and a write transaction (supplied by the initiator interface and posted in the adapter unit's local write buffer) and between two successive write transactions. The SRCs are queued in the same buffer as the write transactions so that they occur on the PCI bus in the order in which they originally occurred. This meets the Case I (ii) rule.
Ordering is enforced between initiator read transaction requests and posted initiator write transactions by write contingency flags. Whenever the initiator interface of the adapter unit issues a read transaction request, write contingency flags are set for the read transaction request, one for each pending initiator write that was accepted prior to the requested initiator read transaction request but not performed on the PCI bus. When a write transaction is performed on the bus, the contingency flag corresponding to the write transaction is cleared in all pending initiator read transaction request requests and when all the write contingency flags have been cleared for a particular initiator read transaction request, the initiator read transaction request is then permitted on the bus. This meets the Case I(i) rule.
In another version of the invention, read transaction requests are either ordered or non-ordered. Ordered read transaction requests have their write contingency flags set, whereas non-ordered read transaction requests do not. Whenever an ordered read transaction request is accepted, write contingency flags are set in the read transaction context for each pending write, i.e., writes that were accepted prior to the read and not yet performed on the PCI bus. Whenever a pending write is performed on the PCI bus, the contingency bits in the read context are cleared. For non-ordered read transaction requests, the write contingency flags are not set. A read transaction request is not presented on the PCI bus until all write contingencies are cleared for that read transaction request.
In yet another version of the invention, read transaction requests are selectively ordered, i.e., the read transaction requests are dependent on the retiring of selected ones of the pending write transactions. This selectively ordering is based on the properties of either the read transaction request, or one or more pending write transactions, or both. Properties of these transactions for the purpose of selectively ordering the read and write transactions include, but are not limited to, the address or address range of the transaction, and transaction attributes, such as the requester function number, the requester device number and the relaxed ordering attribute bit.
One method, in accordance with the present invention, is a method for enforcing ordering between read and write transactions for an adapter unit configured to connect to a bus, where the adapter unit has at least one read buffer and at least one write buffer containing a plurality of slots. The method includes the steps of enqueuing, in the write buffer, a first initiator write transaction to be performed on the bus and enqueuing, in the write buffer, a second initiator write transaction to be performed on the bus after the first initiator write transaction. An initiator read transaction request is received, in the read buffer, where the read buffer has a read context register for the initiator read transaction request. The read context register includes a write contingency flag entry for each slot of the plurality of slots in the write buffer. Performance, on the bus, of the read transaction request is required to follow the performance, on the bus, of the first initiator write transaction, but not the second initiator write transaction. The write contingency flags are cleared in the read context register for the initiator read transaction request, and if, after receiving the read transaction request, the performance of the first and second initiator write transactions have not started on the bus, the following steps occur: (i) a write contingency flag associated with the slot in the write buffer occupied by the first write transaction is set, in the read context register, to indicate the dependence of the read transaction request on the first initiator write transaction in the write buffer, (ii) the first write transaction on the bus is performed, (iii) after the performance of the write transaction is completed, the write contingency flag of the first write transaction in the read context register is cleared. If the write contingency flag of the first write transaction is not set in the read context register, the read transaction request is performed on the bus.
Additionally, the method includes enqueuing a target read completion transaction in the write buffer, where the target read completion transaction has a position in the write buffer either before or after the initiator write transaction based on whether the target read completion originally occurred before or after the initiator write transaction, and performing on the bus the transactions in the write buffer in the order in which the transactions were enqueued.
One advantage of the present invention is that the ordering rules of the PCI or PCI-X bus are not exported to any of the data sources or sinks with which the adapter unit of the present invention interoperates.
Another advantage of the present invention is that the flexibility of using ordered or non-ordered read transaction requests permits higher bandwidth and eliminates the chance of a dead-lock condition. Transactions that are independent of each other need not be burdened with the ordering rules, whereas transactions that are inter-dependent are burdened with the ordering rules so that correct software operation is assured.
Yet another advantage is that a multi-threaded adapter unit can be employed on the PCI bus. This type of adapter unit permits more than one outstanding split read or write transaction on the PCI bus without risk of an ordering violation or deadlock.
BRIEF DESCRIPTION OF THE DRAWINGSThese and other features, aspects and advantages of the present invention will become better understood with regard to the following description, appended claims, and accompanying drawings where:
Included in the PCI buffer management section 102 are a plurality of read buffers 110 and write buffers 112, a set of write context registers 114 for tracking the contents of the write buffers, a set of read context registers 116 for tracking write contingency flags for the read buffers 110, and a plurality of multiplexors 118a-e or data selectors for routing data. Each write context register 114 is associated with one entry of the M write buffers 112 and contains a bit (one of sr bits 120) that indicates whether the associated entry is an initiator write transaction or a target read completion transaction. Each read context register 116 is associated with one entry of the read buffers 110 and contains M wc bits 122, each of which, if set, indicates the presence of a single pending write in the write buffer that is ahead of the initiator read transaction request in the read buffer. As is shown in
A number of multiplexors (or data selectors) are provided including multiplexor 118a for providing read buffer data to one or more read masters in the application specific section of the adapter, multiplexer 118b for selecting a write master to provide data to the write buffers, multiplexer 118d for selecting a read slave to provide data to the write buffers and a multiplexer 118c for selecting whether a read master or a write master has access to the write buffers. Finally, a multiplexer 118e is provided for enabling write buffer data to either an initiator interface part or a target interface part of interface 106 via register 124, depending on the sr flags 120 stored in the write context registers.
If a write transaction is presented on the internal interface, as determined in step 140, the write transaction is enqueued, in step 154, in one of the available write buffers. If a read transaction completion appears on the internal interface, as determined in step 140, it too is enqueued, in step 154, in one of the available write buffers and the sr bit is set, in step 158, as determined in step 156. This transaction is a delayed or split completion to a read transaction request that was issued by a source external to the adapter unit, which signaled a delayed or split response to the read request. The sr bit in the write context registers keeps track of whether the entry in the write buffer is a write transaction or a delayed or split completion transaction. The queuing of initiator write transactions and target read completions assures that these transactions are performed in the order in which they are enqueued in the write buffer.
Although the present invention has been described in considerable detail with reference to certain preferred versions thereof, other versions are possible. Therefore, the spirit and scope of the appended claims should not be limited to the description of the preferred versions contained herein.
Claims
1. A method of ordering transactions that occur on a peripheral bus, the method comprising:
- receiving a first write transaction associated with a first interface;
- receiving a second write transaction associated with the first interface;
- receiving a read transaction associated with the first interface; and
- adjusting write contingency flags to allow split read completion transactions and multi-threaded transactions to a second interface.
2. The method of claim 1 further comprising sharing read and write transaction information between multiple buffers to allow performance of the read and write transactions to occur in a predetermined order.
3. The method of claim 2 further comprising:
- determining, if performance of the first and second write transactions has not started before receiving the read transaction, whether the read transaction is dependent on completion of at least one of the first and second write transactions; and
- performing, if the read transaction is not dependent on completion of the second write transaction, the first write transaction and the read transaction via the second interface before performing the second write transaction.
4. The method of claim 3 further comprising performing, if the read transaction is not dependent on completion of the second write transaction, the second write transaction before the read transaction only if the second write transaction is stored in a buffer before the read transaction.
5. A method, comprising:
- tracking contents of a write buffer;
- tracking write contingency flags for a read buffer;
- selectively permitting a read transaction request in the read buffer to be dependent on a write transaction in the write buffer based on the write contingency flags.
6. The method of claim 5 further comprising selectively setting a write contingency flag to create an ordering between a write transaction and a read transaction request based on properties of the read and write transactions involved.
7. The method of claim 6 wherein the said properties are selected from a group consisting of an address, an address range, a requester function in a transaction and a device number in a transaction.
8. The method of claim 5 further comprising selectively providing read buffer data to a read master.
9. The method of claim 5 further comprising selecting a write master to provide data to the write buffer.
10. The method of claim 5 further comprising selecting a read slave to provide data to the write buffer.
11. The method of claim 5 further comprising selecting whether a read master or a write master has access to the write buffer.
12. The method of claim 5 further comprising selectively enabling write buffer data to either an initiator interface or a target interface.
13. The method of claim 5 further comprising clearing write contingency flags when a read transaction request appears on an internal interface.
14. The method of claim 13 further comprising, if ordering is enforced, determining whether any pending initiator write transactions are in the write buffer and setting a write contingency flag for each pending write transaction on which the read transaction request must depend.
15. The method of claim 13 further comprising, if order is enforced, waiting for any write contingency flags associated with the read transaction request to be cleared before presenting the read transaction request to an initiator interface.
16. The method of claim 13 further comprising, if ordering is not enforced, proceeding with the read transaction request without delay.
17. The method of claim 5 further comprising ordering a read transaction request with respect to some pending write transactions and not others.
18. The method of claim 5 further comprising tracking whether entries in the write buffer are write transactions or delayed/split completion transactions.
19. The method of claim 5 further comprising performing initiator write transactions and target read completions in the order in which they are enqueued in the write buffer.
20. The method of claim 5 further comprising determining that a write transaction in the write buffer has been performed and clearing any corresponding write contingency flags.
Type: Application
Filed: Nov 9, 2007
Publication Date: Mar 13, 2008
Inventors: Tom Heynemann (Boulder Creek, CA), Jeffrey Sprouse (Mountain View, CA), Michael Knowles (Santa Clara, CA)
Application Number: 11/938,116
International Classification: G06F 13/14 (20060101);