[G 2014 General] StariX37:
I/O SCHEDULERS

Thnx to [MENTION=4179740]droidphile[/MENTION] for clearing the concepts.

Here each & every concept of I/O Sched. is very clearly explained.

After reading the post i can assure u that will have sufficient knowledge about I/O Schedulers & u will be able to choose I/O schedulers easily which suits ur needs & and the phone best depending upon the type of work load u put on ur Android Smartphone.

Q. "What purposes does an i/o scheduler serve?"

A. Minimize hard disk seek latency.

Prioritize I/O requests from processes.

Allocate disk bandwidth for running processes.

Guarantee that certain requests will be served before a deadline.

So in the simplest of simplest form: Kernel controls the disk access using I/O Scheduler.

Q. "What goals every I/O scheduler tries to balance?"

A. Fairness (let every process have its share of the access to disk)

Performance (try to serve requests close to current disk head position first, because seeking there is fastest)

Real-time (guarantee that a request is serviced in a given time)

Description, advantages, disadvantages of each I/O Scheduler?

List of I/O Schedulers:-

1) Noop

2) Deadline

3) CFQ

4) BFQ

5) SIO

6) V(R)

7) Anticipatory

1) Noop

Inserts all the incoming I/O requests to a First In First Out queue and implements request merging.

Best used with storage devices that does not depend on mechanical movement to access data (yes, like our flash drives).

Advantage here is that flash drives does not

require reordering of multiple I/O requests unlike in normal hard drives.

Advantages:

Serves I/O requests with least number of cpu cycles.

(Battery friendly?)

Best for flash drives since there is no seeking penalty.

Good throughput on db systems.

Disadvantages:

Reduction in number of cpu cycles used is proportional

to drop in performance.

2) Deadline

Goal is to minimize I/O latency or starvation of a request.

The same is achieved by round robin policy to be fair

among multiple I/O requests. Five queues are

aggressively used to reorder incoming requests.

Advantages:

Nearly a real time scheduler.

Excels in reducing latency of any given single I/O.

Best scheduler for database access and queries.

Bandwidth requirement of a process - what percentage of

CPU it needs, is easily calculated.

Like noop, a good scheduler for solid state/flash drives.

Disadvantages:

When system is overloaded, set of processes that may miss deadline is largely unpredictable.

3) CFQ

Completely Fair Queuing scheduler maintains a scalable per-process I/O queue and attempts to distribute the available I/O bandwidth equally among all I/O requests.

Each per-process queue contains synchronous requests from processes.

Time slice allocated for each queue

depends on the priority of the 'parent' process.

V2 of CFQ has some fixes which solves process' i/o starvation and some small backward seeks in the hope of improving responsiveness.

Advantages:

Considered to deliver a balanced i/o performance.

Easiest to tune.

Excels on multiprocessor systems.

Best database system performance after deadline.

Disadvantages:

Some users report media scanning takes longest to complete using CFQ.

This could be because of the property that since the bandwidth is equally distributed

to all i/o operations during boot-up, media scanning is not given any special priority.

Jitter (worst-case-delay) exhibited can sometimes be high, because of the number of tasks competing for the disk.

4) BFQ

Instead of time slices allocation by CFQ, BFQ assigns budgets.

Disk is granted to an active process until it's

budget (number of sectors) expires.

BFQ assigns high budgets to non-read tasks.

Budget assigned to a process varies over time as a function of it's behavior.

Advantages:

Believed to be very good for usb data transfer rate.

Believed to be the best scheduler for HD video recording and video streaming. (because of less jitter as compared to CFQ and others)

Considered an accurate i/o scheduler.

Achieves about 30% more throughput than CFQ on most workloads.

Disadvantages:

Not the best scheduler for benchmarking.

Higher budget assigned to a process can affect interactivity and increased latency.

5) SIO

Simple I/O scheduler aims to keep minimum overhead to achieve low latency to serve I/O requests.

No priority queues concepts, but only basic merging.

Sio is a mix between noop & deadline. No reordering or sorting of requests.

Advantages:

Simple, so reliable.

Minimized starvation of requests.

Disadvantages:

Slow random-read speeds on flash drives, compared to other schedulers.

Sequential-read speeds on flash drives also not so good.

6) V(R)

Unlike other schedulers, synchronous and asynchronous requests are not treated separately, instead a deadline is imposed for fairness.

The next request to be served is

based on it's distance from last request.

Advantages:

May be best for benchmarking because at the peak of it's 'form' VR performs best.

Disadvantages:

Performance fluctuation results in below-average performance at times.

Least reliable/most unstable.

7) Anticipatory

Based on two facts

i) Disk seeks are really slow.

ii) Write operations can happen whenever, but there is always some process waiting for read operation.

So anticipatory prioritize read operations over write.

It anticipates synchronous read operations.

Advantages:

Read requests from processes are never starved.

As good as noop for read-performance on flash drives.

Disadvantages:

'Guess works' might not be always reliable.

Reduced write-performance on high performance disks.

Frequently asked questions

Q. "Best I/O Scheduler?"

A. There is nothing called "best" i/o scheduler. Depending

on your usage environment and tasks/apps been run,

use different schedulers. That's the best i can suggest.

However, considering the overall performance, battery,

reliability and low latency, it is believed that

SIO > Noop > Deadline > VR > BFQ > CFQ, given all

schedulers are tweaked and the storage used is a flash

device.

Q. "How do i change I/O schedulers?"

A.Voltage Control or No Frills from market.

Or init.d script:

echo "scheduler-name" > /sys/block/mmcblk0/queue/

scheduler

------------------------------------++END++---------------------------------------

Press Thanks :thumbup: If I Helped U :)