Scalable routing scheme for a multi-path interconnection fabric
First Claim
1. A method of sending messages in an interconnection fabric, wherein the interconnection fabric couples together a plurality of nodes, wherein each node of the plurality of nodes comprises a plurality of input ports and a plurality of output ports, comprising:
- for each of a plurality of messages;
dynamically selecting a route in the interconnection fabric from among a plurality of independent routes for sending the message from a sending node to a destination node, wherein said dynamically selecting a route comprises identifying a routing directive for the selected one of the plurality of independent routes from the sending node to the destination node;
wherein said dynamically selecting a route comprises selecting different ones of the independent routes from the sending node to the destination node for at least two of the messages;
encoding the routing directive in the message, wherein the routing directive describes the route and comprises at least one segment, wherein each segment comprises a direction component and a distance component;
sending the message on one of the output ports of the sending node;
receiving the message on one of the input ports of a first node connected to the output port of the sending node;
decrementing the distance component for a current segment of the routing directive;
selecting one of the output ports of the first node according to the current segment of the routing directive in the message; and
sending the message on the selected one of the output ports of the first node.
4 Assignments
0 Petitions
Accused Products
Abstract
Various embodiments of a scalable routing system for use in an interconnection fabric are disclosed. In this routing scheme, a routing directive describes a route in the interconnection fabric between a sending node and a destination node. Either the sending node or a sending device connected to the sending node encodes the routing directive in a message to be sent to the destination node. The routing directive may include a variable number of segments. Each segment includes a distance component and a direction component that tell each node along the route how it should send the message. Generally, each distance component describes a distance in the interconnection fabric while each direction component specifies a direction in the interconnection fabric.
72 Citations
62 Claims
-
1. A method of sending messages in an interconnection fabric, wherein the interconnection fabric couples together a plurality of nodes, wherein each node of the plurality of nodes comprises a plurality of input ports and a plurality of output ports, comprising:
for each of a plurality of messages; dynamically selecting a route in the interconnection fabric from among a plurality of independent routes for sending the message from a sending node to a destination node, wherein said dynamically selecting a route comprises identifying a routing directive for the selected one of the plurality of independent routes from the sending node to the destination node; wherein said dynamically selecting a route comprises selecting different ones of the independent routes from the sending node to the destination node for at least two of the messages; encoding the routing directive in the message, wherein the routing directive describes the route and comprises at least one segment, wherein each segment comprises a direction component and a distance component; sending the message on one of the output ports of the sending node; receiving the message on one of the input ports of a first node connected to the output port of the sending node; decrementing the distance component for a current segment of the routing directive; selecting one of the output ports of the first node according to the current segment of the routing directive in the message; and sending the message on the selected one of the output ports of the first node. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
-
20. A node, comprising:
-
a routing unit; a plurality of input ports; and a plurality of output ports; wherein the node is configured to be connected to an interconnection fabric, wherein the interconnection fabric is configured to connect the node to a plurality of nodes; wherein the routing unit is configured to receive a message being sent along a route from a sending node to a destination node in the interconnection fabric; wherein the routing unit is further configured to receive a routing directive encoded in the message, wherein the routing directive describes the route and comprises at least one segment, and wherein a segment comprises a direction component and a distance component; wherein the node is configured to receive the message on one of the input ports when the node is not the sending node, wherein the node is further configured to decrement the distance component of a current segment of the routing directive and to select one of the output ports according to the current segment; wherein, when the node is the sending node, the node is further configured to dynamically select a route from among a plurality of independent routes from the sending node to the destination node and wherein the node is configured to encode the routing directive for the dynamically selected route in a message and wherein the node is configured to send the message on one of the output ports; wherein for at least two messages, the node is further configured to dynamically select different ones of the independent routes from the sending node to the destination node when the node is the sending node. - View Dependent Claims (21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33)
-
-
34. A device, comprising:
-
an interface configured to communicate with a source node in an interconnection fabric, wherein the interconnection fabric comprises a plurality of routes between the source node and a destination node; and a controller configured to provide a first routing directive describing a first route from the source node to the destination node, wherein the routing directive comprises at least one segment, wherein each segment comprises a distance component and a direction component, wherein the distance component is configured to be decremented by a receiving node; wherein the controller is further configured to encode the first routing directive in a message, and to communicate the message to the source node to be sent on the interconnection fabric to the destination node; and wherein the controller is further configured to maintain a routing table comprising a plurality of independent routes from the source node to the destination node, and wherein the controller is further configured to dynamically select the first routing directive from the routing table when communicating the message to the source node to be sent on the interconnection fabric to the destination node. - View Dependent Claims (35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46)
-
-
47. A method of sending a message in an interconnection fabric, wherein the interconnection fabric couples together a plurality of nodes, wherein each node of the plurality of nodes comprises a plurality of input ports and a plurality of output ports, comprising:
-
identifying a route in the interconnection fabric for sending the message from a sending node to a destination node; encoding a routing directive in the message, wherein the routing directive describes the route and comprises at least one segment, wherein each segment comprises a direction component and a distance component; identifying a return route from the destination node to the sending node; encoding a return routing directive in the message, wherein the return routing directive describes the return route and comprises at least one segment, wherein each segment comprises a direction component and a distance component; sending the message on one of the output ports of the sending node, wherein the message includes both the routing directive and the return routing directive when sent from the initial sending node; receiving the message on one of the input ports of a first node connected to the output port of the sending node; decrementing the distance component for a current segment of the routing directive; selecting one of the output ports of the first node according to the current segment of the routing directive in the message; and sending the message on the selected one of the output ports of the first node. - View Dependent Claims (48, 49)
-
-
50. A node, comprising:
-
a routing unit; a plurality of input ports; and a plurality of output ports; wherein the node is configured to be connected to an interconnection fabric, wherein the interconnection fabric is configured to connect the node to a plurality of nodes; wherein the routing unit is configured to receive a message being sent along a route from a sending node to a destination node in the interconnection fabric; wherein the routing unit is further configured to receive a routing directive encoded in the message, wherein the routing directive describes the route and comprises at least one segment, and wherein a segment comprises a direction component and a distance component; wherein the node is configured to receive the message on one of the input ports when the node is not the sending node, wherein the node is further configured to decrement the distance component of a current segment of the routing directive and to select one of the output ports according to the current segment; and wherein, when the node is the sending node, the routing unit is further configured to identify a return route from the destination node to the sending node and to encode a return routing directive in the message, wherein the return routing directive describes the return route and comprises at least one segment, wherein each segment comprises a direction component and a distance component, wherein the message includes both the routing directive and the return routing directive when sent from the initial sending node. - View Dependent Claims (51, 52)
-
-
53. A device, comprising:
-
an interface configured to communicate with a source node in an interconnection fabric, wherein the interconnection fabric comprises a plurality of routes between the source node and a destination node; and a controller configured to provide a first routing directive describing a first route from the source node to the destination node, wherein the routing directive comprises at least one segment, wherein each segment comprises a distance component and a direction component, wherein the distance component is configured to be decremented by a receiving node; wherein the controller is further configured to encode the first routing directive in a message, and to communicate the message to the source node to be sent on the interconnection fabric to the destination node; and wherein the controller is further configured to provide a return routing directive describing a return route from the destination node to the source node, wherein the return routing directive comprises at least one segment, wherein each segment comprises a direction component and a distance component; and wherein the controller is further configured to encode the return routing directive in the message, wherein the message includes both the routing directive and the return routing directive when sent from the initial sending node. - View Dependent Claims (54, 55, 56)
-
-
57. A method of sending a message in an interconnection fabric, wherein the interconnection fabric couples together a plurality of nodes, wherein each node of the plurality of nodes comprises a plurality of input ports and a plurality of output ports, comprising:
-
identifying a route in the interconnection fabric for sending the message from a sending node to a destination node; encoding a routing directive in the message, wherein the routing directive describes the route and comprises at least one segment, wherein each segment comprises a direction component and a distance component; sending the message on one of the output ports of the sending node; receiving the message on one of the input ports of a first node connected to the output port of the sending node; decrementing the distance component for a current segment of the routing directive; selecting one of the output ports of the first node according to the current segment of the routing directive in the message; sending the message on the selected one of the output ports of the first node; and incrementally encoding a return routing directive in the message, wherein the return routing directive describes a return route from the destination node to the sending node and comprises at least one segment, and wherein each segment comprises a direction component and a distance component; wherein said incrementally encoding comprises; incrementing the distance component for a current segment of the return routing directive; wherein if, after said decrementing, the distance component for the current segment of the routing directive is zero, the method further comprises modifying the direction component of a current segment of the return routing directive and adding a new segment to the return routing directive so that the new segment becomes the current segment of the return routing directive when the message is sent on the selected output port. - View Dependent Claims (58)
-
-
59. A node, comprising:
-
a routing unit; a plurality of input ports; and a plurality of output ports; wherein the node is configured to be connected to an interconnection fabric, wherein the interconnection fabric is configured to connect the node to a plurality of nodes; wherein the routing unit is configured to receive a message being sent along a route from a sending node to a destination node in the interconnection fabric; wherein the routing unit is further configured to receive a routing directive encoded in the message, wherein the routing directive describes the route and comprises at least one segment, and wherein a segment comprises a direction component and a distance component; wherein the node is configured to receive the message on one of the input ports when the node is not the sending node, wherein the node is further configured to decrement the distance component of a current segment of the routing directive and to select one of the output ports according to the current segment; and wherein the routing unit is further configured to incrementally encode a return routing directive in the message, wherein the return routing directive describes a return route from the destination node to the sending node and comprises at least one segment, and wherein each segment comprises a direction component and a distance component, wherein in incrementally encoding a return routing directive, the routing unit is further configured to; increment the distance component for a current segment of the return routing directive; wherein if, after said decrementing, the distance component for the current segment of the routing directive is zero, the routing unit is further configured modify the direction component of a current segment of the return routing directive and add a new segment to the return routing directive so that the new segment becomes the current segment of the return routing directive when the message is sent on the selected output port.
-
-
60. A device, comprising:
-
an interface configured to communicate with a source node in an interconnection fabric, wherein the interconnection fabric comprises a plurality of routes between the source node and a destination node; and a controller configured to provide a first routing directive describing a first route from the source node to the destination node, wherein the routing directive comprises at least one segment, wherein each segment comprises a distance component and a direction component, wherein the distance component is configured to be decremented by a receiving node; wherein the controller is further configured to encode the first routing directive in a message, and to communicate the message to the source node to be sent on the interconnection fabric to the destination node; and wherein the controller is further configured to incrementally encode a return routing directive describing a return route from the destination node to the source node in the message, wherein the return routing directive describes a return route from the destination node to the sending node and comprises at least one segment, and wherein each segment comprises a direction component and a distance component, and wherein the return routing directive is configured to be incrementally added to as the message is routed to the destination node, wherein the return routing directive is further configured to be used to return an error message to the source node if a routing error is encountered. - View Dependent Claims (61)
-
-
62. A storage system, comprising a plurality of nodes interconnected by an interconnection fabric;
-
wherein different ones of said plurality of nodes perform different functions in the storage system; wherein each one of a first portion of said plurality of nodes is a storage node comprising at least one mass storage device; wherein each one of a second portion of said plurality of nodes is a host interface node configured to provide an interface for the storage system to a host computer; wherein each node of the plurality of nodes comprises; a routing unit; a plurality of input ports; and a plurality of output ports; wherein the routing unit of each node is configured to receive a message being sent along a route from a sending node to a destination node in the interconnection fabric; wherein the routing unit of each node is further configured to receive a routing directive encoded in the message, wherein the routing directive describes the route and comprises at least one segment, and wherein a segment comprises a direction component and a distance component; and wherein each node is configured to receive the message on one of the input ports when the node is not the sending node, wherein the node is further configured to decrement the distance component of a current segment of the routing directive and to select one of the output ports according to the current segment.
-
Specification