K 10 svn:author V 3 imp K 8 svn:date V 27 2015-03-06T00:24:21.210068Z K 7 svn:log V 1407 Implement the limiting code for the scheduler. reads and writes go to different queues (phyiscally now, logically eventually). The limit on the number of outstanding reads / writes can be controlled independently on a per drive basis. Implement proper 32.32 * 32.32 multiplication and use it when we're multiplying two 32.32 numbers. Ensure SD calculation is as robust as possible, and return 0 when we're unable to properly estimate it (such as early in startup when the long term values haven't converged). It is looking like work loads very too much to make the fast decaying average a useful metric. Implement an alternate method of estimating a steering point for unacceptable latency. We now train for the first few hundred I/Os to see what the drive will normally do unloaded, then use a multiple of the 95% latency to set a threshold for badness (to reflect the number of channels in the disk). We retain the old slow decaying average as well. Create a read_bias parameter for breaking ties between read and writes when both are present. This ensures that we make some progress on writes, while still balancing them against reads that are competing against them. Set it to 100 to 1. Allow for a tunable to control whether we do the netflix schedule stuff or not. Due to the large amount of state we keep, and due to the difficulty in 'draining' pending I/Os we only allow it to be set at boot. END