On Sat, Jan 22, 2005 at 09:48:20PM +0000, Mel Gorman wrote:
> On Fri, 21 Jan 2005, Marcelo Tosatti wrote:
> 
> > On Thu, Jan 20, 2005 at 10:13:00AM +0000, Mel Gorman wrote:
> > > <Changelog snipped>
> >
> > Hi Mel,
> >
> > I was thinking that it would be nice to have a set of high-order
> > intensive workloads, and I wonder what are the most common high-order
> > allocation paths which fail.
> >
> 
> Agreed. As I am not fully sure what workloads require high-order
> allocations, I updated VMRegress to keep track of the count of
> allocations and released 0.11
> (http://www.csn.ul.ie/~mel/projects/vmregress/vmregress-0.11.tar.gz). To
> use it to track allocations, do the following
> 
> 1. Download and unpack vmregress
> 2. Patch a kernel with kernel_patches/v2.6/trace_pagealloc-count.diff .
> The patch currently requires the modified allocator but I can fix that up
> if people want it. Build and deploy the kernel
> 3. Build vmregress by
>   ./configure --with-linux=/usr/src/linux-2.6.11-rc1-mbuddy
>   (or whatever path is appropriate)
>   make
> 4. Load the modules with;
>   insmod src/code/vmregress_core.ko
>   insmod src/sense/trace_alloccount.ko
> 
> This will create a proc entry /proc/vmregress/trace_alloccount that looks
> something like;
> 
> Allocations (V1)
> -----------
> KernNoRclm   997453      370       50        0        0        0        0     
>    0        0        0        0
> KernRclm      35279        0        0        0        0        0        0     
>    0        0        0        0
> UserRclm    9870808        0        0        0        0        0        0     
>    0        0        0        0
> Total      10903540      370       50        0        0        0        0     
>    0        0        0        0
> 
> Frees
> -----
> KernNoRclm   590965      244       28        0        0        0        0     
>    0        0        0        0
> KernRclm     227100       60        5        0        0        0        0     
>    0        0        0        0
> UserRclm    7974200       73       17        0        0        0        0     
>    0        0        0        0
> Total      19695805      747      100        0        0        0        0     
>    0        0        0        0
> 
> To blank the counters, use
> 
> echo 0 > /proc/vmregress/trace_alloccount
> 
> Whatever workload we come up with, this proc entry will tell us if it is
> exercising high-order allocations right now.

Great, excellent! Thanks.

I plan to spend some time testing and trying to understand the vmregress 
package 
this week.
 
> > It mostly depends on hardware because most high-order allocations happen
> > inside device drivers? What are the kernel codepaths which try to do
> > high-order allocations and fallback if failed?
> >
> 
> I'm not sure. I think that the paths we exercise right now will be largely
> artifical. For example, you can force order-2 allocations by scping a
> large file through localhost (because of the large MTU in that interface).
> I have not come up with another meaningful workload that guarentees
> high-order allocations yet.

Thoughts and criticism of the following ideas are very much appreciated:

In private conversation with wli (who helped me providing this information) we 
can 
conjecture the following:

Modern IO devices are capable of doing scatter/gather IO.

There is overhead associated with setting up and managing the scatter/gather 
tables. 

The benefit of large physically contiguous blocks is the ability to avoid the 
SG 
management overhead. 

Now the question is: The added overhead of allocating high order blocks through 
migration 
offsets the overhead of SG IO ? Quantifying that is interesting.

This depends on the driver implementation (how efficiently its able to manage 
the SG IO tables) and 
device/IO subsystem characteristics.

Also filesystems benefit from big physically contiguous blocks. Quoting wli
"they want bigger blocks and contiguous memory to match bigger blocks..."

I completly agree that your simplified allocator decreases fragmentation which 
in turn
benefits the system overall. 

This is an area which can be further improved - ie efficiency in reducing 
fragmentation 
is excellent. 
I sincerely appreciate the work you are doing!

> > To measure whether the cost of page migration offsets the ability to be
> > able to deliver high-order allocations we want a set of meaningful
> > performance tests?
> >
> 
> Bear in mind, there are more considerations. The allocator potentially
> makes hotplug problems easier and could be easily tied into any
> page-zeroing system. Some of your own benchmarks also implied that the
> modified allocator helped some types of workloads which is beneficial in
> itself.The last consideration is HugeTLB pages, which I am hoping William
> will weigh in.
> 
> Right now, I believe that the pool of huge pages is of a fixed size
> because of fragmentation difficulties. If we knew we could allocate huge
> pages, this pool would not have to be fixed. Some applications will
> heavily benefit from this. While databases are the obvious one,
> applications with large heaps will also benefit like Java Virtual
> Machines. I can dig up papers that measured this on Solaris although I
> don't have them at hand right now.

Please.

> We know right now that the overhead of this allocator is fairly low
> (anyone got benchmarks to disagree) but I understand that page migration
> is relatively expensive. The allocator also does not have adverse
> CPU+cache affects like migration and the concept is fairly simple.

Agreed.

> > Its quite possible that not all unsatisfiable high-order allocations
> > want to force page migration (which is quite expensive in terms of
> > CPU/cache). Only migrate on __GFP_NOFAIL ?
> >
> 
> I still believe with the allocator, we will only have to migrate in
> exceptional circumstances.

Agreed - best scenario is the guaranteed availability of high-order blocks, 
where 
migration is not necessary.


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to