Solutions

Stay on top of everything MarkLogic

Be the first to know! News, product information, and events delivered straight to your inbox.

Sign Me Up

Learn

Stay on top of everything MarkLogic

Be the first to know! News, product information, and events delivered straight to your inbox.

Sign Me Up

Community

Stay on top of everything MarkLogic

Be the first to know! News, product information, and events delivered straight to your inbox.

Sign Me Up

Company

Stay on top of everything MarkLogic

Be the first to know! News, product information, and events delivered straight to your inbox.

Sign Me Up

 
Knowledgebase:
Notes on I/O schedulers
02 August 2018 07:40 PM

Which I/O schedulers are recommended for MarkLogic?

Three I/O schedulers are recommended for use with MarkLogic Server:

deadline
configured by setting elevator=deadline as a kernel boot parameter
noop
configured by setting elevator=noop as a kernel boot parameter
none * 
configured by setting elevator=none as a kernel boot parameter
(* default value for Linux kernels 3.13+) 
Note: [none] is recommended for SSDs, NVMEs [1] and guest OS virtual machines [2]

I'm pushed for time. Is there a simple rule for which of these I should recommend?

If your MarkLogic host has intelligent I/O controllers (hardware RAID) or only uses SSDs/NVMEs, choose none or noop. If you're unsure, choose deadline.

What is the deadline scheduler?

The deadline scheduler attempts to minimise I/O latency by enforcing start service times for each incoming request.   As I/O requests come in, they are assigned an expiry time (the deadline for that request).  At the point where the expiry time for that request is reached, the scheduler forces the service of that request at the location on the disk. While it is doing this, any other requests within easy reach (without requiring too much movement) are attempted.  Where possible, the scheduler attempts completion of any I/O request before the expiry time is met.

The deadline scheduler can be used in situations where the host is not concerned with "fairness" for all processes residing on the system. The concern is rather where the system requires I/O requests are not stalled for long periods.

The deadline scheduler can be considered the best choice given a host where one process dominates disk I/O. Most database servers are a natural fit for this category.

What is the noop scheduler?

The noop scheduler performs no scheduling optimisations.

All incoming I/O requests are pushed onto a FIFO queue and left to the block device to manage. Intelligent disk controllers will manage the priority from there. In any situation where a hardware controller (an HBA or similar controller attached to a SAN) can manage scheduling - or where disk seek times are not important (such as on SSDs) - any extra work performed by the scheduler at Linux kernel level is wasted.

The noop scheduler can be considered the best choice when MarkLogic server is hosted on VMWare.

How can I easily find out what scheduler is currently in use?

The example below shows that the 'noop' scheduler is currently configured for the block device sdb

cat /sys/block/sdb/queue/scheduler
[noop] anticipatory deadline cfq

[1] https://access.redhat.com/solutions/3173291
[2] https://access.redhat.com/solutions/5427

(3 vote(s))
Helpful
Not helpful

Comments (0)