Claims
- 1. A fault tolerant memory array control system for controlling data accesses to and from a host bus and a memory array of discrete bulk memory units, organized by physical channel index and physical rank index, wherein bulk memory units with the same rank index are of a similar type, and bulk memory units with the same channel index share a common channel data bus, the memory array control system comprising:
- (a) a controller system bus for control and data communication between elements of the memory array control system;
- (b) a microprocessor controller coupled to the controller system bus for performing logical control of the memory array control system elements, the microprocessor controller comprising:
- (i) a microprocessor for executing operating control programs and configuration control programs comprising:
- (aa) a translation program for optimally translating address data of a host logical data access request to the memory array into a minimal set of memory array physical address and length data for accessing appropriate bulk memory units;
- (bb) a scheduling program for determining and executing an optimal sequence of steps by which to execute a queued set of memory array access requests, including parallel access when possible, by optimizing a prescribed performance function criterion;
- (cc) a crippled operation program for using module redundancy and parity data encoding methods for sustaining system operation after a bulk memory failure; and
- (dd) a computer kernel control means for coordinating all system functions and resources; and
- (ii) an interrupt controller connected to the microprocessor for accepting and prioritizing externally generated interrupt requests from the host system bus interface and from a drive channel controller;
- c) a host system bus interface coupled to the controller bus;
- (d) a set of more than one drive channel controller, each controller of the set for coupling to a unique common channel data bus for selecting a bulk memory unit, and for control of and data transfers to and from the selected bulk memory unit sharing the common channel data bus;
- a data path unit comprising;
- (i) a data path selector, having an output and more than one input, each input connected to one of the set of drive channel controllers for selecting a drive channel; and
- (ii) a data path coupled to the host system bus interface and connected to the data path selector output for coupling the selected drive channel to the host computer system bus; and
- (f) translation means, controlled by the translation program, for translating logical access address data to a physical array access address data set for an array of physical channels, using a RAID format, the logical access address data described by a starting block address, and a block length parameter indicating the number of contiguous blocks to be accessed, and producing a set of channel indices, a set of channel starting addresses, and a set of channel transfer length parameters, indicating the number of contiguous blocks to be accessed for each physical rank, for each channel, for producing a set of physical access address data requiring a minimal set of access commands.
- 2. The system of claim 1 wherein the translation means is for accommodating an array of C logical data channels, using a RAID-4 format, the logical access address data described by a starting block address, n, and a logical block length parameter, N, indicating the number of contiguous blocks to be accessed, and producing a set of channel indices, {m.sub.i }, a set of logical drive starting addresses, {s.sub.mi (j)}, and a set of logical drive transfer length parameters, {x.sub.i (j)}, indicating the number of contiguous blocks to be accessed for each logical rank, p.sub.j, for each channel, for producing a set of logical access address data requiring a minimal set of access commands, the translation means comprises means for:
- (a) mapping the logical block address information given as the logical starting block, n, and the number of contiguous blocks, N, to be accessed into a set of logical channel indices, {m.sub.i }, by use of the following relationship:
- m.sub.i =(n+i) mod C,
- where 0.ltoreq.i.ltoreq.C-1 is an index representing the order of accessing the channel corresponding to the value of m.sub.i ;
- (b) identifying the first logical drive, D.sub.mi,pi, on each channel involved in the access, the coordinate parameters (m.sub.i,p.sub.i), satisfying the following conditions:
- M.sub.pi .ltoreq.(n+i)/C.ltoreq.M.sub.pi+1,
- where M.sub.pi =.SIGMA..sub.j=0.sup.pi-1 B.sub.j, p.sub.i is logical rank index, and B.sub.j is the number of blocks in a rank j logical drive;
- (c) computing a set of starting logical drive block addresses for the first logical drive, D.sub.mi,pi, on each channel, {s.sub.mi (0)}, as follows:
- s.sub.mi (0)=(((n+i)-m.sub.i)/C)-M.sub.pi ;
- (d) computing the number of blocks to be accessed, x.sub.i (0), for each logical drive, D.sub.mi,pi, as follows:
- x.sub.i (0)=min{ N/C +.sigma.((N mod C)-i), B.sub.pi -s.sub.mi (0)},
- where .sigma.(.multidot.)=1 for ((N mod C)-i)>0, and .sigma.(.multidot.)=0 otherwise;
- (e) testing to determine if additional higher logical ranks are involved in the access by evaluating if:
- x.sub.i (0)< N/C +.sigma.((N mod C)-i);
- (f) setting the starting logical drive block address in logical drive D.sub.mi,pi+1, s.sub.mi (1): 0, if x.sub.i (0) satisfies the condition of testing means (e);
- (g) computing the number of data blocks in logical drive D.sub.mi,pi+1, x.sub.i (1), if x.sub.i (0) satisfies the condition of testing means (e), using the following expression:
- x.sub.i (1)=max{0,min{ N/C +.sigma.((N mod C)-i)-x.sub.i (0),B.sub.(pi+1) }};
- (h) testing to determine if additional higher logical ranks are involved in the access by evaluating if x.sub.i (j)>0, where ##EQU21## so that if x.sub.i (j)>0, x.sub.i (j) represents the number of blocks in logical drive D.sub.mi,pi+j involved in the access and s.sub.mi (j)=0 represents the starting logical drive block address;
- (i) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, D.sub.mk,pk, to determine physical rank and physical channel; and
- (j) adding a physical address of the logical drive's block number 0 to the logical starting block address, s.sub.mi (j) to determine a physical starting block address.
- 3. The system of claim 2 wherein the translation means further comprises means for issuing a SEEK command to a next higher physical rank, p.sub.j +1, drive after a READ or WRITE command has been issued to a physical drive of rank p.sub.j.
- 4. The system of claim 2 wherein the translation means further comprises additional means for striping a set of k-tuple logical blocks per logical channel, each k-tuple logical block being a subset of k logical blocks, by substituting parameters n' and N' for n and N respectively, where n'= n/k and N'= (n+N-1)/k - n/k +1, the additional means comprising means for:
- (a) computing a new first logical starting address, s.sub.m0 '(0), of the first logical drive, D.sub.m0,p0, involved in the transfer, using
- s.sub.m0 '(0)=s.sub.m0 (0)+n mod k;
- (b) computing a new transfer length, x.sub.i '(j), for the last logical drive, D.sub.mi,p0+j, using
- x.sub.i '(j)=x.sub.i (j)-k+((N+n) mod k,
- if ((N+n) mod k)>0.
- 5. The system of claim 2 further comprising a parity channel of physical drives.
- 6. The system of claim 1 wherein the translation means is for accommodating an array of C logical data channels, using a RAID-1 partitioned mirrored data format, the logical access address data described by a starting block address, n, and a logical block length parameter, N, indicating the number of contiguous blocks to be accessed, and producing a set of channel indices, {m.sub.i }, a set of logical drive starting addresses, {s.sub.mi (j)}, and a set of logical drive transfer length parameters, {x.sub.i (j)}, indicating the number of contiguous blocks to be accessed for each logical rank, p.sub.j, for each channel, for producing a set of logical drive access address data requiring a minimal set of access commands, the partitioned memory having a first set of channel and rank coordinates, (m,p), for a first partitioned section of memory, and a second set (m', p') for a second partitioned section of memory, the translation means comprises means for:
- (a) mapping the logical block address information given as the logical starting block, n, and the number of contiguous blocks, N, to be accessed into a set of logical channel indices, {m.sub.i }, by use of the following relationship:
- m.sub.i =(n+i) mod C,
- where 0.ltoreq.i.ltoreq.C-1 is an index representing the order of accessing the channel corresponding to the value of m.sub.i ;
- (b) identifying the first logical drive, D.sub.mi,pi, on each channel involved in the access, the coordinate parameters (m.sub.i,p.sub.i), satisfying the following conditions:
- M.sub.pi .ltoreq.(n+i)/C.ltoreq.M.sub.pi+1,
- where M.sub.pi =.SIGMA..sub.j=0.sup.pi-1 B.sub.j, p.sub.i is a logical rank index, and B.sub.j is the number of blocks in a rank j logical drive;
- (c) computing a set of starting logical drive block addresses for the first logical drive, D.sub.mi,pi, on each channel, {s.sub.mi (0)}, as follows:
- s.sub.mi (0)=(((n+i)-m.sub.i)/C)-M.sub.pi ;
- (d) computing the number of blocks to be accessed, x.sub.i (0), for each logical drive, D.sub.mi,pi, as follows:
- x.sub.i (0)=min{ N/C +.sigma.((N mod C)-i), B.sub.pi -s.sub.mi (0)},
- where .sigma.(.multidot.)=1 for ((N mod C)-i)>0, and .sigma.(.multidot.)=0 otherwise;
- (e) testing to determine if additional higher logical ranks are involved in the access by evaluating if:
- x.sub.i (0)< N/C +.sigma.((N mod C)-i);
- (f) setting the starting logical drive block address in logical drive D.sub.mi,pi+1, s.sub.mi (1)=0, if x.sub.i (0) satisfies the condition of testing means (e);
- (g) computing the number of data blocks in logical drive D.sub.mi,pi+1, x.sub.i (1), if x.sub.i (0) satisfies the condition of testing means (e), using the following expression:
- x.sub.i (1)=max{0,min{ N/C +.sigma.((N mod C)-i)-x.sub.i (0),B.sub.(pi+1) }};
- (h) testing to determine if additional higher logical ranks are involved in the access by evaluating if x.sub.i (j)>0, where ##EQU22## so that if x.sub.i (j)>0, x.sub.i (j) represents the number of blocks in logical drive D.sub.mi,pi+j involved in the access and s.sub.mi (j)=0 represents the starting logical drive block address;
- (i) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, D.sub.mk,pk, to determine physical rank and physical channel; and
- (j) adding a physical address of the logical drive's block number 0 to the logical starting block address, s.sub.mi (j) to determine a physical starting block address;
- and for the second memory section, use means (a)-(j) as indicated above, using coordinate system (m', p').
- 7. The system of claim 6 wherein the partitioning of logical array memory is along a rank boundary.
- 8. The system of claim 6 wherein the partitioning of logical array memory is along a channel boundary.
- 9. The system of claim 1 wherein the translation means is for accommodating an array of C logical data channels, using a RAID-3 format, the logical access address data described by a starting block address, n, and a logical block length parameter, N, indicating the number of contiguous blocks to be accessed, and for producing a set of logical drive starting addresses, {s(j)}, and a set of logical drive transfer length parameters, {x(j)}, indicating the number of contiguous blocks to be accessed at logical ranks, {p.sub.j }, for each channel, for producing a set of logical drive access address data requiring a minimal set of access commands, the translation means comprises means for:
- (a) mapping the logical block address information given as the logical starting block, n, and the number of contiguous blocks to be accessed, N, into a rank index p.sub.0, that represents the first rank of logical drives involved in the data access and satisfies the condition:
- M.sub.p0 .ltoreq.n.ltoreq.M.sub.p0+1,
- where M.sub.p0 =.SIGMA..sub.k=0.sup.p0-1 B.sub.k ', M.sub.0 =0 and B.sub.k ' is the number of blocks in all logical drives in rank k;
- (b) computing a starting logical drive block address, s(0) , on each channel, as follows:
- s(0)=n-M.sub.p0 ;
- (c) computing the number of blocks to be accessed, x(0), for each channel as follows:
- x(0)=min{N, B.sub.p -s(0)};
- (d) testing to determine if additional higher logical ranks are involved in the access by evaluating if:
- x(0)<N,
- which, if satisfied, indicates that the rank p.sub.0 +1 logical drives are involved with starting addresses of s(1)=0;
- (e) computing the number of data blocks to be accessed in each logical drive, if x(0) satisfies the condition of testing means (d), by evaluating the following expression:
- x(1)=max{0,min{(N-x(0)), B.sub.(p0+1) }};
- (f) testing to determine if additional higher logical ranks are involved in the access by evaluating if x(j)>0, where ##EQU23## so that if x(j)>0, x(j) represents the number of blocks, beginning at address s(j)=0, in all memory units of rank p.sub.j =p.sub.0 +j;
- (g) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, D.sub.mk,pk, to determine physical rank and physical channel; and
- (h) adding the physical address of the logical drive's block number 0 to the logical starting block address, s(k) to determine physical starting block address.
- 10. The system of claim 1 wherein the translation means is for accommodating an array of C logical data channels, using a RAID-5 block striping format with distributed parity for allowing parallel access operations, the distributed parity blocks located at reserved logical block addresses, n.sub.j, where n.sub.j satisfies a constraint condition, n.sub.j mod C.sup.2 =j(C+1) for j=0, 1, 2, . . . , C-1, the logical access address data described by a starting block address, n, and a logical block length parameter, N, indicating the number of contiguous blocks to be accessed, and producing a set of channel indices, {m.sub.i }, a set of logical drive starting addresses, {s.sub.mi (j)}, and a set of logical drive transfer length parameters, {x.sub.i (j)}, indicating the number of contiguous blocks to be accessed for each logical rank, p.sub.j, for each channel, for producing a set of logical access address data requiring a minimal set of access commands, the translation means comprises means for:
- (a) defining a modified logical block address index, n', and a modified length index, N', satisfying the following conditions:
- n'=n+P(n)
- and
- N'=N+P(n+N-1)-P(n),
- where ##EQU24## (b) mapping the modified logical block address information given as the logical starting block, n', and the number of contiguous blocks to be accessed, N', into a set of logical channel indices, {m.sub.i }, by use of the following relationship:
- m.sub.i =(n'+i) mod C,
- where 0.ltoreq.i.ltoreq.C-1 is an index representing the order of accessing the channel corresponding to the value of m.sub.i ;
- (c) identifying the first logical drive, D.sub.mi,pi, on each channel involved in the access, the coordinate parameters (m.sub.i,p.sub.i), satisfying the following conditions:
- M.sub.pi .ltoreq.(n'+i)/C.ltoreq.M.sub.pi+1,
- where M.sub.pi =.SIGMA..sub.j=0.sup.pi-1 B.sub.j, p.sub.i is a logical rank index, and B.sub.j is the number of blocks in rank j logical drive;
- (d) computing a set of starting logical drive block addresses for the first logical drive, D.sub.mi,pi, on each channel, {s.sub.mi (0)}, as follows:
- s.sub.mi (0)=(((n'+i)-m.sub.i)/C)-M.sub.pi ;
- (e) computing the number of blocks to be accessed, x.sub.i (0), for each logical drive, D.sub.mi,pi, as follows:
- x.sub.i (0)=min{ N'/C +.sigma.((N' mod C)-i), B.sub.pi -s.sub.mi (0))},
- where .sigma.(.multidot.)=1 for ((N' mod C)-i)>0, and .sigma.(.multidot.)=0 otherwise;
- (f) testing to determine if additional higher logical ranks are involved in the access by evaluating if:
- x.sub.i (0)< N'/C +.sigma.((N' mod C)-i);
- (g) setting the starting logical drive block address in logical drive
- D.sub.mi,pi+1, s.sub.mi (1)=0;
- (h) computing the number of data blocks in logical drive D.sub.mi,pi+1, x.sub.i (1), if x.sub.i (0) satisfies the condition of testing means (f), using the following expression:
- x.sub.i (1)=max{0,min{ N'/C +.sigma.((N' mod C)-i)-x.sub.i (0), B.sub.pi+1) }};
- (i) testing to determine if additional higher logical ranks are involved in the access by evaluating if x.sub.i (j)>0, where ##EQU25## so that if x.sub.i (j)>0, x.sub.i (j) represents the number of blocks in logical drive D.sub.mi,pi+j involved in the access and s.sub.mi (j)=0 represents the starting logical drive block address;
- (j) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, D.sub.mk,pk, to determine physical rank and physical channel; and
- (k) adding the physical address of the logical drive's block number 0 to the logical starting block address, s.sub.i (j), to determine physical starting block address.
- 11. The system of claim 10 wherein the translation means for translating logical access address data to a physical array access address data set further comprises means for determining that block k.sub.i of drive D.sub.mi,pi is a parity block, if, and only if, the following expression is true:
- (C(M.sub.pi +k)+m.sub.i) mod C.sup.2 =m.sub.i (C+1).
- 12. The system of claim 1 wherein the translation means is for accommodating an array of C logical data channels, using a two dimensional RAID-2D5 block striping format with distributed parity for allowing parallel access operations, the distributed parity blocks located at reserved logical block addresses, n.sub.j, where n.sub.j satisfies a constraint condition, n.sub.j mod C.sup.2 =j(C+1) for j=0, 1, 2, . . . , C-1, the logical access address data described by a starting block address, n, and a logical block length parameter, N, indicating the number of contiguous blocks to be accessed, and producing an intermediate set of logical channel indices, {m.sub.i }, a final set of logical channel indices {m.sub.i '}, a set of logical drive starting addresses, {s.sub.mi (j)}, and a set of logical drive transfer length parameters, {x.sub.i (j)}, indicating the number of contiguous blocks to be accessed for each logical rank, p.sub.j, for each channel, for producing a set of logical access address data requiring a minimal set of access commands, the translation means comprises means for:
- (a) defining a modified channel parameter, C', and a modified rank parameter R', satisfying the following conditions:
- C'=C.multidot.R
- and
- R'=1;
- (b) defining a modified logical block address index, n', and a modified length index, N', satisfying the following conditions:
- n'=n+P(n)
- and
- N'=N+P(n+N-1)-P(n),
- where ##EQU26## (c) mapping the modified logical block address information given as the logical starting block, n', and the number of contiguous blocks to be accessed, N', into an intermediate set of logical channel indices, {m.sub.i }, by use of the following relationship:
- m.sub.i =(n'+i) mod C',
- where 0.ltoreq.i.ltoreq.C'-1 is an index representing the order of accessing the channel corresponding to the value of m.sub.i ;
- (d) identifying the logical drive, D.sub.mi,0, on each channel involved in the access, the coordinate parameters (m.sub.i, 0), satisfying the following conditions:
- .ltoreq. (n'+i)/C'.ltoreq.B.sub.0,
- where B.sub.0 is the number of blocks each logical drive;
- (e) computing a set of starting logical drive block addresses for the logical drive, D.sub.mi,0, on each channel, {s.sub.mi (0)}, as follows:
- s.sub.mi (0)=(((n'+i)-m.sub.i)/C')-B.sub.0 ;
- (f) computing the number of blocks to be accessed, x.sub.i (0), for each logical drive, D.sub.mi,0, as follows:
- x.sub.i (0)=min{ N'/C' +.sigma.((N' mod C')-i), B.sub.0 -s.sub.mi (0)},
- where .sigma.(.multidot.)=1 for ((N' mod C')-i)>0, and .sigma.(.multidot.)=0 otherwise;
- (g) computing a new modified set of channel parameters, {m.sub.i '}, and a modified set of rank parameters, {p.sub.i '}, satisfying the following conditions:
- m.sub.i '=m.sub.i mod C
- and
- p.sub.i '= m.sub.i /C ;
- (h) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, D.sub.m.sbsb.k.sub.'p.sbsb.k.sub.40 , to determine physical rank and physical channel; and
- (i) adding the physical address of the logical drive's block number 0 to the logical starting block address, s.sub.i (j), of each logical drive to determine physical starting block address.
- 13. The system of claim 1 wherein the translation means is for accommodating an array of C logical data channels, using a two dimensional block striping RAID-2D4 format, the logical access address data described by a starting block address, n, and a logical block length parameter, N, indicating the number of contiguous blocks to be accessed, and producing an intermediate set of logical channel indices, {m.sub.i }, a final set of logical channel indices, {m.sub.i ', a set of logical drive starting addresses, {s.sub.mi (j)}, and a set of logical drive transfer length parameters, {x.sub.i (j)}, indicating the number of contiguous blocks to be accessed for each logical rank, p.sub.j, for each channel, for producing a set of logical access address data requiring a minimal set of access commands, the translation means comprises means for:
- (a) defining a modified channel parameter, C', and a modified rank parameter R', satisfying the following conditions:
- C'=C.multidot.R
- and
- R'=1;
- (b) mapping the logical block address information given as the logical starting block, n, and the number of contiguous blocks, N, to be accessed into an intermediate set of logical channel indices, {m.sub.i }, by use of the following relationship:
- m.sub.i =(n+i) mod C',
- where 0.ltoreq.i.ltoreq.C'-1 is an index representing the order of accessing the channel corresponding to the value of m.sub.i ;
- (c) identifying the logical drive, D.sub.mi,0, on each channel involved in the access, the coordinate parameters (m.sub.i, 0), satisfying the following conditions:
- 0.ltoreq.(n+i)/C'.ltoreq.B.sub.0,
- where B.sub.0 is the number of blocks in each logical drive;
- (d) computing a set of starting logical drive block addresses for the first logical drive, D.sub.mi,0, on each channel, {s.sub.mi (0)}, as follows:
- s.sub.mi (0)=(((n+i)-m.sub.i)/C')-B.sub.0 ;
- (e) computing the number of blocks to be accessed, x.sub.i (0), for each logical drive, D.sub.mi,0, as follows:
- x.sub.i (0)=min{ N/C' +.sigma.((N mod C')-i), B.sub.0 -s.sub.mi (0)},
- where .sigma.(.multidot.)=1 for ((N mod C')-i)>0, and .sigma.(.multidot.)=0 otherwise;
- (f) computing a new modified set of channel parameters, {m.sub.i '}, and a modified set of rank parameters, {p.sub.i '}, satisfying the following conditions:
- m.sub.i '=m.sub.i mod C
- and
- p.sub.i '= m.sub.i /C ;
- (g) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, D.sub.m.sbsb.k.sub.',p.sbsb.k.sub.', to determine physical rank and physical channel; and
- (h) adding the physical address of the logical drive's block number 0 to the logical starting block address, s.sub.i (j), of each logical drive to determine physical starting block address.
- 14. The system of claim 1 further comprising scheduling means, controlled by the scheduling program, for determining a sequence for executing a general set of host access requests to the memory array, the sequence including parallel execution of the queued set of memory array access requests.
- 15. The system of claim 14 wherein the scheduling means operates on a prescribed cost function, D, representative of the latency for all possible parallel and sequential orders of accessing the queued set of m host system access requests to the memory array, the queued set indexed 1,2, . . . , m, the order of access ensuring a bounded latency for all queued host system access requests by maintaining a count of the number of times a particular access request has been rescheduled without execution, the prescribed cost function being ##EQU27## where a.sub.k is a resource vector of dimensions C.times.1, with each vector element corresponding to a specific physical channel, each vector element value being a 1 if the corresponding physical channel of the k.sup.th queued access request is being used for the access, and a 0 if the corresponding channel is not being used, n.sub.0 +N.sub.0 is an initial address corresponding to a last address used to access memory, n.sub.k is a memory array address to the k.sup.th queued memory access request, N.sub.k is a memory array block size of the k.sup.th queued memory access request, x.sub.ij is a binary valued coefficient, {0,1}, which indicates that an i.sup.th queued memory access is followed by a j.sup.th queued memory access when x.sub.ij =1, and 2.sup.-adj is a binary parameter scaling factor in which d.sub.j is a count of the number of times the j.sup.th access request has been rescheduled without execution and a is a constant scaling parameter, the scheduling means comprising means for:
- (a) forming a resource vector set {a.sub.k };
- (b) counting the number of times each of the access requests has been rescheduled without execution in order to form a set of counts {d.sub.j };
- (c) minimizing the cost function D subject to a set of conditions as follows: ##EQU28## (d) ordering the set of m, {x.sub.ij }, obtained from the means for minimizing cost function D, beginning with x.sub.0b1, and proceeding to the right as follows:
- x.sub.0b1 x.sub.b1b2 x.sub.b2b3 . . . x.sub.bm-1bm,
- so that each j.sup.th index of each coefficient, x.sub.ij, becomes an i.sup.th index of a next right adjacent coefficient;
- (e) arranging the order of b-subscripts of the m coefficients in ascending order, b.sub.1 b.sub.2 b.sub.3 . . . b.sub.m, for scheduling an optimal sequence of the m queued access requests indexed 1, 2, . . . , m, so that, by following the order of subscripts, the optimal sequence for accessing yields a strictly sequential accessing order that has a minimum latency relative to any other sequential accessing order; and
- (f) sorting the requests in the memory access queue in the minimum latency order obtained from means (e).
- 16. The system of claim 15 wherein the means for minimizing cost function D uses linear programming simplex methods.
- 17. The system of claim 15 further comprising means for scheduling parallel access that comprises means for:
- (g) determining channel bus resource usage of the queued requests; and
- (h) accessing the memory array in accordance with the order of the memory access obtained by means (f).
- 18. A method for translating logical access address data to a logical and physical drive access address data set for a logical array of bulk memories having C logical data channels, one parity channel, and a plurality of logical rank levels, the array using a RAID-4 block striping data format, the logical access address data described by a starting block address, n, and a block length parameter, N, indicating the number of contiguous blocks to be accessed, and producing a set of channel indices, {m.sub.i }, a set of channel starting addresses, {s.sub.mi (j)}, and a set of channel transfer length parameters, {x.sub.i (j)}, indicating the length of access for each rank, p.sub.j, involved in the access for each channel, for producing an optimal set of logical drive access addresses requiring a minimal set of access commands, the method comprises:
- (a) mapping the logical block address information given as the logical starting block, n, and the number of contiguous blocks, N, to be accessed into a set of logical channel indices, {m.sub.i }, by use of the following relationship:
- m.sub.i =(n+i) mod C,
- where 0.ltoreq.i.ltoreq.C-1 is an index representing the order of accessing the channel corresponding to the value of m.sub.i ;
- (b) identifying the first logical drive, D.sub.mi,pi, on each channel involved in the access, the coordinate parameters (m.sub.i,p.sub.i), satisfying the following conditions:
- M.sub.pi .ltoreq.(n+i)/C.ltoreq.M.sub.pi+1,
- where M.sub.pi =.SIGMA..sub.j=0.sup.pi-1 B.sub.j, p.sub.i is a logical rank index, and B.sub.j is the number of blocks in rank j logical drive;
- (c) computing a set of starting logical drive block addresses for the first logical drive, D.sub.mi,pi, on each channel, {s.sub.mi (0)}, as follows:
- s.sub.mi (0)=(((n+i)-m.sub.i)/C)-M.sub.pi ;
- (d) computing the number of blocks to be accessed, x.sub.i (0), for each logical drive, D.sub.mi,pi, as follows:
- x.sub.i (0)=min { N/C +.sigma.((N mod C)-i), B.sub.pi -s.sub.mi (0)},
- where .sigma.(.multidot.)=1 for ((N mod C)-i)>0, and .sigma.(.multidot.)=0 otherwise;
- (e) testing to determine if additional higher logical ranks are involved in the access by evaluating if:
- x.sub.i (0)< N/C +.sigma.((N mod C)-i);
- (f) setting the starting logical drive block address in logical drive D.sub.mi,pi+1, s.sub.mi (1)=0, if x.sub.i (0) satisfies the condition of step (e);
- (g) computing the number of data blocks in logical drive D.sub.mi,pi+1, x.sub.1 (1), if x.sub.i (0) satisfies the condition of step (e), using the following expression:
- x.sub.i (1)=max{0,min{ N/C +.sigma.((N mod C)-i)-x.sub.i (0), B.sub.(pi+1) }};
- (h) testing to determine if additional higher logical ranks are involved in the access by evaluating if x.sub.i (j)>0, where ##EQU29## so that if x.sub.i (j)>0, x.sub.i (j) represents the number of blocks in logical drive D.sub.mi,pi+j involved in the access and s.sub.mi (j)=0 represents the starting logical drive block address;
- (i) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, to determine physical rank and physical channel; and
- (j) adding a physical address of the logical drive's block number 0 to the logical starting block address, s.sub.mi (j) to determine a physical starting block address.
- 19. A method for translating logical address access data to a logical and physical drive access data set, for accommodating an array of C logical data channels using a RAID-1 partitioned mirrored data format, the logical access address data described by a starting block address, n, and a logical block length parameter, N, indicating the number of contiguous blocks to be accessed, and producing a set of channel indices, {m.sub.i }, a set of logical drive starting addresses, {s.sub.mi (j)}, and a set of logical drive transfer length parameters, {x.sub.i (j)}, indicating the number of contiguous blocks to be accessed for each logical rank, p.sub.j, for each channel, for producing a set of logical drive access address data requiring a minimal set of access commands, the partitioned memory having a first set of channel and rank coordinates, (m,p), for a first partitioned section of memory, and a second set (m', p') for a second partitioned section of memory, the translation method comprising:
- (a) mapping the logical block address information given as the logical starting block, n, and the number of contiguous blocks, N, to be accessed into a set of logical channel indices, {m.sub.i }, by use of the following relationship:
- m.sub.i =(n+i) mod C,
- where 0.ltoreq.i.ltoreq.C-1 is an index representing the order of accessing the channel corresponding to the value of m.sub.i ;
- (b) identifying the first logical drive, D.sub.mi,pi, on each channel involved in the access, the coordinate parameters (m.sub.i,p.sub.i), satisfying the following conditions:
- M.sub.pi .ltoreq.(n+i)/C.ltoreq.M.sub.pi+1,
- where M.sub.pi =.SIGMA..sub.j=0.sup.pi-1 B.sub.j, p.sub.i is a logical rank index, and B.sub.j is the number of blocks in a rank j logical drive;
- (c) computing a set of starting logical drive block addresses for the first logical drive, D.sub.mi,pi, on each channel, {s.sub.mi (0)}, as follows:
- s.sub.mi (0)=(((n+i)-m.sub.i)/C)-M.sub.pi ;
- (d) computing the number of blocks to be accessed, x.sub.i (0), for each logical drive, D.sub.mi,pi, as follows:
- x.sub.i (0)=min{ N/C +.sigma.((N mod C)-i), B.sub.pi -s.sub.mi (0)},
- where .sigma.(.multidot.)=1 for ((N mod C)-i)>0, and .sigma.(.multidot.)=0 otherwise;
- (e) testing to determine if additional higher logical ranks are involved in the access by evaluating if:
- x.sub.i (0)< N/C +.sigma.((N mod C)-i);
- (f) setting the starting logical drive block address in logical drive D.sub.mi,pi+1, s.sub.mi (1)=0, if x.sub.i (0) satisfies the condition of step (e);
- (g) computing the number of data blocks in logical drive D.sub.mi,pi+1, x.sub.i (1), if x.sub.i (0) satisfies the condition of step (e), using the following expression:
- x.sub.i (1)=max{0,min{ N/C +.sigma.((N mod C)-i)-x.sub.i (0), B.sub.(pi+1) }};
- (h) testing to determine if additional higher logical ranks are involved in the access by evaluating if x.sub.i (j)>0, where ##EQU30## so that if x.sub.i (j)>0, x.sub.i (j) represents the number of blocks in logical drive D.sub.mi,pi+j involved in the access and s.sub.mi (j)=0 represents the starting logical drive block address;
- (i) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, D.sub.mk,pk, to determine physical rank and physical channel; and
- (j) adding a physical address of the logical drive's block number 0 to the logical starting block address, s.sub.mi (j) to determine a physical starting block address;
- and for the second memory section, use means (a)-(j) as indicated above, using coordinate system (m', p').
- 20. A method for translating logical address access data to a logical and physical drive access data set, for accommodating an array of C logical data channels using a RAID-3 format, the logical access address data described by a starting block address, n, and a logical block length parameter, N, indicating the number of contiguous blocks to be accessed, and for producing a set of logical drive starting addresses, {s(j)), and a set of logical drive transfer length parameters, {x(j)}, indicating the number of contiguous blocks to be accessed at logical ranks, {p.sub.j }, for each channel, for producing a set of logical drive access address data requiring a minimal set of access commands, the method comprising:
- (a) mapping the logical block address information given as the logical starting block, n, and the number of contiguous blocks to be accessed, N, into a rank index p.sub.0, that represents the first rank of logical drives involved in the data access and satisfies the condition:
- M.sub.p0 .ltoreq.n.ltoreq.M.sub.p0+1,
- where M.sub.p0 =.SIGMA..sub.k=0.sup.p0-1 B.sub.k ', M.sub.0 =0 and B.sub.k ' is the number of blocks in all logical drives in rank k;
- (b) computing a starting logical drive block address, s(0) , on each channel, as follows:
- s(0)=n-M.sub.p0 ;
- (c) computing the number of blocks to be accessed, x(0), for each channel as follows:
- x(0)=min{N, B.sub.p -s(0)};
- (d) testing to determine if additional higher logical ranks are involved in the access by evaluating if:
- x(0)<N,
- which, if satisfied, indicates that the rank p.sub.0 +1 logical drives are involved with starting addresses of s(1)=0;
- (e) computing the number of data blocks to be accessed in each logical drive, if x(0) satisfies the condition of step (d), by:
- x(1)=max{0,min{(N-x(0)), B.sub.(p0+1) }};
- (f) testing to determine if additional higher logical ranks are involved in the access by evaluating if x(j)>0, where ##EQU31## so that if x(j)>0, x(j) represents the number of blocks, beginning at address s(j)=0, in all memory units of rank p.sub.j =p.sub.0 +j;
- (g) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, D.sub.mk,pk, to determine physical rank and physical channel; and
- (h) adding the physical address of the logical drive's block number 0 to the logical starting block address, s(k) to determine physical starting block address.
- 21. A method for translating logical address access data to a logical and physical drive access data set, for accommodating an array of C logical data channels using a RAID-5 block striping format with distributed parity for allowing parallel access operations, the distributed parity blocks located at reserved logical block addresses, n.sub.j, where n.sub.j satisfies a constraint condition, n.sub.j mod C.sup.2 =j(C+1) for j=0, 1, 2, . . . , C-1, the logical access address data described by a starting block address, n, and a logical block length parameter, N, indicating the number of contiguous blocks to be accessed, and producing a set of channel indices, {m.sub.i }, a set of logical drive starting addresses, {s.sub.mi (j)}, and a set of logical drive transfer length parameters, {x.sub.i (j)}, indicating the number of contiguous blocks to be accessed for each logical rank, p.sub.j, for each channel, for producing a set of logical access address data requiring a minimal set of access commands, the method comprising:
- (a) defining a modified logical block address index, n', and a modified length index, N', satisfying the following conditions:
- n'=n+P(n)
- and
- N'=N+P(n+N-1)-P(n),
- where ##EQU32## (b) mapping the modified logical block address information given as the logical starting block, n', and the number of contiguous blocks to be accessed, N', into a set of logical channel indices, {m.sub.i }, by use of the following relationship:
- m.sub.i =(n'+i) mod C,
- where 0.ltoreq.i.ltoreq.C-1 is an index representing the order of accessing the channel corresponding to the value of m.sub.i ;
- (c) identifying the first logical drive, D.sub.mi,pi, on each channel involved in the access, the coordinate parameters (m.sub.i,p.sub.i), satisfying the following conditions:
- M.sub.pi .ltoreq.(n'+i)/C.ltoreq.M.sub.pi+1,
- where M.sub.pi =.SIGMA..sub.j+0.sup.pi-1 B.sub.j, p.sub.i is a logical rank index, and B.sub.j is the number of blocks in a rank j logical drive;
- (d) computing a set of starting logical drive block addresses for the first logical drive, D.sub.mi,pi, on each channel, {s.sub.mi (0)}, as follows:
- s.sub.mi (0)=(((n'+i)-m.sub.i)/C)-M.sub.pi ;
- (e) computing the number of blocks to be accessed, x.sub.i (0), for each logical drive, D.sub.mi,pi, as follows:
- x.sub.i (0)=min { N'/C +.sigma.((N' mod C)-i), B.sub.pi -s.sub.mi (0)},
- where .sigma.(.multidot.)=1 for ((N' mod C)-i)>0, and .sigma.(.multidot.)=0 otherwise.
- (f) testing to determine if additional higher logical ranks are involved in the access by evaluating if:
- x.sub.i (0)< N'/C +.sigma.((N' mod C)-i);
- (g) setting the starting logical drive block address in logical drive
- D.sub.mi,pi+1, s.sub.mi (1)=0;
- (h) computing the number of data blocks in logical drive D.sub.mi,pi+1, x.sub.i (1), if x.sub.i (0) satisfies the condition of step (f), using the following expression:
- x.sub.i (1)=max{0,min{ N'/C +.sigma.((N' mod C)-i)-x.sub.i (0), B.sub.pi+1) }};
- (i) testing to determine if additional higher logical ranks are involved the access by evaluating if x.sub.i (j)>0, where ##EQU33## so that if x.sub.i (j)>0, x.sub.i (j) represents the number of blocks in logical drive D.sub.mi,pi+j involved in the access and s.sub.mi (j)=0 represents the starting logical drive block address;
- (j) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, D.sub.mk,pk, to determine physical rank and physical channel; and
- (k) adding the physical address of the logical drive's block number 0 to the logical starting block address, s.sub.i (j), to determine physical starting block address.
- 22. The method of claim 21 further comprising a step for determining that block k.sub.i of drive D.sub.mi,pi is a parity block, the step comprising testing if the following expression is true:
- (C(M.sub.pi +k)+m.sub.i) mod C.sup.2 =m.sub.i (C+1),
- and, if true, block k.sub.i is a parity block.
- 23. A method for translating logical address access data to a logical and physical drive access data set, for accommodating an array of C logical data channels, using a two dimensional RAID-2D5 block striping format with distributed parity for allowing parallel access operations, the distributed parity blocks located at reserved logical block addresses, n.sub.j, where n.sub.j satisfies a constraint condition, n.sub.j mod C.sup.2 =j(C+1) for j=0, 1, 2, . . . , C-1, the logical access address data described by a starting block address, n, and a logical block length parameter, N, indicating the number of contiguous blocks to be accessed, and producing an intermediate set of logical channel indices, {m.sub.i }, a final set of logical channel indices {m.sub.i '}, a set of logical drive starting addresses, {s.sub.mi (j)}, and a set of logical drive transfer length parameters, {x.sub.i (j)}, indicating the number of contiguous blocks to be accessed for each logical rank, p.sub.j, for each channel, for producing a set of logical access address data requiring a minimal set of access commands, the translation method comprising:
- (a) defining a modified channel parameter, C', and a modified rank parameter R', satisfying the following conditions:
- C'=C.multidot.R
- and
- R'=1;
- (b) defining a modified logical block address index, n', and a modified length index, N', satisfying the following conditions:
- n'=n+P(n)
- and
- N'=N+P(n+N-1)-P(n),
- where ##EQU34## (c) mapping the modified logical block address information given as the logical starting block, n', and the number of contiguous blocks to be accessed, N', into an intermediate set of logical channel indices, {m.sub.i }, by use of the following relationship:
- m.sub.i =(n'+i) mod C',
- where 0.ltoreq.i.ltoreq.C'-1 is an index representing the order of accessing the channel corresponding to the value of m.sub.i ;
- (d) identifying the logical drive, D.sub.mi,0, on each channel involved in the access, the coordinate parameters (m.sub.i, 0), satisfying the following conditions:
- .ltoreq. (n'+i)/C'.ltoreq.B.sub.0,
- where B.sub.0 is the number of blocks each logical drive;
- (e) computing a set of starting logical drive block addresses for the logical drive, D.sub.mi,0, on each channel, {s.sub.mi (0), as follows:
- s.sub.mi (0)=(((n'+i)-m.sub.i)/C')-B.sub.0 ;
- (f) computing the number of blocks to be accessed, x.sub.i (0), for each logical drive, D.sub.mi,0, as follows:
- x.sub.i (0)=min{ N'/C' +.sigma.((N' mod C')-i), B.sub.0 -s.sub.mi (0)},
- where .sigma.(.multidot.)=1 for ((N' mod C')-i)>0, and .sigma.(.multidot.)=0 otherwise;
- (g) computing a new modified set of channel parameters, {m.sub.i '}, and a modified set of rank parameters, {p.sub.i '}, satisfying the following conditions:
- m.sub.i '=m.sub.i mod C
- and
- p.sub.i '= m.sub.i /C ;
- (h) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, D.sub.m.sbsb.k.sub.',p.sbsb.k.sub.', to determine physical rank and physical channel; and
- (i) adding the physical address of the logical drive's block number 0 to the logical starting block address, s.sub.i (j), of each logical drive to determine physical starting block address.
- 24. A method for translating logical address access data to a logical and physical drive access data set, for accommodating an array of C logical data channels, using a two dimensional block striping RAID-2D4 format, the logical access address data described by a starting block address, n, and a logical block length parameter, N, indicating the number of contiguous blocks to be accessed, and producing an intermediate set of logical channel indices, {m.sub.i }, a final set of logical channel indices, {m.sub.i '}, a set of logical drive starting addresses, {s.sub.mi (j)}, and a set of logical drive transfer length parameters, {x.sub.i (j)}, indicating the number of contiguous blocks to be accessed for each logical rank, p.sub.j, for each channel, for producing a set of logical access address data requiring a minimal set of access commands, the translation method comprising:
- (a) defining a modified channel parameter, C', and a modified rank parameter R', satisfying the following conditions:
- C'=C.multidot.R
- and
- R'=1;
- (b) mapping the logical block address information given as the logical starting block, n, and the number of contiguous blocks, N, to be accessed into an intermediate set of logical channel indices, {m.sub.i }, by use of the following relationship:
- m.sub.i =(n+i) mod C',
- where 0.ltoreq.i.ltoreq.C'-1 is an index representing the order of accessing the channel corresponding to the value of m.sub.i ;
- (c) identifying the logical drive, D.sub.mi,0, on each channel involved in the access, the coordinate parameters (m.sub.i, 0), satisfying the following conditions:
- 0.ltoreq.(n+i)/C'.ltoreq.B.sub.0,
- where B.sub.0 is the number of blocks in each logical drive;
- (d) computing a set of starting logical drive block addresses for the first logical drive, D.sub.mi,0, on each channel, {s.sub.mi (0)}, as follows:
- s.sub.mi (0)=(((n+i)-m.sub.i)/C')-B.sub.0 ;
- (e) computing the number of blocks to be accessed, x.sub.i (0), for each logical drive, D.sub.mi,0, as follows:
- x.sub.i (0)=min{ N/C' +.sigma.((N mod C')-i), B.sub.0 -s.sub.mi (0)},
- where .sigma.(.multidot.)=1 for ((N mod C')-i)>0, and .sigma.(.multidot.)=0 otherwise;
- (f) computing a new modified set of channel parameters, {m.sub.i '56 , and a modified set of rank parameters, {p.sub.i '}, satisfying the following conditions:
- m.sub.i '=m.sub.i mod C
- and
- p.sub.i '= m.sub.i /C ;
- (g) executing a user specified mapping of logical channel and logical rank to physical channel and physical rank of logical drive, D.sub.m.sbsb.k.sub.',p.sub..sbsb.k.sub.', to determine physical rank and physical channel; and
- (h) adding the physical address of the logical drive's block number 0 to the logical starting block address, s.sub.i (j), of each logical drive to determine physical starting block address.
- 25. A method for accessing a memory array of C physical channels that reduces latency by optimizing parallel access to a memory array of discrete bulk memory units organized by physical channel index and physical rank index, wherein bulk memory units with the same rank are of a similar type, and bulk memory units with the same channel index share a common channel data bus, the method comprising:
- (a) receiving an outside request for array memory access, the access identified by a logical memory address and data block length;
- (b) converting logical addresses to physical addresses;
- (c) forming a memory access queue of all requests received but not executed;
- (d) computing the minimum latency order of accessing the queued requests as follows:
- (i) prescribing a cost function, D, representative of the latency for all possible sequential orders of accessing the queued set of m host access requests to the memory array, where ##EQU35## a.sub.k is a C.times.1 resource vector for queued request k with binary elements (0, 1), where a 1 indicates that a particular memory array channel is used by queued request k, n.sub.0 +N.sub.0 is an initial address corresponding to a last array logical address used to access memory, n.sub.k is a memory array logical address to the k.sup.th queued memory access request, N.sub.k is a memory array block size of the k.sup.th queued memory access request, x.sub.ij is a binary valued coefficient, {0,1}, which indicates that an i.sup.th queued memory access is followed by a j.sup.th queued memory access when x.sub.ij =1, and 2.sup.-adj is a binary parameter scaling factor in which d.sub.j is a count of the number of time the j.sup.th access request has been rescheduled without execution and a is a constant scaling parameter,
- (ii) minimizing cost function D subject to a set of conditions as follows: ##EQU36## (iii) ordering the set of m coefficients, {x.sub.ij }, obtained in step (d)(ii), beginning with x.sub.0b1, and proceeding to the right as follows:
- x.sub.0b1 x.sub.b1b2 x.sub.b2b3 . . . x.sub.bm-1bm,
- so that each j.sup.th index of each coefficient, x.sub.ij, becomes an i.sup.tk index of a next right adjacent coefficient,
- (iv) arranging the order of b-subscripts of the m coefficients in ascending order, b.sub.1 b.sub.2 b.sub.3 . . . b.sub.m, for indicating the left to right sequence for ordering the m queued access requests indexed 1, 2, . . . , m, so that, by following the order of subscripts, an optimized sequence for accessing yields an access sequence with minimum latency;
- (e) sorting the requests in the memory access queue in the minimum latency order obtained in step (d); and
- (f) accessing the memory array in accordance with the order of the memory access queue of step (e).
- 26. The method of claim 25 wherein the step of minimizing the performance function, D, is by use of linear programming simplex methods.
CROSS-REFERENCE TO EARLIER FILED APPLICATION
This application is a continuation-in-part of application Ser. No. 08/035,410, filed Mar. 23, 1993 now issued U.S. Pat. No. 5,367,669 dated Nov. 22, 1994.
US Referenced Citations (5)
Non-Patent Literature Citations (1)
Entry |
David A. Patterson et al., "A case for Redundant Arrays of Inexpensive Disks (RAID), " Report No. UCB/CSD 87/391, Computer Science Division (EECS), pp. 1-24 (Dec. 1987). |
Continuation in Parts (1)
|
Number |
Date |
Country |
Parent |
35410 |
Mar 1993 |
|