-
Notifications
You must be signed in to change notification settings - Fork 1.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
io_submit blocks the reactor when device's request queue fills up #70
Comments
@glommer Is this issue fixed completely by ioqueues? |
Theoretically yes, since we now control how many requests are in flight. It
|
backport fix for multi-reactor
Pretty sure the answer is "no". At least in the case where the disk is not performing worse than the io-properties suggest (this seems relatively common at least in short bursts for both local and network attached disks), the IO scheduler will still let many requests into the disk and we can get a high concurrency and can exceed I'm not sure if this was better before the changes in #1766, since in principle the back link responded very quickly before, whereas now it takes a while to respond and by that time you have already hit Since we know that hitting |
Using io_uring may or may not solve this, related question: axboe/liburing#1184 |
Do you actually hit nr_request limits? I've seen it with spinning disks, but not SSD/NVMe. |
Yes, but because the disk (EBS in this case, but it also happens with local SSDs) suffers a temporary slowdown, e.g., dropping to 1% of it's usual throughput for a few 100ms. During this hiccup we will quickly exceed |
In normal operation, there are only a "few" IOs so we don't hit I think this is one of the flaws in the current "feed-forward rate limiting" scheduler (as opposed to a "concurrency" scheduler): it does not do well when the characteristics of the disk change: you need to set the IO properties to an appreciable fraction of the true "nominal" disk performance, or else you leave a lot of IO on the table, but then if the disk is a bit slower for any reason the number of queued IOs quickly grows and the current feedback mechanism isn't quick enough to catch it. |
On systems with slow disks it's possible that block device queue will fill up and
io_submit
will block insideget_request
blocking the reactor thread. This manifests itself with high iowait time.It can be remedied by increasing
/sys/block/$DEV/queue/nr_requests
to match concurrency level but this has a downside of increasing request latency while not resulting in improved disk utilization. Better would be to avoid overflowing the queue on seastar level by applying back-pressure.The text was updated successfully, but these errors were encountered: