Flash storage controller execute loop
First Claim
1. A method including performing the following steps by a first processor of a first flash port of a plurality of flash ports of a storage controller, the storage controller configured to be coupled to a flash memory module, each flash port of the plurality of flash ports corresponding to a flash memory group of the flash memory module, each flash port comprising an associated processor:
- checking a first state variable in a first data structure selected from a first queue for a first bank of a first flash memory group corresponding to the first flash port;
in accordance with a determination that the first state variable indicates a predefined stage of command processing, initiating a first task, wherein the first task is related to reading data from or writing data to the first bank of the first flash memory group, and updating the first state variable in the first data structure;
in accordance with a determination that the first state variable indicates a first resource is required, checking if the first resource is available;
in accordance with a determination that the first resource is available, processing and completing the first task, and setting a return value in the first flash port as busy;
checking a second state variable in a second data structure selected from a second queue for a second bank of the first flash memory group corresponding to the first flash port;
in accordance with a determination that the second state variable indicates the predefined stage of command processing, initiating a second task, wherein the second task is related to reading data from or writing data to the second bank of the first flash memory group, and updating the second state variable in the second data structure;
in accordance with a determination that the second state variable indicates a second resource is required, checking if the second resource is available;
in accordance with a determination that the second resource is available, processing and completing the second task, and setting a return value in the first flash port as busy; and
repeating the above steps until the first state variable indicates that the first task is complete, removing the first data structure from the first queue and continue performing the above steps until the second state variable indicates that the second task is complete, and removing the second data structure from the second queue;
whereinthe first data structure represents a first host command from a first host and the second data structure represents a second host command from a second host.
2 Assignments
0 Petitions
Accused Products
Abstract
A storage controller is provided that contains multiple processors. In some embodiments, the storage controller is coupled to a flash memory module having multiple flash memory groups, each flash memory group corresponding to a distinct flash port in the storage controller, each flash port comprising an associated processor. Each processor handles a portion of one or more host commands, including reads and writes, allowing multiple parallel pipelines to handle one or more host commands simultaneously.
203 Citations
12 Claims
-
1. A method including performing the following steps by a first processor of a first flash port of a plurality of flash ports of a storage controller, the storage controller configured to be coupled to a flash memory module, each flash port of the plurality of flash ports corresponding to a flash memory group of the flash memory module, each flash port comprising an associated processor:
-
checking a first state variable in a first data structure selected from a first queue for a first bank of a first flash memory group corresponding to the first flash port; in accordance with a determination that the first state variable indicates a predefined stage of command processing, initiating a first task, wherein the first task is related to reading data from or writing data to the first bank of the first flash memory group, and updating the first state variable in the first data structure; in accordance with a determination that the first state variable indicates a first resource is required, checking if the first resource is available; in accordance with a determination that the first resource is available, processing and completing the first task, and setting a return value in the first flash port as busy; checking a second state variable in a second data structure selected from a second queue for a second bank of the first flash memory group corresponding to the first flash port; in accordance with a determination that the second state variable indicates the predefined stage of command processing, initiating a second task, wherein the second task is related to reading data from or writing data to the second bank of the first flash memory group, and updating the second state variable in the second data structure; in accordance with a determination that the second state variable indicates a second resource is required, checking if the second resource is available; in accordance with a determination that the second resource is available, processing and completing the second task, and setting a return value in the first flash port as busy; and repeating the above steps until the first state variable indicates that the first task is complete, removing the first data structure from the first queue and continue performing the above steps until the second state variable indicates that the second task is complete, and removing the second data structure from the second queue;
whereinthe first data structure represents a first host command from a first host and the second data structure represents a second host command from a second host. - View Dependent Claims (2, 3, 4, 5, 6)
-
-
7. A storage controller configured to be coupled to a flash memory module having a plurality of flash memory groups, comprising:
-
a host interface configured to receive a plurality of host commands; a plurality of flash ports, each flash port corresponding to a flash memory group of the flash memory module, each flash port comprising an associated processor; a plurality of processors; memory storing one or more programs, which when executed by respective processors of the plurality of processors cause the storage controller to perform a method comprising; for each flash port of the plurality of flash ports; checking a first state variable in a first data structure selected from a first queue for a first bank of the flash memory group corresponding to the flash port; in accordance with a determination that the first state variable indicates a predefined stage of command processing, initiating a first task, wherein the first task is related to reading data from or writing data to the first bank of the flash memory group, and updating the first state variable in the first data structure; in accordance with a determination that the first state variable indicates a first resource is required, checking if the first resource is available; in accordance with a determination that the first resource is available, processing and completing the first task, and setting a return value in the flash port as busy; checking a second state variable in a second data structure selected from a second queue for a second bank of the flash memory group corresponding to the flash port; in accordance with a determination that the second state variable indicates the predefined stage of command processing, initiating a second task, wherein the second task is related to reading data from or writing data to the second bank of the flash memory group, and updating the second state variable in the second data structure; in accordance with a determination that the second state variable indicates a second resource is required, checking if the second resource is available; in accordance with a determination that the second resource is available, processing and completing the second task, and setting a return value in the flash port as busy; and repeating the above steps until the first state variable indicates that the first task is complete, removing the first data structure from the first queue and continue performing the above steps until the second state variable indicates that the second task is complete, and removing the second data structure from the second queue;
whereinthe first data structure represents a first host command from a first host and the second data structure represents a second host command from a second host. - View Dependent Claims (8, 9, 10, 11, 12)
-
Specification