Skip to content

I/O scheduler is task-heavy and inefficient for random access #5068

@westonpace

Description

@westonpace

The current I/O scheduler is very task heavy. For example:

  • The scheduler thread submits a request by pushing the task into a channel
  • The I/O loop pulls this task from the channel and spawns a task to run the I/O
  • The I/O task calls into the object store which is often spawning yet another task

There can be 10's of microseconds between notifying a thread and that thread starting up. So in the above example, even if the object store isn't using tasks, we might introduce 20-30 microseconds of latency for each value.

To put this into context, when I was testing a random-access heavy workload, 60% of the latency was due to I/O scheduling inefficiency. This is probably the single biggest performance bottleneck for both 2.0 and 2.1 random access workloads.

Fortunately, fixing it should be a non-breaking change

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions