From: Avi Kivity <avi@redhat.com>
To: Gleb Natapov <gleb@redhat.com>
Cc: kvm@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 01/11] Add shared memory hypercall to PV Linux guest.
Date: Tue, 03 Nov 2009 09:40:40 +0200 [thread overview]
Message-ID: <4AEFDE78.5030507@redhat.com> (raw)
In-Reply-To: <20091103071638.GK27911@redhat.com>
On 11/03/2009 09:16 AM, Gleb Natapov wrote:
>>>
>>> I have both! Do you want me to drop version?
>>>
>> Yes. Once a kernel is released you can't realistically change the version.
>>
>>
> Why not? If version doesn't match apf will not be used.
>
Then you cause a large performance regression (assuming apf is any
good). So there will be a lot of pressure to modify things
incrementally via feature bits.
>
>>>> Some documentation for this?
>>>>
>>>> Also, the name should reflect the pv pagefault use. For other uses
>>>> we can register other areas.
>>>>
>>>>
>>> I wanted it to be generic, but I am fine with making it apf specific.
>>> It will allow to make it smaller too.
>>>
>> Maybe we can squeeze it into the page-fault error code?
>>
>>
> apf has to pass two things into a guest kernel:
> - event type (page not present/wake up)
> - unique token
> Error code has 32 bits and at least 1 of them should indicate that this
> is apf another one should indicate event type so this leaves us 30 bits
> for a token. 12 bits of a token is used to store vcpu id this leaves 18
> bits for unique per vcpu id. Yes this may be enough. I don't think it is
> realistic to have more then 200000 outstanding apfs per vcpu. Alternately
> we can use CR2 to pass a token.
>
Or a combination of pfec and cr2, yes.
>>>> would solve this. I prefer using put_user() though than a permanent
>>>> get_user_pages().
>>>>
>>>>
>>> I want to prevent it from been swapped out.
>>>
>> Since you don't prevent the page fault handler or code from being
>> swapped out, you don't get anything out of it.
>>
>>
> Performance. Currently it is accessed on each page fault and to access
> it gup+kmap should be done each and every time.
>
put_user() is just as fast as a kmap, and don't prevent page migration
or defragmentation.
Note we still have to mark_page_dirty() unless we want to chase live
migration bugs.
--
Do not meddle in the internals of kernels, for they are subtle and quick to panic.
WARNING: multiple messages have this Message-ID (diff)
From: Avi Kivity <avi@redhat.com>
To: Gleb Natapov <gleb@redhat.com>
Cc: kvm@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 01/11] Add shared memory hypercall to PV Linux guest.
Date: Tue, 03 Nov 2009 09:40:40 +0200 [thread overview]
Message-ID: <4AEFDE78.5030507@redhat.com> (raw)
In-Reply-To: <20091103071638.GK27911@redhat.com>
On 11/03/2009 09:16 AM, Gleb Natapov wrote:
>>>
>>> I have both! Do you want me to drop version?
>>>
>> Yes. Once a kernel is released you can't realistically change the version.
>>
>>
> Why not? If version doesn't match apf will not be used.
>
Then you cause a large performance regression (assuming apf is any
good). So there will be a lot of pressure to modify things
incrementally via feature bits.
>
>>>> Some documentation for this?
>>>>
>>>> Also, the name should reflect the pv pagefault use. For other uses
>>>> we can register other areas.
>>>>
>>>>
>>> I wanted it to be generic, but I am fine with making it apf specific.
>>> It will allow to make it smaller too.
>>>
>> Maybe we can squeeze it into the page-fault error code?
>>
>>
> apf has to pass two things into a guest kernel:
> - event type (page not present/wake up)
> - unique token
> Error code has 32 bits and at least 1 of them should indicate that this
> is apf another one should indicate event type so this leaves us 30 bits
> for a token. 12 bits of a token is used to store vcpu id this leaves 18
> bits for unique per vcpu id. Yes this may be enough. I don't think it is
> realistic to have more then 200000 outstanding apfs per vcpu. Alternately
> we can use CR2 to pass a token.
>
Or a combination of pfec and cr2, yes.
>>>> would solve this. I prefer using put_user() though than a permanent
>>>> get_user_pages().
>>>>
>>>>
>>> I want to prevent it from been swapped out.
>>>
>> Since you don't prevent the page fault handler or code from being
>> swapped out, you don't get anything out of it.
>>
>>
> Performance. Currently it is accessed on each page fault and to access
> it gup+kmap should be done each and every time.
>
put_user() is just as fast as a kmap, and don't prevent page migration
or defragmentation.
Note we still have to mark_page_dirty() unless we want to chase live
migration bugs.
--
Do not meddle in the internals of kernels, for they are subtle and quick to panic.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2009-11-03 7:40 UTC|newest]
Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-01 11:56 [PATCH 00/11] KVM: Add asynchronous page fault for PV guest Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
2009-11-01 11:56 ` [PATCH 01/11] Add shared memory hypercall to PV Linux guest Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
2009-11-02 4:27 ` Rik van Riel
2009-11-02 4:27 ` Rik van Riel
2009-11-02 7:07 ` Gleb Natapov
2009-11-02 7:07 ` Gleb Natapov
2009-11-02 12:18 ` Avi Kivity
2009-11-02 12:18 ` Avi Kivity
2009-11-02 16:18 ` Gleb Natapov
2009-11-02 16:18 ` Gleb Natapov
2009-11-03 5:15 ` Avi Kivity
2009-11-03 5:15 ` Avi Kivity
2009-11-03 7:16 ` Gleb Natapov
2009-11-03 7:16 ` Gleb Natapov
2009-11-03 7:40 ` Avi Kivity [this message]
2009-11-03 7:40 ` Avi Kivity
2009-11-01 11:56 ` [PATCH 02/11] Add "handle page fault" PV helper Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
2009-11-02 9:22 ` Ingo Molnar
2009-11-02 9:22 ` Ingo Molnar
2009-11-02 16:04 ` Gleb Natapov
2009-11-02 16:04 ` Gleb Natapov
2009-11-02 16:12 ` Ingo Molnar
2009-11-02 16:12 ` Ingo Molnar
2009-11-02 16:22 ` Gleb Natapov
2009-11-02 16:22 ` Gleb Natapov
2009-11-02 16:29 ` Ingo Molnar
2009-11-02 16:29 ` Ingo Molnar
2009-11-02 16:31 ` Gleb Natapov
2009-11-02 16:31 ` Gleb Natapov
2009-11-02 17:42 ` Gleb Natapov
2009-11-02 17:42 ` Gleb Natapov
2009-11-08 11:36 ` Ingo Molnar
2009-11-08 11:36 ` Ingo Molnar
2009-11-08 12:43 ` Avi Kivity
2009-11-08 12:43 ` Avi Kivity
2009-11-08 12:51 ` Ingo Molnar
2009-11-08 12:51 ` Ingo Molnar
2009-11-08 13:01 ` Avi Kivity
2009-11-08 13:01 ` Avi Kivity
2009-11-08 13:05 ` Ingo Molnar
2009-11-08 13:05 ` Ingo Molnar
2009-11-08 13:08 ` Avi Kivity
2009-11-08 13:08 ` Avi Kivity
2009-11-08 16:44 ` H. Peter Anvin
2009-11-08 16:44 ` H. Peter Anvin
2009-11-08 16:47 ` Ingo Molnar
2009-11-08 16:47 ` Ingo Molnar
2009-11-02 19:03 ` Rik van Riel
2009-11-02 19:03 ` Rik van Riel
2009-11-02 19:33 ` Avi Kivity
2009-11-02 19:33 ` Avi Kivity
2009-11-02 23:35 ` Rik van Riel
2009-11-02 23:35 ` Rik van Riel
2009-11-03 4:57 ` Avi Kivity
2009-11-03 4:57 ` Avi Kivity
2009-11-03 4:57 ` Avi Kivity
2009-11-05 6:44 ` Tian, Kevin
2009-11-05 6:44 ` Tian, Kevin
2009-11-05 8:22 ` Avi Kivity
2009-11-05 8:22 ` Avi Kivity
2009-11-05 8:22 ` Avi Kivity
2009-11-01 11:56 ` [PATCH 03/11] Handle asynchronous page fault in a PV guest Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
2009-11-02 12:38 ` Avi Kivity
2009-11-02 12:38 ` Avi Kivity
2009-11-02 15:54 ` Gleb Natapov
2009-11-02 15:54 ` Gleb Natapov
2009-11-03 14:14 ` Marcelo Tosatti
2009-11-03 14:14 ` Marcelo Tosatti
2009-11-03 14:25 ` Gleb Natapov
2009-11-03 14:25 ` Gleb Natapov
2009-11-03 14:32 ` Marcelo Tosatti
2009-11-03 14:32 ` Marcelo Tosatti
2009-11-03 14:38 ` Avi Kivity
2009-11-03 14:38 ` Avi Kivity
2009-11-01 11:56 ` [PATCH 04/11] Export __get_user_pages_fast Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
2009-11-02 9:23 ` Ingo Molnar
2009-11-02 9:23 ` Ingo Molnar
2009-11-01 11:56 ` [PATCH 05/11] Add get_user_pages() variant that fails if major fault is required Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
2009-11-02 19:05 ` Rik van Riel
2009-11-02 19:05 ` Rik van Riel
2009-11-01 11:56 ` [PATCH 06/11] Inject asynchronous page fault into a guest if page is swapped out Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
2009-11-02 12:56 ` Avi Kivity
2009-11-02 12:56 ` Avi Kivity
2009-11-02 15:41 ` Gleb Natapov
2009-11-02 15:41 ` Gleb Natapov
2009-11-01 11:56 ` [PATCH 07/11] Retry fault before vmentry Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
2009-11-02 13:03 ` Avi Kivity
2009-11-02 13:03 ` Avi Kivity
2009-11-01 11:56 ` [PATCH 08/11] Add "wait for page" hypercall Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
2009-11-02 13:05 ` Avi Kivity
2009-11-02 13:05 ` Avi Kivity
2009-11-02 15:13 ` Gleb Natapov
2009-11-02 15:13 ` Gleb Natapov
2009-11-02 15:19 ` Avi Kivity
2009-11-02 15:19 ` Avi Kivity
2009-11-01 11:56 ` [PATCH 09/11] Maintain preemptability count even for !CONFIG_PREEMPT kernels Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
2009-11-02 9:24 ` Ingo Molnar
2009-11-02 9:24 ` Ingo Molnar
2009-11-01 11:56 ` [PATCH 10/11] Handle async PF in non preemptable context Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
2009-11-01 11:56 ` [PATCH 11/11] Send async PF when guest is not in userspace too Gleb Natapov
2009-11-01 11:56 ` Gleb Natapov
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=4AEFDE78.5030507@redhat.com \
--to=avi@redhat.com \
--cc=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.