1
The following changes since commit 4100a344eb3d50d88f9da85cae334afc47aee134:
1
The following changes since commit 3521ade3510eb5cefb2e27a101667f25dad89935:
2
2
3
Merge remote-tracking branch 'remotes/sstabellini/tags/xen-20170202' into staging (2017-02-03 12:31:40 +0000)
3
Merge remote-tracking branch 'remotes/thuth-gitlab/tags/pull-request-2021-07-29' into staging (2021-07-29 13:17:20 +0100)
4
4
5
are available in the git repository at:
5
are available in the Git repository at:
6
6
7
git://github.com/stefanha/qemu.git tags/block-pull-request
7
https://gitlab.com/stefanha/qemu.git tags/block-pull-request
8
8
9
for you to fetch changes up to cdd7abfdba9287a289c404dfdcb02316f9ffee7d:
9
for you to fetch changes up to cc8eecd7f105a1dff5876adeb238a14696061a4a:
10
10
11
iothread: enable AioContext polling by default (2017-02-03 14:23:38 +0000)
11
MAINTAINERS: Added myself as a reviewer for the NVMe Block Driver (2021-07-29 17:17:34 +0100)
12
13
----------------------------------------------------------------
14
Pull request
15
16
The main fix here is for io_uring. Spurious -EAGAIN errors can happen and the
17
request needs to be resubmitted.
18
19
The MAINTAINERS changes carry no risk and we might as well include them in QEMU
20
6.1.
12
21
13
----------------------------------------------------------------
22
----------------------------------------------------------------
14
23
15
----------------------------------------------------------------
24
Fabian Ebner (1):
25
block/io_uring: resubmit when result is -EAGAIN
16
26
17
Stefan Hajnoczi (1):
27
Philippe Mathieu-Daudé (1):
18
iothread: enable AioContext polling by default
28
MAINTAINERS: Added myself as a reviewer for the NVMe Block Driver
19
29
20
iothread.c | 14 ++++++++++++++
30
Stefano Garzarella (1):
21
1 file changed, 14 insertions(+)
31
MAINTAINERS: add Stefano Garzarella as io_uring reviewer
32
33
MAINTAINERS | 2 ++
34
block/io_uring.c | 16 +++++++++++++++-
35
2 files changed, 17 insertions(+), 1 deletion(-)
22
36
23
--
37
--
24
2.9.3
38
2.31.1
25
39
26
diff view generated by jsdifflib
New patch
1
From: Stefano Garzarella <sgarzare@redhat.com>
1
2
3
I've been working with io_uring for a while so I'd like to help
4
with reviews.
5
6
Signed-off-by: Stefano Garzarella <sgarzare@redhat.com>
7
Message-Id: <20210728131515.131045-1-sgarzare@redhat.com>
8
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
9
---
10
MAINTAINERS | 1 +
11
1 file changed, 1 insertion(+)
12
13
diff --git a/MAINTAINERS b/MAINTAINERS
14
index XXXXXXX..XXXXXXX 100644
15
--- a/MAINTAINERS
16
+++ b/MAINTAINERS
17
@@ -XXX,XX +XXX,XX @@ Linux io_uring
18
M: Aarushi Mehta <mehta.aaru20@gmail.com>
19
M: Julia Suvorova <jusual@redhat.com>
20
M: Stefan Hajnoczi <stefanha@redhat.com>
21
+R: Stefano Garzarella <sgarzare@redhat.com>
22
L: qemu-block@nongnu.org
23
S: Maintained
24
F: block/io_uring.c
25
--
26
2.31.1
27
diff view generated by jsdifflib
New patch
1
From: Fabian Ebner <f.ebner@proxmox.com>
1
2
3
Linux SCSI can throw spurious -EAGAIN in some corner cases in its
4
completion path, which will end up being the result in the completed
5
io_uring request.
6
7
Resubmitting such requests should allow block jobs to complete, even
8
if such spurious errors are encountered.
9
10
Co-authored-by: Stefan Hajnoczi <stefanha@gmail.com>
11
Reviewed-by: Stefano Garzarella <sgarzare@redhat.com>
12
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
13
Message-id: 20210729091029.65369-1-f.ebner@proxmox.com
14
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
15
---
16
block/io_uring.c | 16 +++++++++++++++-
17
1 file changed, 15 insertions(+), 1 deletion(-)
18
19
diff --git a/block/io_uring.c b/block/io_uring.c
20
index XXXXXXX..XXXXXXX 100644
21
--- a/block/io_uring.c
22
+++ b/block/io_uring.c
23
@@ -XXX,XX +XXX,XX @@ static void luring_process_completions(LuringState *s)
24
total_bytes = ret + luringcb->total_read;
25
26
if (ret < 0) {
27
- if (ret == -EINTR) {
28
+ /*
29
+ * Only writev/readv/fsync requests on regular files or host block
30
+ * devices are submitted. Therefore -EAGAIN is not expected but it's
31
+ * known to happen sometimes with Linux SCSI. Submit again and hope
32
+ * the request completes successfully.
33
+ *
34
+ * For more information, see:
35
+ * https://lore.kernel.org/io-uring/20210727165811.284510-3-axboe@kernel.dk/T/#u
36
+ *
37
+ * If the code is changed to submit other types of requests in the
38
+ * future, then this workaround may need to be extended to deal with
39
+ * genuine -EAGAIN results that should not be resubmitted
40
+ * immediately.
41
+ */
42
+ if (ret == -EINTR || ret == -EAGAIN) {
43
luring_resubmit(s, luringcb);
44
continue;
45
}
46
--
47
2.31.1
48
diff view generated by jsdifflib
1
IOThread AioContexts are likely to consist only of event sources like
1
From: Philippe Mathieu-Daudé <philmd@redhat.com>
2
virtqueue ioeventfds and LinuxAIO completion eventfds that are pollable
3
from userspace (without system calls).
4
2
5
We recently merged the AioContext polling feature but didn't enable it
3
I'm interested in following the activity around the NVMe bdrv.
6
by default yet. I have gone back over the performance data on the
7
mailing list and picked a default polling value that gave good results.
8
4
9
Let's enable AioContext polling by default so users don't have another
5
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
10
switch they need to set manually. If performance regressions are found
6
Message-id: 20210728183340.2018313-1-philmd@redhat.com
11
we can still disable this for the QEMU 2.9 release.
12
13
Cc: Paolo Bonzini <pbonzini@redhat.com>
14
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
15
Cc: Karl Rister <krister@redhat.com>
16
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
17
Message-id: 20170126170119.27876-1-stefanha@redhat.com
18
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
7
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
19
---
8
---
20
iothread.c | 14 ++++++++++++++
9
MAINTAINERS | 1 +
21
1 file changed, 14 insertions(+)
10
1 file changed, 1 insertion(+)
22
11
23
diff --git a/iothread.c b/iothread.c
12
diff --git a/MAINTAINERS b/MAINTAINERS
24
index XXXXXXX..XXXXXXX 100644
13
index XXXXXXX..XXXXXXX 100644
25
--- a/iothread.c
14
--- a/MAINTAINERS
26
+++ b/iothread.c
15
+++ b/MAINTAINERS
27
@@ -XXX,XX +XXX,XX @@ typedef ObjectClass IOThreadClass;
16
@@ -XXX,XX +XXX,XX @@ F: block/null.c
28
#define IOTHREAD_CLASS(klass) \
17
NVMe Block Driver
29
OBJECT_CLASS_CHECK(IOThreadClass, klass, TYPE_IOTHREAD)
18
M: Stefan Hajnoczi <stefanha@redhat.com>
30
19
R: Fam Zheng <fam@euphon.net>
31
+/* Benchmark results from 2016 on NVMe SSD drives show max polling times around
20
+R: Philippe Mathieu-Daudé <philmd@redhat.com>
32
+ * 16-32 microseconds yield IOPS improvements for both iodepth=1 and iodepth=32
21
L: qemu-block@nongnu.org
33
+ * workloads.
22
S: Supported
34
+ */
23
F: block/nvme*
35
+#define IOTHREAD_POLL_MAX_NS_DEFAULT 32768ULL
36
+
37
static __thread IOThread *my_iothread;
38
39
AioContext *qemu_get_current_aio_context(void)
40
@@ -XXX,XX +XXX,XX @@ static int iothread_stop(Object *object, void *opaque)
41
return 0;
42
}
43
44
+static void iothread_instance_init(Object *obj)
45
+{
46
+ IOThread *iothread = IOTHREAD(obj);
47
+
48
+ iothread->poll_max_ns = IOTHREAD_POLL_MAX_NS_DEFAULT;
49
+}
50
+
51
static void iothread_instance_finalize(Object *obj)
52
{
53
IOThread *iothread = IOTHREAD(obj);
54
@@ -XXX,XX +XXX,XX @@ static const TypeInfo iothread_info = {
55
.parent = TYPE_OBJECT,
56
.class_init = iothread_class_init,
57
.instance_size = sizeof(IOThread),
58
+ .instance_init = iothread_instance_init,
59
.instance_finalize = iothread_instance_finalize,
60
.interfaces = (InterfaceInfo[]) {
61
{TYPE_USER_CREATABLE},
62
--
24
--
63
2.9.3
25
2.31.1
64
26
65
diff view generated by jsdifflib