qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Alexander Graf <agraf@suse.de>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] Disable AIO for Mac OS X
Date: Sat, 24 Jan 2009 17:27:03 -0600	[thread overview]
Message-ID: <497BA3C7.1010302@codemonkey.ws> (raw)
In-Reply-To: <18D68CC9-539B-42E8-8A11-1F8570C96C56@suse.de>

Alexander Graf wrote:
>
> On 24.01.2009, at 22:25, Anthony Liguori wrote:
>
>> Alexander Graf wrote:
>>>
>>> On 24.01.2009, at 21:53, Anthony Liguori wrote:
>>>
>>>> Alexander Graf wrote:
>>>>>
>>>>> On 24.01.2009, at 21:28, Anthony Liguori wrote:
>>>>>
>>>>>> Alexander Graf wrote:
>>>>>>> While trying current svn, it looks like AIO support compiles on
>>>>>>> Mac OS X finally. Unfortunately it is broken and as soon as I want
>>>>>>> to run any image, it endless loops in block.c:1446 which is:
>>>>>>>
>>>>>>>  while (async_ret == NOT_DONE) {
>>>>>>>      qemu_aio_wait();
>>>>>>>  }
>>>>>>>
>>>>>>
>>>>>> Are you using cocoa?
>>>>>
>>>>> Yep. Nothing else works for x86_64 on Mac OS X ;-). Well - except 
>>>>> for vnc.
>>>>>
>>>>>> I don't think the AIO code is broken here.  I think something 
>>>>>> else is broken and disabling AIO hides the symptom.  Can you dig 
>>>>>> more into this?
>>>>>
>>>>> Hum - sounds like an idea. I'm open for hints on how to dig in 
>>>>> here. I can disable cocoa for starters of course.
>>>>
>>>> My guess would be that the completion signal isn't being 
>>>> delivered.  I'd start by disabling cocoa and then annotate things 
>>>> to see if the completion signal every makes it to the aio system.
>>>
>>> So disabling cocoa doesn't really help. I recompiled with cocoa=no 
>>> and still have the same issue:
>>>
>>> (gdb) thread apply all bt
>>>
>>> Thread 1 (process 38766 thread 0x10b):
>>> #0  0x91b846f2 in select$DARWIN_EXTSN ()
>>> #1  0x00081526 in qemu_aio_wait () at aio.c:158
>>> #2  0x00081055 in bdrv_read_em (bs=0x4, sector_num=0, buf=0x4 
>>> <Address 0x4 out of bounds>, nb_sectors=4) at block.c:1447
>>> #3  0x0007fb29 in bdrv_guess_geometry (bs=0x806a00, 
>>> pcyls=0xbfffdfcc, pheads=0xbfffdfc8, psecs=0xbfffdfc4) at block.c:773
>>> #4  0x0002a398 in ide_init2 (ide_state=<value temporarily 
>>> unavailable, due to optimizations>, hd0=0x806a00, hd1=0x0, 
>>> irq=0x402a18) at /Users/alex/work/qemu-osx/qemu/hw/ide.c:2844
>>> #5  0x0002b08d in pci_piix3_ide_init (bus=0x4, hd_table=0xbfffeaf0, 
>>> devfn=4, pic=0x402930) at /Users/alex/work/qemu-osx/qemu/hw/ide.c:3435
>>> #6  0x000442f9 in pc_init1 (ram_size=<value temporarily unavailable, 
>>> due to optimizations>, vga_ram_size=8388608, boot_device=0x11da16 
>>> "cad", kernel_filename=0x0, kernel_cmdline=0x11d40c "", 
>>> initrd_filename=0x0, pci_enabled=1, cpu_model=0x0) at 
>>> /Users/alex/work/qemu-osx/qemu/hw/pc.c:1027
>>> #7  0x000068d1 in main (argc=5, argv=0xbffff360, envp=0xbffff378) at 
>>> /Users/alex/work/qemu-osx/qemu/vl.c:5520
>>>
>>> It's actually hanging in its first select() call.
>>
>> Is posix-aio init getting called?
>
> Yes, several times:
>
> haruka:qemu alex$ ./i386-softmmu/qemu -vnc :0 -snapshot 
> ~/Downloads/worms/worms-united.qcow2
> posix_aio_init
> AIO rd = 5
> AIO wr= 6
> posix_aio_init
> posix_aio_init
> posix_aio_init
> posix_aio_init
> posix_aio_init
> add rd(5)...
> selecting...
>
>
>>  What is being passed to select?
>
> The AIO rd fd.
>
>>  It's waiting for the signalfd to become readable and it's never 
>> becoming readable.  That could be because you never get the 
>> completion signal.
>
> So who sends the signal?

posix-aio-compat.c:aio_thread() ... kill(getpid(), )

I'd add a printf to see if the signal is getting sent (means op has 
completed) and then another one in 
block-raw-posix.c:aio_signal_handler() to see if we're receiving the signal.

If for some crazy reason the OS X port spawns another thread somewhere 
without masking SIGUSR2 correctly, it could be that the signal is 
getting lost.

Regards,

Anthony Liguori

>> FWIW, at this point, we could drop the signal entirely and just use a 
>> pipe for communication.  Right now we use a signal that we catch and 
>> then write to a pipe from the signal handler.  We did this because 
>> that's how posix-aio worked but since we don't use posix-aio anymore, 
>> we're no longer limited by that.
>
> Hum - sounds like more effort and more probable breakage than tracking 
> this down ;-).

> Alex

  reply	other threads:[~2009-01-24 23:27 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-01-24 19:59 [Qemu-devel] [PATCH] Disable AIO for Mac OS X Alexander Graf
2009-01-24 20:28 ` Anthony Liguori
2009-01-24 20:37   ` Alexander Graf
2009-01-24 20:53     ` Anthony Liguori
2009-01-24 21:14       ` Alexander Graf
2009-01-24 21:25         ` Anthony Liguori
2009-01-24 21:44           ` Alexander Graf
2009-01-24 23:27             ` Anthony Liguori [this message]
2009-01-25  9:49               ` Alexander Graf
2009-01-25 15:11                 ` Anthony Liguori
2009-01-25 16:28                   ` Jamie Lokier
2009-01-25 17:35                     ` Anthony Liguori
2009-01-25 17:45                     ` Alexander Graf
2009-01-25 17:53                       ` Anthony Liguori

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=497BA3C7.1010302@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=agraf@suse.de \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).