qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* qemu-img hangs on s390x
@ 2023-02-05 19:10 Michael Tokarev
  2023-02-06  6:55 ` Philippe Mathieu-Daudé
  0 siblings, 1 reply; 2+ messages in thread
From: Michael Tokarev @ 2023-02-05 19:10 UTC (permalink / raw)
  To: QEMU Developers

There's a bug filed against qemu on debian, about qemu-img hanging on s390x.
While digging in, I discovered that the thing is broken there indeed, and it
is broken for a very long time, and it is interesting.

The reproducer is rather simple:

  qemu-img create -f qcow2 -o preallocation=metadata blank-disk-1s.qcow2 512

this hangs until interrupted, after writing 327680 bytes of output.
I haven't tried old versions, - 5.2 hangs for sure, as is 7.2 and apparently
all in-between. In particular, current debian sid (whole thing) and 2-years
old debian bullseye hangs equally.

But the thing is that it does not hang when creating file on a tmpfs, -
when the filesystem is tmpfs, it always works.

Also, a few times I were able to run the above qemu-img create successfully, -
maybe 2 out of 100 runs or so.

It looks like the problem has been there for a very long time, and it is
timing-dependent.

Comparing strace of the two runs, I see differences in most futex operations.
Here's the parent process:

...
  read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
  ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 ([{fd=7, revents=POLLIN}])
-futex(0x2aa29af8bb4, FUTEX_WAKE_PRIVATE, 1) = 1
+futex(0x2aa03600bb4, FUTEX_WAKE_PRIVATE, 1) = 0
  read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
+futex(0x2aa03600bb0, FUTEX_WAKE_PRIVATE, 1) = 1
  ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 ([{fd=7, revents=POLLIN}])
-futex(0x2aa29af8bb0, FUTEX_WAKE_PRIVATE, 1) = 1
+futex(0x2aa03600bb4, FUTEX_WAKE_PRIVATE, 1) = 0
  read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
  ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 ([{fd=7, revents=POLLIN}])
-futex(0x2aa29af8bb4, FUTEX_WAKE_PRIVATE, 1) = 1
+futex(0x2aa03600bb0, FUTEX_WAKE_PRIVATE, 1) = 0
  read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
  ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 ([{fd=7, revents=POLLIN}])
-futex(0x2aa29af8bb0, FUTEX_WAKE_PRIVATE, 1) = 1
+futex(0x2aa03600bb4, FUTEX_WAKE_PRIVATE, 1) = 0
  read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
  ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 ([{fd=7, revents=POLLIN}])
-futex(0x2aa29af8bb4, FUTEX_WAKE_PRIVATE, 1) = 0
+futex(0x2aa03600bb0, FUTEX_WAKE_PRIVATE, 1) = 1
  read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
-ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? ERESTARTNOHAND (To be restarted if no handler)
  ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 ([{fd=7, revents=POLLIN}])
---- SIGINT {si_signo=SIGINT, si_code=SI_KERNEL} ---
-+++ killed by SIGINT +++
+futex(0x2aa03600bb4, FUTEX_WAKE_PRIVATE, 1) = 0
+read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
+ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 ([{fd=7, revents=POLLIN}])
+futex(0x2aa03600bb0, FUTEX_WAKE_PRIVATE, 1) = 0
+read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
...

(I've hit Ctrl+C after quite some time).

I'll take another look at this tomorrow. But if someone knows
what's going on there, please tell me :)  The situation is quite
interesting, - is it possible we missed such a serious issue somehow?

Thanks,

/mjt


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: qemu-img hangs on s390x
  2023-02-05 19:10 qemu-img hangs on s390x Michael Tokarev
@ 2023-02-06  6:55 ` Philippe Mathieu-Daudé
  0 siblings, 0 replies; 2+ messages in thread
From: Philippe Mathieu-Daudé @ 2023-02-06  6:55 UTC (permalink / raw)
  To: Michael Tokarev, QEMU Developers
  Cc: open list:S390 general arch..., Qemu-block

