This invention relates to a method of resolving contention between data bursts being transferred between devices in an electronic system, and to devices for use in such system.
Embedded systems are known, in which there are multiple master devices, such as processors of various kinds, and multiple resource devices, such as different types of memory, all interconnected by a bus matrix, or bus fabric, made up of different component buses. In order for the embedded system to operate, data must be transferred between these devices, typically in data bursts that contain multiple data words. A common occurrence in such systems is that there will be multiple simultaneous requests for the use of a resource such as a memory device or a resource such as a component bus of the bus fabric.
In such cases, one transaction must be given a higher priority than the other transaction or other transactions, and this can result in the overall performance of the system being compromised.
U.S. Pat. No. 5,668,975 describes one approach to arbitration, in the specific case of multiple requests for data from a memory block. In the method described in this document, each requested data transfer is split into a critical word plus one or more non-critical word. Then, each of the critical words is given a higher priority than each of the non-critical words, and the critical words and the non-critical words are handled in their respective priority orders.
However, this document does not provide any solution to the additional problems that arise in embedded systems a described above, in which arbitration between requests may be required at multiple points.
According to a first aspect of the present invention, there is provided a method of resolving contention between data bursts. A first one of the contending data bursts is selected, and a length of a critical section of the first selected data burst is determined. The critical section of the selected data burst is then processed. A second one of the contending data bursts is selected, and a length of a critical section of the second selected data burst is determined. The critical section of the second selected data burst is processed before a non-critical section of the selected data burst.
According to a second aspect of the present invention, there is provided an arbitration device operating in accordance with the method of the first aspect.
According to a third aspect of the present invention, there is provided a method of forming a data request in a data transfer system. According to this method, there is included in a request for a data burst a tag indicating a length of a critical section of the data burst.
According to a fourth aspect of the present invention, there is provided as data host operating in accordance with the method of the third aspect.
According to a fifth aspect of the present invention, there is provided a method of processing a data request in an embedded system comprising a plurality of hosts and a plurality of memory resources, interconnected by a plurality of bus components. In the host, a data request is formed, said data request identifying a memory resource from which the requested data is to be received, and also containing a tag indicating a length of a critical section of the data burst. In the identified memory resource, a burst transaction is formed, containing the requested data, and the burst transaction includes a second tag indicating a length of a critical section of the data burst. At at least one arbitration device, associated with a respective one of said bus components, the burst transaction is split based on a value of the second tag, and a higher priority is given to the critical section of the data burst than to a non-critical section of the data burst.
According to a sixth aspect of the present invention, there is provided an embedded system, comprising a plurality of data requesting devices, a plurality of data sources and a bus fabric interconnecting the data requesting devices and the data sources, wherein the bus fabric comprises a plurality of bus components. The bus components have associated therewith respective arbitration devices, each in the form of an arbitration device operating in accordance with the method of the first aspect.
Embodiment of the invention therefore allow transactions to be performed with minimal delay to the critical sections of transactions, allowing account to be taken of the lengths of the critical sections.
Thus, in embodiments of the invention, metadata is added to requests in a data transaction in a complex system, aimed at allowing the system to better control and optimise important parameters and performance. Adding a tag that indicates a length of a critical section of a transaction removes from the bus fabric the need to continually update its setup and configuration on a real time basis. Rather, the requesting device tags this metadata to its requests rather than having to program the fabric in advance. Thus, the fabric, rather than being programmed with specific details, is given a ‘policy’, which it applies to all transactions, using the metadata in the tags to make the correct choices in real time. The policy can if necessary be modified in a much slower time frame, and need not be as detailed, and hence there is a lower burden on the system. Moreover, when moving a function or subsystem between different designs, it means a reduction in determining configurations and verification time, increasing reusability.
In more detail,
Data and instructions are stored in a variety of memory devices, such as a ROM 40, RAM 42, and an external memory 44, connected through an external memory interface (EMIF) 46, the external memory 44 and external memory interface 46 together being referred to as a memory solution 48. Again, it will be appreciated that any memory device or memory mapped device may include multiple data sources.
These various blocks are interconnected by a bus fabric, or bus matrix, 50. That is, there is not a single bus to which all of the blocks are connected. Rather, the bus fabric 50 includes multiple bus components, identified in
In this illustrative example, the application CPU 20, the multi-media DSP 22, the multi-media (MM) hardware (HW) accelerator 24, and the direct memory access (DMA) system block 28 are connected by respective bus segments to the application bus matrix 52. The direct memory access (DMA) system block 28, the access CPU 30, the access DSP 32, and the modem hardware 34 are connected by respective bus segments to the access bus matrix 54. The ROM 40, the RAM 42, and the external memory interface (EMIF) 46 are connected by respective bus segments to the system memory bus 58. The direct memory access (DMA) system block 28, and the other hardware (HW) blocks 36, . . . , 38, together with the application bus matrix 52, the access bus matrix 54, and the system memory bus 58, are connected by respective bus segments to the common bus matrix 56. It will therefore be noted that a connection between any two of the component blocks of the embedded system 10 will have to pass over multiple bus segments. In particular, it will be also be noted that, because each of the application bus matrix 52, the access bus matrix 54, and the system memory bus 58, are connected by multiple respective bus segments to the common bus matrix 56, there will be many possible paths over which the connections might be made.
This example therefore demonstrates that, as resources are shared, there are many points at which there might be contention for the available resources between required data transfers. For example, multiple data bursts might require access to a particular bus, or bus component, at the same time. As another example, the external memory might receive multiple requests for data from multiple sources at the same time. The resolution of such contentions is described in more detail below.
Data contentions at a bus, or bus component, can for example be resolved by means of a bus arbitration device associated with the bus or bus component. For example,
The invention is described herein with reference to a cache-based system, in which a delay in providing data or instructions to a processing block can result in an increased latency of the system as a whole, or of a part of the system.
Specifically,
Thus, this invention relates in particular, though not exclusively, to systems for satisfying the needs of cache based CPUs that frequently generate burst transaction requests to the system to either service cache misses or write-back of dirty data lines to main memory. In such systems, performance can be improved by reducing latency on the cache line fills specifically, for both data and code. Assuming the burst is arranged as critical words first, the amount of the burst that is critical remains processor dependent. The object of critical word first is to provide what the processor needs with minimum latency. In the case of data, it may be one or two words of a burst of 16, in code it may be many more.
For processor data transactions, a demand for a specific value which is processed means two things. Firstly, only a small amount are needed per instruction and, secondly, not all instructions require external data. As a result, the need for a burst of data is spread over many instructions. This means that, in a burst, the first word is generally critical but subsequent data in the burst is less so; the execution of intervening instructions allows subsequent data to be read or written at a more relaxed rate and not require to be prioritized as the first word.
In the case of instructions, these are executed sequentially and rapidly, the high speed leading to improved performance. However code execution is changed by jumps and branches that may occur frequently in the code. As a result a burst transaction for a cache miss on instructions means that, in a critical word first burst, it is not only the first word that is critical but a number of sequential words in the burst. Given the sequential nature of code, the number of critical words is at a maximum up to the point where the burst wraps and may be less, determined by the frequency of jumps or branches in the code. In this case the critical split point can be placed at the point where the burst wraps around to complete the burst with data words from before the critical word.
In the case of other types of processor that generate bursts other than cache fill or write-back, the point at which data ceases to be critical can be determined based on other criteria, as discussed in more detail below.
The bus arbitration device 100 is shown in
In step 140 of the process shown in
In step 144, the selected transaction is allowed to proceed in a conventional manner, while other pending transactions are forced to wait.
In step 146, while the selected transaction is in progress, the arbiter 116 determines at which word it would be possible to preempt the sequence, that is, to split the transaction into a critical section and a non-critical section. Different ways it which this can be achieved are described in more detail below. However, it still be noted at this point that the arbiter 116 may determine the length of the critical section, and hence the point at which the transaction may be split, either by performing some analysis of its own, or by relying on analysis performed elsewhere and reading a tag that forms part of the transaction.
In step 148, a value is loaded into one of the counters 118, associated with the selected transaction.
In step 150, it is determined whether there are any pending transactions, progress of whose critical sections has not been started, or whether the critical sections of all pending transactions are completed or in progress. If it is determined in step 150 that there are pending transactions whose critical sections have not been progressed, the process passes to step 152, in which another of these waiting transactions is selected, again for example on the basis of priorities assigned to the transactions. Selecting a waiting transaction means that the process can continue without introducing additional latency when a switch of transactions is performed.
In step 154, it is determined whether the last critical word of the present ongoing transaction has been reached, and this step is repeated until the last critical word has been processed.
When the last critical word of the present ongoing transaction has been reached, this transaction is forced to wait. For example, the unprocessed non-critical section of the transaction may be stored in the bus arbitration device 100. As an alternative, the bus arbitration device 100 can send a wait signal back to the source of the transaction, forcing that source to delay sending the non-critical section of the transaction, or to resend the non-critical section of the transaction, after a delay.
The process is switched in step 156 to the waiting transaction, e.g. the highest priority transaction, selected in step 152.
When such a switch is performed, any counter value(s) loaded in any performance of step 148 is decremented by one in step 158, and it is tested in step 160 whether any of these counter values has thereby reached zero. If so, the priority of the transaction associated with that counter value is increased in step 162. For example, that transaction may automatically be given the highest priority of all of the waiting transactions, so that this mechanism establishes a maximum time that a transaction can be forced to wait.
After adjustment of the priority or priorities in step 162, or after a determination in step 160 that no counter value has reached zero, the process returns to step 144, in which the waiting transaction selected in step 152 is progressed.
When it is determined in step 150 of any iteration that all received critical sections are either complete or in progress, the process turns to the progress of non-critical sections of received transactions, and specifically passes to step 164, in which the highest priority waiting transaction is selected.
The process then passes to step 166, in which it is determined whether a critical word is still in progress. If so, the process returns to step 154, and continues as described above. However, if a non-critical section is already in progress, the process passes to step 168, in which it is determined whether the last word of the present ongoing transaction has been reached, and this step is repeated until the last critical word has been processed.
When the last word of the present ongoing transaction has been reached, the process passes to step 170, in which it is determined whether there is any transaction that is being forced to wait. If not the process passes to step 180, and ends.
If there is a waiting transaction, the process is switched in step 172 to the waiting transaction, e.g. the highest priority transaction, selected in step 164.
As before, when such a switch is performed, any counter value(s) loaded in any performance of step 148 is decremented by one in step 174, and it is tested in step 176 whether any of these counter values has thereby reached zero. If so, the priority of the transaction associated with that counter value is increased in step 178. For example, that transaction may automatically be given the highest priority of all of the waiting transactions, so that this mechanism establishes a maximum time that a transaction can be forced to wait.
After adjustment of the priority or priorities in step 178, or after a determination in step 176 that no counter value has reached zero, the process returns to step 144, in which the transaction to which progress was switched in step 172 is progressed further.
Thus, all existing transactions are completed in priority order. In addition, all new transactions occurring while existing transactions are being serviced are added to the queue and evaluated as described above.
In this exemplary embodiment, it is assumed that the critical sections of all transactions are given a higher priority than the all non-critical sections. However, it is also possible that, once the length of the critical section of a transaction has been determined, the non-critical section of that transaction is nevertheless given a higher priority than the critical section of at least one other transaction, in view of the priority given to that transaction generally, for example.
As described so far, it is assumed that all of the transactions are from different processors. While not impossible, it may be undesirable to interleave two transactions from the same processor, and so additional steps can be taken to avoid this possibility.
In this case, the transaction 130-1 has been received, and it has been determined that it is made up of a critical section C-1 and a non-critical S-1, and the transaction 130-2 has been received, and it has been determined that it is made up of a critical section C-2 and a non-critical section S-2. Pointers to the critical sections C-1, C-2 are placed in the memory 112, while pointers to the non-critical sections S-1, S-2 are placed in the memory 114, as shown at 135a in
The data can be stored but, in this illustrated example, the data is not stored. Rather, the connections are made to wait, until they can be progressed.
In this illustrative example, it has been determined that the transaction 130-2 is of higher priority than the transaction 130-1, and so
In the example shown in
The first transaction 234 for the first processor 230 is made up of a critical section 236 and a non-critical section 238. The second transaction 240 for the second processor 232 is made up of a critical section 242 and a non-critical section 244.
The times at which the data reach the processors 230, 232 are represented in
By way of comparison,
Thus, the critical section 242 of the second transaction 240 suffers a shorter delay, when the pre-emptive arbitration scheme described above is used. Although this is at the expanse of a longer delay suffered by the noncritical section 238 of the first processor 230, this longer delay does not cause any delay in the operation of the processors themselves.
The reason for this is illustrated by
As shown at 260, the execution thread of the first processor 230 (CPU A) reaches cache miss, requiring instructions to be fetched from the memory, and the critical section 236 of the first transaction is fetched after the shortest possible delay. Similarly, the execution thread of the second processor 232 (CPU B) reaches a cache miss at 262, requiring instructions to be fetched from the memory, and the critical section 242 of the second transaction is fetched as soon as the critical section 236 of the first transaction has been fetched.
As described above, but as also shown in
The execution thread running on the first processor (CPU A) can resume at full speed, as shown at 264, as soon as the processor has received the critical section 236 of the first transaction, and the additional delay in receiving the non-critical section 238 of the first transaction causes no delay in this execution thread. Meanwhile, the execution thread running on the second processor (CPU B) can resume at full speed, as shown at 266, as soon as the processor has received the critical section 242 of the second transaction, and so the reduced delay in receiving this is a significant advantage.
As described above, there is an advantage in processing the critical section of a transaction before a non-critical section, and there is an advantage for the system as a whole in splitting transactions, so that a critical section of one transaction is processed, and then a critical section of another transaction is processed before the non-critical section of the first transaction is processed.
In order to maximise this advantage, it is necessary to be able to identify as accurately as possible the length of the critical section, and this can be done in different ways.
In a first possibility, illustrated in
Thus, as shown by way of example in
The tag value can be derived by the host, or cache, in one of several ways. For example, it can be a fixed value pre-determined at compilation and added to the code, and then used to set the tag for a group of transactions within an address region. As another example, it can de determined by a monitor process, such a memory management unit (MMU) or snoop logic, measuring the activity of the software and setting the tag so as to optimize its operation. In multicore processors with snoop logic on the L1 cache, the logic can be used to maintain actively the preemption value for lines previously ejected or moved between L1 caches. As another example, the tag value can be derived from the wrapping point of the critical word first mechanism. That is, the whole of the transaction before the wrapping point is regarded as the critical section.
Where a host tags a data request with an indication of the length of the critical section of the transaction in this way, the resource can then use this tag. Firstly, the resource can use the tag value to resolve any contentions between this data transaction and other data transactions, processing the critical sections of the transactions before their non-critical sections as described above. Secondly, the resource can include this tag, or a modified version of it, in the data that is returned to the host. The tag added at the resource can then be read in the arbitration points of the bus fabric, to determine the split point in transactions. Again, the arbitration points can then use this split point in the manner described with reference to
This method is static because the value is applied in advance based on some estimation of the size of the critical section.
In a second possibility, illustrated in
The pre-emption value can either be a pre-programmed static value, set by a host CPU for that memory region, or it can be based on monitoring and optimization by the advanced memory controller. An additional possibility with the memory controller is to split the burst from a single request into two smaller bursts with low and high priorities.
The tag added at the resource can then be read in the arbitration points of the bus fabric to determine the split point in transactions. Existing memory controllers and bus fabrics can be adapted to use this method.
In a third possibility, illustrated in
In step 310, the arbitration point determines the pre-emption point in a transaction and then, in step 312, the arbitration point performs arbitration based on the pre-emption point. This arbitration can for example be performed according to the method illustrated in
For example, each bus input in the arbiter may be assigned a predetermined preempt value, programmed by the host in the same way as a priority value may be assigned for arbitration. The host may set this value as required by the application to optimize the traffic, and the value will then be fixed for all bus transactions on that path in the bus fabric.
There has thus been described by way of example the operation of the contention resolution system at one particular point in a system at which there is contention for resources.
However, it will be appreciated that the contention resolution system can be applied at many points in en embedded system of the type shown in
Although the contention resolution system has been described so far with reference to an example in which transactions can be split into critical sections and non-critical sections, it is also possible that transactions can be split into more than two sections. For example, based on the criteria described above, a transaction can be split into a critical section, a less critical section, and a non-critical section, with these three sections being handled appropriately.
Number | Date | Country | |
---|---|---|---|
Parent | 13140629 | Aug 2011 | US |
Child | 15163001 | US |