Enable users to bypass IOQ for certain IO classes

This patch allows an administrator to configure a "bypass" which
will cause a particular class of IO to be submitted directly to the
file descriptor or OS process instead of going through the IO queueing
mechanism. Installing a bypass can result in higher throughput and
lower latency, at the expense of less control over the stability of the
system.

A bypass is configured via the `ioq.priority` configuration block:

[ioq.bypass]
read = true
write = true
compaction = false

This configuration will cause user-submitted read IO to be submitted
directly. At this time the following classes are available:

- os_process
- read
- write
- view_update
- shard_sync
- compaction

This also expands the "compaction" queue to be a general-purpose
"background" queue that handles IO for both compaction and internal
replication (aka shard_sync). The other four classes are handled by the
"interactive" queue. As before, the [ioq] ratio setting determines the
likelihood that background IO will be selected ahead of interactive IO
when both queues are non-empty.
1 file changed
tree: 793d73b5ae478a6248d055b18926e6cd85c46918
  1. .gitignore
  2. src/