Use of virtual lanes to solve credit stall on target ports in FC SAN
A method is performed at a switch fabric that communicates with a storage array target port. The method includes sending frames to the target port responsive to receiving buffer-to-buffer (B2B) credits that indicate a receive buffer at the target port is available for the frames. The method further includes, in response to detecting a credit stall at the target port, operating in a virtual lane mode. The operating in the virtual lane mode includes: determining whether a frame destined for the target port is a command frame or a data frame; based on the determining, marking the frame to indicate that the frame is destined for a particular virtual lane among virtual lanes of the receive buffer; and receiving from the target port a per-virtual lane B2B credit that indicates the particular virtual lane is available and, in responsive, sending the frame to that virtual lane on the target port.
1. A method comprising:
at a switch fabric configured to communicate with a target port hosted by a Fibre Channel adapter of a storage array:
operating in a normal mode without virtual lanes while sending frames to the target port responsive to receiving, from the target port, buffer-to-buffer credits that indicate a receive buffer at the target port is available for the frames; and
in response to detecting a credit stall at the target port based on withholding of the buffer-to-buffer credits by the target port, negotiating with the Fibre Channel adapter to cause it to partition the receive buffer into virtual lanes, and transitioning to and operating in a virtual lane mode, including:
determining whether a frame destined for the target port is a command frame or a data frame;
based on the determining, marking the frame to indicate that the frame is destined for a particular virtual lane among the virtual lanes of the receive buffer; and
receiving from the target port a per-virtual lane buffer-to-buffer credit that indicates the particular virtual lane is available and, in response, sending the frame to the target port.
2. The method of claim 1 , wherein, when the frame is the command frame:
the marking includes marking the command frame to indicate the command frame is destined for a virtual command lane among the virtual lanes of the receive buffer; and
the receiving from the target port the per-virtual lane buffer-to-buffer credit includes receiving from the target port the per-virtual lane buffer-to-buffer credit encoded to indicate the virtual command lane is available.
3. The method of claim 1 , wherein, when the frame is the data frame:
the marking includes marking the data frame to indicate the data frame is destined for a virtual data lane among the virtual lanes of the receive buffer; and
the receiving from the target port the per-virtual lane buffer-to-buffer credit includes receiving from the target port the per-virtual lane buffer-to-buffer credit encoded to indicate the virtual data lane is available.
4. The method of claim 1 , wherein:
marking includes marking a control field of the frame.
5. The method of claim 1 , further comprising:
in response to detecting the credit stall at the target port, performing a link reset toward the target port; and
performing the negotiating and transitioning after the link reset.
6. The method of claim 1 , wherein the detecting the credit stall includes detecting that a time spent waiting to receive one of the buffer-to-buffer credits before sending one of the frames to the target port exceeds a predetermined wait time indicative of the credit stall.
7. The method of claim 1 , wherein:
the switch fabric and the storage array are part of a Fibre Channel (FC) storage area network (SAN), the target port is an FC port, and the frames are FC frames; and
the sending the frames and the sending the frame each includes sending from an FC switch port of the FC SAN.
8. The method of claim 1 , further comprising, at the Fibre Channel adapter:
receiving the frame at the target port;
storing the frame in the particular virtual lane of the receive buffer based on the marking;
processing the frame from the particular virtual lane; and
after the processing, sending the per-virtual lane buffer-to-buffer credit to the switch fabric.
9. An apparatus comprising:
a switch port of a switch fabric to communicate with a target port hosted by a Fibre Channel adapter of a storage array; and
a processor coupled to the switch port and configured to perform:
operating in a normal mode without virtual lanes while sending frames to the target port responsive to receiving, from the target port, buffer-to-buffer credits that indicate a receive buffer at the target port is available for the frames; and
in response to detecting a credit stall at the target port based on withholding of the buffer-to-buffer credits by the target port, negotiating with the Fibre Channel adapter to cause it to partition the receive buffer into virtual lanes, and transitioning to and operating in a virtual lane mode, including:
determining whether a frame destined for the target port is a command frame or a data frame;
based on the determining, marking the frame to indicate that the frame is destined for a particular virtual lane among the virtual lanes of the receive buffer; and
receiving from the target port a per-virtual lane buffer-to-buffer credit that indicates the particular virtual lane is available and, in response, sending the frame to the target port.
10. The apparatus of claim 9 , wherein the processor is configured to perform, when the frame is the command frame:
the marking by marking the command frame to indicate the command frame is destined for a virtual command lane among the virtual lanes of the receive buffer; and
the receiving from the target port the per-virtual lane buffer-to-buffer credit by receiving from the target port the per-virtual lane buffer-to-buffer credit encoded to indicate the virtual command lane is available.
11. The apparatus of claim 9 , wherein the processor is configured to perform, when the frame is the command frame:
the marking by marking the data frame to indicate the data frame is destined for a virtual data lane among the virtual lanes of the receive buffer; and
the receiving from the target port the per-virtual lane buffer-to-buffer credit by receiving from the target port the per-virtual lane buffer-to-buffer credit encoded to indicate the virtual data lane is available.
12. The apparatus of claim 9 , wherein the processor is further configured to perform:
in response to detecting the credit stall at the target port, initiating a link reset toward the target port; and
negotiating and transitioning after the link reset.
13. A method comprising:
at a Fibre Channel adapter of a storage array, the Fibre Channel adapter including a target port and a receive buffer coupled to the target port, the target port configured to communicate with a link peer, operating in a virtual lane mode, including:
partitioning the receive buffer into virtual lanes to include a command lane for storing command frames and a data lane for storing data frames;
receiving, from the link peer, a frame marked with a virtual lane identifier to identify a particular virtual lane as the command lane when the frame is a command frame and as a data lane when the frame is a data frame;
populating the particular virtual lane based on the virtual lane identifier;
mapping the command lane and the data lane to a command queue and a direct memory access channel for processing the command frame and the data frame;
processing the frame in the particular virtual lane to remove the frame from the particular virtual lane; and
sending, to the link peer, a per-virtual lane buffer-to-buffer credit encoded to indicate the particular virtual lane is available for a subsequent frame.
14. The method of claim 13 , wherein:
the frame is marked in a control field of the frame.
15. The method of claim 13 , wherein mapping is implemented using address pointers.
16. The method of claim 13 , wherein, when the frame is the command frame:
the processing includes processing the command frame in the command lane, which removes the command frame from the command lane; and
the sending includes sending, to the link peer, the per-virtual lane buffer-to-buffer credit encoded to indicate the command lane is available for a subsequent command frame.
17. The method of claim 16 , wherein the processing includes dequeuing the command frame from the command lane into the command queue for the command frames.
18. The method of claim 13 , wherein, when the frame is the data frame:
the processing includes processing the data frame in the data lane, which removes the data frame from the data lane; and
the sending includes sending, to the link peer, a per-lane buffer-to-buffer credit encoded to indicate the data lane is available for a subsequent data frame.
19. The method of claim 18 , wherein the processing includes transferring the data frame to memory of the storage array using the direct memory access channel.
20. The method of claim 13 , further comprising, at the Fibre Channel adapter:
prior to operating in the virtual lane mode, operating in a normal mode without using the virtual lanes;
negotiating with the link peer to operate in the virtual lane mode; and
responsive to the negotiating, transitioning from operating in the normal mode to operating in the virtual lane mode.