RAID array Data recovery in Brighton, London, Manchester, Birmingham, Oxford, Staffordshire, Shropshire, Cheshire, Derbyshire, North West, West Midlands, Walsall, Wolverhampton, Stafford, Newcastle under Lyme, Stoke on Trent, Stone, Burton on Trent, Lichfield, Shrewsbury, Telford, Newport, Cannock, Rugeley, Uttoxeter, Keele, Trentham, Blythe Bridge, Cheadle, Barlaston, Festival Park, Hastings, Welwyn Garden City, Hertfordshire, Tamworth, Bedford, Cambridge, Northampton, Milton Keynes, Cambridgeshire, Peterborough, Leicestershire, Lincolnshire, Middlesex, Norfolk, Great Yarmouth, Lowestoft, Northamptonshire, Nottinghamshire, Warwickshire, Atherstone, Stevenage, Luton, Hemel Hempstead, Glasgow, Scotland, Edinburgh, Fort William, Dundee, Perth, Stirling, Paisley, Dumfries, Elgin, Peterhead, Fraserburgh, Oban, Basildon, Romford, Chelmsford, Benfleet, Southampton, Edgbaston, Islington, Macclesfield, Bridgnorth, Bradford, Sheffield, Leeds, Yorkshire, Fife, Kircaldy, Suffolk, Thetford, Bury St.Edmunds, Ipswich, Newcastle upon Tyne, South Shields, Sunderland, Northumbria, Middlesborough, Hartlepool, Preston, Darlington, Rotherham, Penrith, Workington, Lancaster, Durham, Barrow in Furness, Gateshead, Carlisle, Teeside, Stockton on Tees, Erith, Kent, Ashford, Northhants, Wellingborough, Northamptonshire, Bristol, Swindon, Bournemouth, Plymouth, Hastings, Maidstone, Southend on sea, Aberdeen, Inverness, Bridgnorth, Flakirk, Cardiff, Swansea, Chester, Liverpool, Blackpool, Aberystwyth, Wrexham, Carmarthen, Hull, Norwich, Gloucester, Bridgend, Torquay, Bath, Cantebury, Portsmouth, Exeter, AbuDhabi, Dubai, Sharajah, Belgium, Epsom, Surrey, Northern Ireland, Belfast, Dublin, Londonderry, Armagh, Cork, Eire
Table 7: Support experiment This table shows the average variance of constraints when all dependent constraints were held
pinned, but the remainder of the constraints varied. The jump from 5 to 10 is the biggest decrease in variance, prompting us to use
the value of 10. The results show are from the use of all the heuristics but bad on the 92 News trace.
support is too high, the heuristic will miss chances to optimize blocks which do not occur frequently enough
to pass the threshold.
Table 7 shows experiments with different values of support on the 92 News trace. This is the same
conversion variance experiment found in table 6, where the dependent constraints are held constant, but the
remainder of the constraints are varied. However, this experiment is run on one trace and with different
support thresholds. The experiment shows that a threshold of 10 decreased the amount of variance by a
large amount, leading us to use a threshold of 10 accesses as the minimum to create a constraint. However,
more detailed exploration of this area could be useful.
8.2 Performance Analyzer
There are a variety of tradeoffs in the performance analyzer. The current system uses a very high fidelity
performance analyzer, namely trace-based simulation. However, it could use a variety of cheaper, simpler
performance analysis methods as well.
It could be interesting to experiment with the effects of using the performance analyzer with or without
caching, and with or without overlapping requests. While removing these factors decreases the accuracy
of the model, it also decreases the complexity, making constraint weights more constant. If this does not
significantly decrease the fidelity of the model, this may be advantageous.
8.2.1 Disk Areas
As described earlier, place-in-area constraints do not place blocks in specific locations, but in areas of the
disk. The size of these disk areas has an effect on how the constraints are converted into an actual disk
layout. A larger disk area means that it is possible to place large sequential constraints, and gives the learner
more flexibility in applying changes.
However, large disk areas also increase the amount of variation possible while still satisfying constraints.
If the areas are too large, the performance may depend heavily on the location in the area where the
block is placed, which is not specified by the constraints. This would make the optimization method ineffective.
Experimentation into “good” disk area sizes would be an interesting line of research. We chose to split
the disk into 11 areas, along zone boundaries, as this seems like a size large enough to allow reorganization,
but still large enough for choices in placement.
There are many ways to compute constraint potential, and we have experimented with several of them.
Constraint potential attempts to quantify the usefulness of a constraint, and is calculated using constraint
weights. The ideal value for the potential of a constraint is , where is the sum of the
response times for the trace using the best layout that does not include , and is the sum of the response
times for the trace using the best layout that does include . Effectively, it is the advantage of including
the constraint. Of course, this is not feasible to directly calculate, so each type of learner uses a different
8.3.1 Compare Learner
The compare method computes the constraint potential by comparing the constraint’s weight against the
other options available for a set of blocks. It first computes a per-block weight for the constraint by dividing
the constraint weight by the number of blocks in the constraint. For each block in the constraint, it computes
the per-block weight for all other constraints including the block. The constraint potential is then
, where is the blocks in the constraint, is the per block weight, and
is the best
weight for this block by another constraint.
While this method provides a relative value between options, it does not account for the possibility of
several constraints being applied at the same time on the same set of blocks. In this case, the value of all
of the constraints from the best set will converge to zero. While providing the appropriate contrast between
overlapping blocks, it will not be useful to compare constraints on different sets of blocks, or different
combinations of constraints. This prompted us to explore other combination options.
8.3.2 Application Learner
The application method takes the overlap of constraints into account. It keeps two weights for each constraint;
an applied weight and a non-applied weight. The applied weight is set to the constraint weight when
the constraint is applied. The non-applied weight is the sum of the weights of the blocks the constraint
affects, when the constraint is not applied. The constraint potential is
, where is the
non-applied weight and
is the applied weight.
In effect, the potential is the difference between applying the constraint and not applying it. Constraints
are applied if this value is positive, meaning that the application of the constraint decreases overall response
However, this approach does not adequately address the performance dependencies among the constraints.
The weight for application and non-application is only a single weight, and does not account for the
application state of dependent constraints. To address this aspect of the problem, we explored yet another
8.3.3 Dependency Learner
The dependency method takes the general constraint performance dependencies into account. It keeps a list
of all the dependent constraints for each constraint, as discussed in Section 7.1.2. Instead of keeping a single
applied and non-applied weight, the learner keeps track of which dependent constraints were applied and
whether the actual constraint was applied at each iteration.
The learner then sets the constraint potential to be the difference between the best value for the constraint
when it is applied subtracted from the best value when it is not applied. The learner then sorts the
list based on the potential, goes through the list, and only attempts to apply constraints that it predicts will
perform well given the constraints that have already been applied.
A more thorough approach would reorder the constraints after each constraint is applied. It then only
applies constraints that it predicts will do well in this situation. This would make the sorting step of the
learner much more computationally intensive, but exploration of this option would be interesting.
We evaluated each of the learning methods in comparison to individual heuristics. The experimental set up
is the same as used in Section 6. However, we now look at all three of the learners.
We compare the results of each learner with all but the bad heuristic (Compare, Apply, Dependency),
against each learner with all of the heuristics, including the bad heuristic (Compare w/ bad, Apply w/ bad,
Dependency w/ bad) and the base heuristics (Shuffle, Front load, Threading and Run Clustering). All of the
results are normalized to the base case, where no reorganization is performed (Base).
Figures 9 and 10 show the results of these evaluations. The values shown in the graphs are average
response times normalized to the base response time, so lower bars mean better performance. Note that
these results do not include the cost of doing the actual reorganization.
As expected, the application and dependency learners almost always perform better than the compare
learner. However, sometimes the application learner performs better, and sometimes the dependency learner