|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] PoD code killing domain before it really gets started
>>> On 07.08.12 at 15:13, George Dunlap <George.Dunlap@xxxxxxxxxxxxx> wrote:
> On Tue, Aug 7, 2012 at 1:17 PM, Jan Beulich <JBeulich@xxxxxxxx> wrote:
>>>>> On 06.08.12 at 18:03, George Dunlap <George.Dunlap@xxxxxxxxxxxxx> wrote:
>>> 2. Allocate the PoD cache before populating the p2m table
>>
>> So this doesn't work, the call simply has no effect (and never
>> reaches p2m_pod_set_cache_target()). Apparently because
>> of
>>
>> /* P == B: Nothing to do. */
>> if ( p2md->pod.entry_count == 0 )
>> goto out;
>>
>> in p2m_pod_set_mem_target(). Now I'm not sure about the
>> proper adjustment here: Entirely dropping the conditional is
>> certainly wrong. Would
>>
>> if ( p2md->pod.entry_count == 0 && d->tot_pages > 0 )
>> goto out;
>>
>> be okay?
>>
>> But then later in that function we also have
>>
>> /* B < T': Set the cache size equal to # of outstanding entries,
>> * let the balloon driver fill in the rest. */
>> if ( pod_target > p2md->pod.entry_count )
>> pod_target = p2md->pod.entry_count;
>>
>> which in the case at hand would set pod_target to 0, and the
>> whole operation would again not have any effect afaict. So
>> maybe this was the reason to do this operation _after_ the
>> normal address space population?
>
> Snap -- forgot about that.
>
> The main thing is for set_mem_target() to be simple for the toolstack
> -- it's just supposed to say how much memory it wants the guest to
> use, and Xen is supposed to figure out how much memory the PoD cache
> needs. The interface is that the toolstack is just supposed to call
> set_mem_target() after each time it changes the balloon target. The
> idea was to be robust against the user setting arbitrary new targets
> before the balloon driver had reached the old target. So the problem
> with allowing (pod_target > entry_count) is that that's the condition
> that happens when you are ballooning up.
>
> Maybe the best thing to do is to introduce a specific call to
> initialize the PoD cache that would ignore entry_count?
Hmm, would looks more like a hack to me.
How about doing the initial check as suggested earlier
if ( p2md->pod.entry_count == 0 && d->tot_pages > 0 )
goto out;
and the latter check in a similar way
if ( pod_target > p2md->pod.entry_count && d->tot_pages > 0 )
pod_target = p2md->pod.entry_count;
(which would still take care of any ballooning activity)? Or are
there any other traps to fall into?
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |