Re: [PATCH 3/3] Implement linux-aio backend

Anthony Liguori
2008-04-18T15:18:33Z

Marcelo Tosatti wrote:
> On Thu, Apr 17, 2008 at 02:26:52PM -0500, Anthony Liguori wrote:
>
>> This patch introduces a Linux-aio backend that is disabled by default. To
>> use this backend effectively, the user should disable caching and select
>> it with the appropriate -aio option. For instance:
>>
>> qemu-system-x86_64 -drive foo.img,cache=off -aio linux
>>
>> There's no universal way to asynchronous wait with linux-aio. At some point,
>> signals were added to signal completion. More recently, and eventfd interface
>> was added. This patch relies on the later.
>>
>> We try hard to detect whether the right support is available in configure to
>> avoid compile failures.
>>
>
>
>> + do {
>> + err = io_submit(aio_ctxt_id, 1, iocbs);
>> + } while (err == -1 && errno == EINTR);
>> +
>> + if (err != 1) {
>> + fprintf(stderr, "failed to submit aio request: %m\n");
>> + exit(1);
>> + }
>> +
>> + outstanding_requests++;
>> +
>> + return &aiocb->common;
>> +}
>> +
>> +static void la_wait(void)
>> +{
>> + main_loop_wait(10);
>> +}
>>
>
> Sleeping in the context of vcpu's is extremely bad (eg virtio-block
> blocks in write() throttling which kills performance). It should wait
> on IO completions instead (qemu-kvm.c creates a pthread "waitqueue" to
> resolve that issue).
>
> Other than that looks fine to me, will give it a try.
>

FWIW, I'm not getting wonderful results in KVM. It's hard to tell
though because time seems wildly inaccurate (even with kvm clock in the
guest). The time issue appears unrelated to this set of patches.

Regards,

Anthony Liguori