[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] PING^2 Re: [PATCH] KVM: always use MADV_DONTFORK
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] PING^2 Re: [PATCH] KVM: always use MADV_DONTFORK |
Date: |
Fri, 30 Aug 2013 17:48:17 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130805 Thunderbird/17.0.8 |
Il 06/08/2013 18:47, Paolo Bonzini ha scritto:
> On 07/25/2013 12:11 PM, Andrea Arcangeli wrote:
>> MADV_DONTFORK prevents fork to fail with -ENOMEM if the default
>> overcommit heuristics decides there's too much anonymous virtual
>> memory allocated. If the KVM secondary MMU is synchronized with MMU
>> notifiers or not, doesn't make a difference in that regard.
>>
>> Secondly it's always more efficient to avoid copying the guest
>> physical address space in the fork child (so we avoid to mark all the
>> guest memory readonly in the parent and so we skip the establishment
>> and teardown of lots of pagetables in the child).
>>
>> In the common case we can ignore the error if MADV_DONTFORK is not
>> available. Leave a second invocation that errors out in the KVM path
>> if MMU notifiers are missing and KVM is enabled, to abort in such
>> case.
>>
>> Signed-off-by: Andrea Arcangeli <address@hidden>
>> ---
>> exec.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/exec.c b/exec.c
>> index c99a883..d3bb58d 100644
>> --- a/exec.c
>> +++ b/exec.c
>> @@ -1162,6 +1162,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t
>> size, void *host,
>>
>> qemu_ram_setup_dump(new_block->host, size);
>> qemu_madvise(new_block->host, size, QEMU_MADV_HUGEPAGE);
>> + qemu_madvise(new_block->host, size, QEMU_MADV_DONTFORK);
>>
>> if (kvm_enabled())
>> kvm_setup_guest_memory(new_block->host, size);
>>
>>
>
> PING.
>
> Benoit reported this on IRC, too.
>
> Paolo
>
>
PING^2
The last paragraph of the commit message should answer Andreas's objection.
Paolo