[HTC 10 ROMs, Kernels, Recoveries, & Other Developm] rav101:
Hey buddy,

No need to apologise!! I hope things calm down a little in your personal life and I do hope you feel fully better with a weekend's rest! Health & wellbeing always comes first, especially over kernel development and answering questions on a forum!!!

Great to see the new work coming along in various different areas! For anyone curious on the I/O Schedulers I have copied the following from Here

Maple:

Maple is based on the Zen and Simple I/O schedulers. It uses ZEN's first-come-first-serve style algorithm with separate read/write requests and improved former/latter request handling from SIO. Maple is biased towards handling asynchronous requests before synchronous, and read requests before write. While this can have negative aspects on write intensive tasks like file copying, it slightly improves UI responsiveness. When the device is asleep, maple increases the expiry time of requests so that it can handle them more slowly, causing less overhead.

Benefits:

- Well rounded IO Scheduler

- Very efficient IO Scheduler

Disadvantages:

- Performance varies between different devices (Some devices perform really well)

The bottom line: This is still a very new I/O scheduler which should perform slightly better than ZEN. It will continue to improve with more development.

ZEN:

ZEN is based on the Noop, Deadline and SIO I/O schedulers. It's an FCFS (First come, first serve) based algorithm, but it's not strictly FIFO. ZEN does not do any sorting. It uses deadlines for fairness, and treats synchronous requests with priority over asynchronous ones. Other than that, it's pretty much the same as Noop blended with VR features.

ZEN V2 is an optimized version of the original ZEN scheduler tuned by kernel developer DorimanX. It has been modified to work better with android devices.

Benefits:

- Well rounded IO Scheduler

- Very efficient IO Scheduler

- More stable than VR, more polished

Disadvantages:

- Performance variability can lead to different results (Only performs well sometimes)

The bottom line: It is pretty much a better version of VR, performs quite well and is stable. Overall this is a good choice for most smartphones.

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.

Benefits:

- Serves I/O requests with least number of CPU cycles.

- Best for flash drives since there is no seeking penalty.

- Good data throughput on db systems

- Does great in benchmarks

- Is very reliable

Disadvantages:

- Reducing the number of CPU cycles corresponds to a simultaneous decline in performance

- Not the most responsive I/O scheduler

- Not very good at multitasking (especially heavy workloads)

The bottom line: Modern smartphones now use Noop as the default scheduler due to the fact that it works quite well with flash based storage. However older devices may experience slower performance when selected. If you want a very simple I/O scheduler algorithm (because of battery life or latency reasons), you can select this.

Deadline:

The goal of the Deadline scheduler is to attempt to guarantee a start service time for a request. It does that by imposing a deadline on all I/O operations to prevent starvation of requests. It also maintains two deadline queues, in addition to the sorted queues (both read and write). Deadline queues are basically sorted by their deadline (the expiration time), while the sorted queues are sorted by the sector number.

Before serving the next request, the Deadline scheduler decides which queue to use. Read queues are given a higher priority, because processes usually block on read operations. Next, the Deadline scheduler checks if the first request in the deadline queue has expired. Otherwise, the scheduler serves a batch of requests from the sorted queue. In both cases, the scheduler also serves a batch of requests following the chosen request in the sorted queue.

Benefits:

- Nearly a real-time scheduler.

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

- Best scheduler for database access and queries.

- Does quite well in benchmarks, most likely the best

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

Disadvantages:

- If the phone is overloaded, crashing or unexpected closure of processes can occur

The bottom line: A good all-round scheduler. If you want good performance, you should try deadline.

SIO (Simple):

Simple I/O aims to keep minimum overhead to achieve low latency to serve I/O requests. No priority queue concepts, but only basic merging. SIO is a mix between noop & deadline. No reordering or sorting of requests.

Benefits:

- It is simple and stable.

- Minimized starvation for inquiries

Disadvantages:

- Slow random write speeds on flash drives as opposed to other schedulers.

- Sequential read speeds on flash drives are not as good as other IO schedulers

- Not the best scheduler for benchmarks

The bottom line: One of my favourite schedulers, it is a good all-round scheduler. People who want better performance should avoid using this.

Will be good to have another option for I/O Scheduling that seems to be fairly well rounded and efficient. I hope you get those pesky bugs sorted. I saw that you had some other improvements lined up in a previous post as well so looks like 7.0.5-Advanced is going to be a beast!!