On Mon, 2016-04-18 at 16:05 +0300, Saeed Mahameed wrote: > On Mon, Apr 18, 2016 at 3:48 PM, Eric Dumazet <eric.duma...@gmail.com> wrote: > > On Sun, 2016-04-17 at 17:29 -0700, Eric Dumazet wrote: > > > >> > >> If really you need to allocate physically contiguous memory, have you > >> considered converting the order-5 pages into 32 order-0 ones ? > > > > Search for split_page() call sites for examples. > > > > > > Thanks Eric, we are already evaluating split_page as we speak. > > We did look but could not find any specific alloc_pages API that > allocates many physically contiguous pages with order0 ! so we assume > it is ok to use split_page.
Note: I have no idea of split_page() performance : Buddy page allocator has to aggregate pages into order-5, then we would undo the work, touching 32 cache lines. You might first benchmark a simple loop doing loop 10,000,000 times Order-5 allocation split into 32 order-0 free 32 pages Another idea would be to have a way to control max number of order-5 pages that a port would be using. Since driver always own a ref on a order-5 pages, idea would be to maintain a circular ring of up to XXX such pages, so that we can detect an abnormal use and fallback to order-0 immediately.