+s390x/block lists

On 5/2/23 20:10, Michael Tokarev wrote:
> There's a bug filed against qemu on debian, about qemu-img hanging on 
> s390x.
> While digging in, I discovered that the thing is broken there indeed, 
> and it
> is broken for a very long time, and it is interesting.
> 
> The reproducer is rather simple:
> 
>   qemu-img create -f qcow2 -o preallocation=metadata blank-disk-1s.qcow2 
> 512
> 
> this hangs until interrupted, after writing 327680 bytes of output.
> I haven't tried old versions, - 5.2 hangs for sure, as is 7.2 and 
> apparently
> all in-between. In particular, current debian sid (whole thing) and 2-years
> old debian bullseye hangs equally.
> 
> But the thing is that it does not hang when creating file on a tmpfs, -
> when the filesystem is tmpfs, it always works.
> 
> Also, a few times I were able to run the above qemu-img create 
> successfully, -
> maybe 2 out of 100 runs or so.
> 
> It looks like the problem has been there for a very long time, and it is
> timing-dependent.
> 
> Comparing strace of the two runs, I see differences in most futex 
> operations.
> Here's the parent process:
> 
> ...
>   read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
>   ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 
> ([{fd=7, revents=POLLIN}])
> -futex(0x2aa29af8bb4, FUTEX_WAKE_PRIVATE, 1) = 1
> +futex(0x2aa03600bb4, FUTEX_WAKE_PRIVATE, 1) = 0
>   read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
> +futex(0x2aa03600bb0, FUTEX_WAKE_PRIVATE, 1) = 1
>   ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 
> ([{fd=7, revents=POLLIN}])
> -futex(0x2aa29af8bb0, FUTEX_WAKE_PRIVATE, 1) = 1
> +futex(0x2aa03600bb4, FUTEX_WAKE_PRIVATE, 1) = 0
>   read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
>   ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 
> ([{fd=7, revents=POLLIN}])
> -futex(0x2aa29af8bb4, FUTEX_WAKE_PRIVATE, 1) = 1
> +futex(0x2aa03600bb0, FUTEX_WAKE_PRIVATE, 1) = 0
>   read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
>   ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 
> ([{fd=7, revents=POLLIN}])
> -futex(0x2aa29af8bb0, FUTEX_WAKE_PRIVATE, 1) = 1
> +futex(0x2aa03600bb4, FUTEX_WAKE_PRIVATE, 1) = 0
>   read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
>   ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 
> ([{fd=7, revents=POLLIN}])
> -futex(0x2aa29af8bb4, FUTEX_WAKE_PRIVATE, 1) = 0
> +futex(0x2aa03600bb0, FUTEX_WAKE_PRIVATE, 1) = 1
>   read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
> -ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = ? 
> ERESTARTNOHAND (To be restarted if no handler)
>   ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 
> ([{fd=7, revents=POLLIN}])
> ---- SIGINT {si_signo=SIGINT, si_code=SI_KERNEL} ---
> -+++ killed by SIGINT +++
> +futex(0x2aa03600bb4, FUTEX_WAKE_PRIVATE, 1) = 0
> +read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
> +ppoll([{fd=7, events=POLLIN|POLLERR|POLLHUP}], 1, NULL, NULL, 8) = 1 
> ([{fd=7, revents=POLLIN}])
> +futex(0x2aa03600bb0, FUTEX_WAKE_PRIVATE, 1) = 0
> +read(7, "\0\0\0\0\0\0\0\1", 512)        = 8
> ...
> 
> (I've hit Ctrl+C after quite some time).
> 
> I'll take another look at this tomorrow. But if someone knows
> what's going on there, please tell me :)  The situation is quite
> interesting, - is it possible we missed such a serious issue somehow?
> 
> Thanks,
> 
> /mjt
> 



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2023-02-06  6:56 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-02-05 19:10 qemu-img hangs on s390x Michael Tokarev
2023-02-06  6:55 ` Philippe Mathieu-Daudé

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).