A network device may facilitate an exchange of information packets via a communication network. For example, a network switch or router may receive streams of information packets from other devices, such as Personal Computers (PCs). The network device may then transmit the information packets to other network devices, such as to other network switches or routers. Those network devices may in turn forward the information packets until they reach an appropriate destination. Each information packet may be stored in memory prior to, during, and/or after processing by the network device. In some cases, the memory is arranged as one or more packet buffers that are used to store and/or retrieve the information packets.
Some embodiments described herein are associated with data or information “packets.” As used herein, the term “packet” may refer to any set of data or information, such as a set of data associated with a communication protocol. By way of example, an information packet might be associated with the Fast Ethernet Local Area Network (LAN) transmission standard 802.3-2002® published by the Institute of Electrical and Electronics Engineers (IEEE).
In addition, some embodiments are associated with a “network device.” As used herein, the phrase “network device” may refer to any device adapted to exchange packets of information. Examples of network devices include the Intel® IXP 2800 network processor or an Intel® XEON™ Processor coupled with an Intel® E7501 chipset. Network devices may comprise one or more network components. As used herein, the term “network component” may refer to a network device, or a component, piece, portion, or combination of network devices. Examples of network components may include a Static Random Access Memory (SRAM) device or module, a network processor, and a network communication path, connection, port, or cable.
Moreover, some embodiments are associated with “packet buffers” and “memory buffers” or “memory registers.” As used herein these terms may refer to any device or component adapted to store information. For example, a memory buffer or memory register may be a fixed-sized area of a Dynamic Random Access Memory (DRAM) device or module that is used to store and retrieve information packets.
Network devices may receive and transmit large volumes of information packets in very short periods of time. High-speed networks have increased the demand on network devices to process and/or exchange information packets at extremely high rates of speed. In order to process information packets, network devices may need to store the information packets in short or long-term memory. Because the volume of packets may be extremely large, determining where to store each individual information packet may become a taxing process that could degrade the performance of a high-speed network device.
For example, when an information packet is received at a network device, a memory buffer may need to be retrieved (“fetched”) to store the packet. To facilitate this process, the network device may store the identification information for various buffers in memory. The network device may access the memory to retrieve the identification information or “handle” associated with an empty memory buffer. Using this handle, the network device may then fetch the empty buffer from a pool of buffers and store the information packet in the fetched buffer. When the information packet is transmitted and/or otherwise no longer in need of storage, the buffer is sent back to the pool of buffers (“freed”), and the identifier is returned to the list of identifiers stored in memory.
The stored identifiers may be arranged in various configurations including a linked-list. The linked-list of identifiers may contain identity information for each available buffer in the buffer pool. Part of this information may include a reference to an adjacent identifier in the list (a link). This linking information may assist the network device in locating free buffers by acting as a pointer to the identifier associated with the next available empty buffer. When a buffer is fetched for use, the identifiers may need to be unlinked so that the network device does not try to store the next incoming packet in the same (and now filled) buffer. Similarly, when a buffer is freed and its identifier returned to the linked-list, the information may need to be updated to re-create the link.
These transactions that may be required for processing and storing information packets may introduce a significant amount of latency to a high-speed network device. In many situations, the linking and unlinking of buffer identifiers may introduce a high percentage of this latency at least in part because the path from the network processor to the memory may have a lower line speed than the paths local to the processing device or chip. The path may also be shared by other processing devices, creating a bottle-neck in the already slower connection.
The receive processor 114 may be configured to processes information packets received, for example, through the input path 108. The transmit processor 116 may be connected to the receive processor 114 via an internal communication path 112, and may be configured to process and/or route information packets. Through the internal communication path 112, information packets may be exchanged between the two processors 114, 116 to facilitate and/or consummate information packet processing, routing, storing, and/or transmission. Processed packets may then be transmitted to other network devices, components, or other destinations via output path 110. Output path 110 and input path 108 may be sections, components, and/or portions of the same path or connection. The single connection including both input path 108 and output path 110 may be or include a communication path 104 similar to that described herein in conjunction with
When an information packet is received by the network processor 102, it may be directed to the receive processor 114. The receive processor 114 may need to store the information packet to facilitate processing, routing, and/or transmission of the packet. To store the packet, the receive processor 114 may access an identifier memory module 120 containing a linked-list of buffer identifiers (IDs). The identifier memory module 120 may be an SRAM module, and may be connected to the network processor 102 via an identifier access path 122. The ID of an empty (or available) buffer may be retrieved from the identifier memory module 120 by the receive processor 114. Retrieving the buffer ID may require un-linking the buffer ID from other IDs located in the identifier memory module 120. The receive processor 114 may then fetch the free buffer associated with the buffer ID from a buffer memory module 130. The buffer memory module 130 may be a DRAM module containing multiple memory buffers for storing information packets (a buffer pool), and may be connected to the network processor 102 via buffer access path 132.
The various buffer IDs (ID1-IDn) contained in the identifier memory module 120 may be arranged and accessed in any fashion known or available, including via a linked-list (as described herein), or a next-neighbor ring. The various IDs may correspond via a one-to-one relationship to associated buffers or memory registers (R1-Rn) located in the buffer memory module 130.
The information packet may be transferred, for example, via internal communication path 112 to the transmit processor 116 for preparation for transmittal to another network device. The packet may then be transmitted from the network device 100 to one or more destinations. The transmit processor 116 may then free the now empty buffer by returning it via buffer access path 134 to the buffer memory module 130. The transmit processor 116 may also return the buffer ID to the identifier memory module 120 via identifier access path 124. Once returned to the identifier memory module 120, the buffer ID may be re-linked to the appropriate position in the buffer ID chain or ring.
The various access paths 122, 124, 132, 134 may be separate and/or distinct paths or devices as shown in
Turning now to
The local cache 140 may be any known or available type of memory, and may include one or multiple memory modules. The buffer IDs (ID1-IDn) stored in the local cache 140 may be identical to those stored in the identifier memory module 120 (as shown in
The local cache 140 may be used by the processors 114, 116 in place of the identifier memory module 120. For example, when a packet needs to be stored, the processor 114, 116 may access the local cache 140 to retrieve a buffer ID, instead of accessing the identifier memory module 120 via the identifier access path 122, 124. Because the local cache 140 is located within, on, or adjacent to the network processor 102, the access speed may be significantly higher than that experienced by using the identifier access path 122, 124. Further, according to some embodiments, the buffer IDs stored in the local cache 140 may not be stored in a linked-list. Storing the buffer IDs in a non-linked format may further decrease the amount of time required to fetch and free buffers. In some embodiments, the local cache 140 may replace the identifier memory module 120.
In some embodiments, the local cache 140 may be of a limited size. It is possible, for example, that space or financial constraints may limit the size of memory capable of being successfully employed “on-chip” (i.e., on or within the network processor 102). In such embodiments, the local cache 140 may be sized to be able to handle the majority of buffer ID requests, while the identifier memory module 120 may be used as a back-up when the requests become too numerous for the local cache 140 to handle. For example, the local cache 140 may be a buffer pool cache having one-hundred and twenty-eight memory registers. The registers may each be capable of storing, for example, one buffer ID, giving the local cache 140 the capability of pooling up to one-hundred and twenty-eight buffer IDs. Anytime the local cache 140 is non-empty (e.g., fewer than one-hundred and twenty-eight buffers are required to store packets), the processors 114, 116 may use the local cache 140 to fetch buffer IDs. In some embodiments where the local cache 140 may be capable of handling all buffer ID requests all of the time, the network device 100 may not require the identifier memory module 120 or its attendant access paths 122, 124. In other embodiments where more buffer ID requests may be generated than the local cache 140 can handle (once the number of requests exceeds one-hundred and twenty-eight for example) then the processors 114, 116 may access the identifier memory module 120 as described herein. In some embodiments, when the local cache 140 is non-full (e.g., some buffers are being used too store packets), buffer IDs may be freed to the local cache 140. When the local cache 140 is full, in some embodiments, the buffer IDs may be freed to the identifier memory module 120.
According to some embodiments, as shown in
Turning now to
Information packets may arrive at the network processor 102 via input paths 108a, 108b from either or both of the SPI device 160 and the FIC device 170, respectively. In some embodiments, the input paths 108a, 108b may comprise a single path, connection, or port connected to one or communication interface devices 160, 170. According to some embodiments, no communication interface devices 160, 170 are needed. In other embodiments, multiple communication interface devices 160, 170 of various types and configurations may be employed.
Processing of the information packets may then be performed, for example, via an Intel® IXP 2800 Ingress Processor 114. The ingress processor 114 may need to store one or more received information packets, and may therefore retrieve one or more buffer IDs from either the local cache 140 or the ingress-dedicated identifier memory module 120a. In some embodiments, as described herein, the ingress processor 114 retrieves necessary buffer IDs from the local cache 140 unless the local cache 140 is empty. The ingress processor 114 may then fetch the buffer associated with the retrieved ID from the ingress-dedicated buffer memory module 130a.
The stored packet may be transferred via the internal communication path 112 to an egress processor 116, such as an Intel® 2800 Egress Processor 116. The egress processor 116 may process and transmit the packet via an output path 110a, 110b. The egress processor 116 may need to free the buffer used to store the packet, and according to some embodiments, will free the buffer ID to the local cache 140 if the local cache 140 is not full. Also according to some embodiments, if the local cache 140 is full, the egress processor 116 may free the buffer ID to the egress-dedicated identifier memory module 120b via access path 124. In either scenario, the buffer itself may be freed to the egress-dedicated buffer memory module 130b. In some embodiments, the processor-dedicated memory modules 120a, 120b, 130a, 130b may be in communication with and/or connected to each other to facilitate memory management and storage optimization functions.
According to some embodiments, a secondary processor 150 such as a control plane processor 150, as shown in
One or more communication interface devices 160, 170 as described herein may be associated with one or more of the output paths 110a, 110b. In some embodiments, no communication interface devices 160, 170 may be necessary. Output paths 110a, 110b may comprise a single path, connection, or port, or may be separate entities and/or devices as shown in
Although the memory modules 120a, 120b, 130a, 130b are shown in
At 602, an information packet is received. The information packet may originate from, for example, another network device 100 and/or a communication interface device 160, 170, via an input path 108. The packet may need to be stored in memory. Therefore, at 604, a buffer handle associated with an empty buffer or memory register may be fetched from a local buffer pool cache (such as local cache 140). In some embodiments, the buffer handle may be fetched from the local buffer pool cache 140 when the local buffer pool cache 140 is non-empty. When the local buffer pool cache 140 is empty, according to some embodiments, the buffer ID may be fetched from an external and/or “off-chip” memory such as an identifier memory module 120 as described herein.
Also as described herein, fetching the buffer handle from a local cache 140 may significantly increase the speed at which packet storing operations may be achieved. Using the fetched buffer handle, the buffer may be retrieved and, at 606, the information packet is stored in the buffer. At 608, the information packet is processed in any known, desired, necessary, and/or useful manner. The information packet may then be transmitted to any desired location and/or destination at 610. Once the packet is transmitted and/or otherwise no longer in need of storage, the buffer handle may be freed to the local buffer pool cache 140. In some embodiments, the buffer handle may be freed to the local cache 140 only if the local cache 140 is non-full. When the local cache 140 is full, in some embodiments the buffer ID may be freed to an external and/or “off-chip” memory such as an identifier memory module 120 as described herein.
The network processor 700 is coupled to a fabric interface chip 720 adapted to communicate through a switch fabric. For example, the fabric interface chip 720 might arrange for ATM information to be exchanged with another device.
The several embodiments described herein are solely for the purpose of illustration. Persons skilled in the art will recognize from this description other embodiments may be practiced with modifications and alterations limited only by the claims.