Whether we realize it or not, much of our life is measured in IOPS, input/output operations per second. The memory systems that power our enterprise systems—the systems that power everything around us—are responsible for saving and storing data, which comes in two forms: inputs and outputs.
- Read operations
- Write operations
When data is stored to memory, it’s considered a “write” operation or an input, and when we request to access that information, it’s regarded as a “read” operation, an output. The high-powered systems at our fingertips today require these inputs and outputs to happen in large quantities very quickly.
When systems can’t handle all of these requests at once, it can lead to performance issues. On a Linux-based system, there can be done to address these issues: Input/Output (I/O) schedulers. Here’s what you should know:
What You Should Know about I/O Schedulers
Almost all applications that run on Linux perform some kind of input and output operation. Even using a web browser writes a certain number of files to the flash array. When there’s no I/O scheduler, every input/output request interrupts the kernel for the I/O operation to be performed. Over time, there is a disparity that grows between the drive’s performance and the rest of the system. When the system has to deal with an interrupt, the rest of the processing or interactive work is paused. This makes the system seem like it’s unresponsive or slow.
So how can you balance your system’s I/O requests to preserve interactivity and I/O performance? You can cut down on the workload, but it still affects your ability to perform inputs and outputs while doing other things. On other occasions, I/O operations have to happen very quickly; there’s no time to wait for these interruptions. The only real solution? To ensure that workloads are balanced or that the correct workload is emphasized, you can use an I/O scheduler.
Essentially, the Linux I/O schedulers control how the system reads and writes operations to your array. Scheduling inputs and outputs must address many things based on your enterprise needs. As an example, you might need to store events for future executions. Your scheduler can help determine how these events are held, any possible event reordering, the length of time these events need to be stored, the length of I/O execution, and the implementation of stored events when a set condition is reached.
The way the scheduler handles and implements these operations can have a significant impact on the input/output performance of the entire system and the overall user experience.
Current and Previous Linux I/O Schedulers
There was only one legacy I/O scheduler in previous versions of Linux, called Linus Elevator. This legacy I/O scheduler was too primitive and did not adequately balance the read and write operations. Now, there are more schedulers available, which have different features and capabilities.
The great thing about these schedulers? You can change them as needed, either on the fly or for good. This is a great way to see which scheduler will give your enterprise the best performance. When you change your scheduler on the fly, you can choose to revert to your default scheduler with a simple reboot.
Here’s what you need to know about the more updated schedules and what they can do:
Noop is a simple scheduler; it places requests in a queue and executes them. This happens for all of the processes within your enterprise system, regardless of the kind of I/O requests you are making.
Noop can also merge your requests, combining read and write requests of similar purpose together to limit the number of overall operations.
CFQ is a bit different from Noop. It has an individual queue for every single process and gives read operations higher priority over its write operations to enhance user experience. The CFQ, I/O scheduler, serves each function in a loop whenever the queue isn’t empty or the specified time quantum doesn’t expire.
This scheduler is the default scheduler for most Linux distributions. It places synchronous requests in established queues and then allocates time for each of these queues to access the flash system.
The deadline is a standard scheduler that tried to execute every request at the specified time. It attempts to guarantee a start time for every service request. Deadline supports two queues based on deadlines and expiration time, and two sorted queues for read and write operations, sorted by sector numbers, effectively serving requests in batches.
Like CFQ, Deadline prioritizes read operations over its write operations because processes usually block on reading operations. To make this happen, all read operations have an expiration time of 500 milliseconds, while write operations have an expiration time of 5 seconds before each request. The deadline has to choose which queue for usage, either the “read” or “write” queues.
Deadline is most effective in systems where there is a large, ongoing number of read operations happening, such as web servers and databases.
Linux, I/O Schedulers, SQL Servers, and All-Flash Arrays
Essentially, I/O schedulers optimize Linux to avoid breakdowns in communication during the hundreds of thousands of input and output operations that happen every minute.
What else can optimize your Linux system? An SQL (structured query language) Server. And what optimizes an SQL Server? All flash-array. It’s like a chain reaction; all-flash array power an SQL Server, which powers Linux, which works best with an I/O scheduler’s help.
- You save money in licensing fees
- You improve security
- You protect your data
- You manage data in an easy-to-use interface
- You save on storage costs compared to legacy systems
And with an all-flash, solid-state drive, you go from 90 IOPs with a hard disk drive to as many as 100,000, and some as high as 1 million.
Choosing an SQL Server doesn’t mean you have to select a Microsoft-based system. You can have all the positives of Linux and the distribution of an SQL Server, with the optimal performance an I/O scheduler offers and the speed and ease of an all-flash array.
It’s the best of the best of the best.