[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] Re: [PATCH] tmem: fix to 20945 "When tmem is enabled, reserve a fraction of memory"



If you don't want verbosity in the failed-allocation path, remove your
printk. Notice non-tmem code doesn't make a noise in this case.
tmem_relinquish_pages() takes an order parameter, and the normal path
through the allocator unconditionally calls it. Hence it doesn't make sense
to logically separate order=0 from order>=9 in this case either, from the
p.o.v. of the caller.

 -- Keir

On 17/02/2010 21:49, "Dan Magenheimer" <dan.magenheimer@xxxxxxxxxx> wrote:

> Hi Keir --
> 
> Hmmm... one other consequence of the change you made to the patch
> (as checked in as 20955 in staging) is that every attempt to allocate
> any 2MB page for a new domain (when memory is scarce) will result
> in a complaint printk'ed from tmem_relinquish_pages() before
> the domain builder falls back to order==0 pages.  This
> verbosity is probably not desirable in a product, though
> it may be very desirable with debug enabled as we track
> down other order>0 allocations.
> 
> Changing back to the "goto fail" avoids the verbosity without
> losing the debug capability.
> 
> Dan
> 
>> -----Original Message-----
>> From: Dan Magenheimer
>> Sent: Wednesday, February 17, 2010 8:13 AM
>> To: Jan Beulich; Keir Fraser
>> Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
>> Subject: RE: [PATCH] tmem: fix to 20945 "When tmem is enabled, reserve
>> a fraction of memory"
>> 
>>> From: Jan Beulich [mailto:JBeulich@xxxxxxxxxx]
>>> Subject: Re: [PATCH] tmem: fix to 20945 "When tmem is enabled,
>> reserve
>>> a fraction of memory"
>>> 
>>>>>> Keir Fraser <keir.fraser@xxxxxxxxxxxxx> 17.02.10 13:10 >>>
>>>> On 16/02/2010 18:30, "Dan Magenheimer" <dan.magenheimer@xxxxxxxxxx>
>>> wrote:
>>>> 
>>>>> +        if ( order == 0)
>>>>> +            goto try_tmem;
>>>>> +        if ( order >= 9)
>>>>> +            goto fail;
>>>> 
>>>> Why not try_tmem in the case that order>=9, too, rather than fail
>>> outright?
>>> 
>>> It could be done that way, but wouldn't have any effect, as tmem
>>> doesn't even try to relinquish any memory when order > 0.
>> 
>> Correct.  To explain (if anyone is interested):
>> 
>> Tmem maintains queues of order==0 pages internally because
>> if a page is released to the xenheap/domheap, it must be scrubbed.
>> But tmem is highly likely to use the page again (and SOON).
>> If tmem immediately reclaims the page, the scrubbing is wasted
>> cycles.  But if it does not and some other xenheap/domheap allocation
>> obtains the page, the contents of an unscrubbed page could
>> reveal data from another domain so would be a potential
>> security hole.
>> 
>> When a domain is being created, a large number of pages
>> may be (scrubbed and) transferred from tmem to Xen/domheap.
>> While this transfer, in combination with the "buddying"
>> in xenheap/domheap, may result in some order>0 chunks of
>> memory, there is no guarantee that it will.
>> 
>> I considered adding some kind of "buddying" to tmem's "free"
>> pages (and the interface to tmem_relinquish_pages() from
>> alloc_heap_pages() allows for an order>0 to be requested),
>> but due to fragmentation it would only rarely have any
>> value, especially for order>1, so I never implemented it.
>> 
>> So, in the end, the real solution is to change any allocations
>> in Xen, at least any allocations that occur after dom0 is
>> running, to no longer require order>0 allocations.
>> 
>> Dan



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.