All of lore.kernel.org
 help / color / mirror / Atom feed
From: Willy Tarreau <w@1wt.eu>
To: Con Kolivas <kernel@kolivas.org>
Cc: Andi Kleen <andi@firstfloor.org>, linux-kernel@vger.kernel.org
Subject: Re: BFS cpu scheduler and skip list implementation
Date: Thu, 29 Sep 2011 22:45:05 +0200	[thread overview]
Message-ID: <20110929204505.GA8810@1wt.eu> (raw)
In-Reply-To: <201109241838.06941.kernel@kolivas.org>

Hi Con,

On Sat, Sep 24, 2011 at 06:38:06PM +1000, Con Kolivas wrote:
> That's great then. I'm sure we'd explode in other weird and wonderful ways 
> before the CPU load ever got to 64k. Plus all that would happen is that it 
> would start degenerating from O(log n) insertion to O(n) as the number way 
> surpassed 64k. The number 16 for levels was simply chosen as the one 
> originally used by William Pugh in his sample code, but seems to be ample for 
> this application.

If you're interested, during the early CFS benchmarks a few years ago, I
reworked my old binary tree code to make it kernel-compatible. By this, I
mean that it never needs to allocate memory, it's used just like rbtrees
or kernel lists, by having a node in your structure and inserting it from
the root of a tree. It offers the following features :
  - O(log(N)) insertion/lookup
  - O(1) removal
  - O(1) next/prev walk
  - 20 bytes per node on 32-bit pointers, 36-bytes on 64-bit pointers, plus
    the key
  - supports unique or multiple occurrences of the same key (walked in
    insertion order and classed in trees)
  - supports 32/64 bit signed/unsigned integers, strings and memory blocks
  - supports prefixes (eg. to insert IP addresses with masks)
  - supports lookup of greater than or equal to, less than or equal to.

I replaced the rbtree that was used in haproxy's scheduler with this new
code and measured a noticeable performance improvement, since haproxy
does insert/next/remove a lot of times a second, and not having to balance
a tree saves a huge number of cycles.

I remember having conducted some tests on CFS a log time ago with it, but
the only cases where I observed a gain was when running insane amounts of
tasks at insane context switching rates, which was biased and irrealistic.
So I stopped trying to put it into the kernel at that time.

Maybe for your usage it might bring some value. Take a look at the code
here if you want, it's not too much documented but still enough to start
with it. There are a few examples that can help get it right. I know that
a few people use it for their own projects and they did not ask for help :-)

    http://git.1wt.eu/web?p=ebtree.git;a=summary

Cheers,
Willy


  reply	other threads:[~2011-09-29 20:45 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-23 23:45 BFS cpu scheduler and skip list implementation Con Kolivas
2011-09-24  1:21 ` Andi Kleen
2011-09-24  2:14   ` Con Kolivas
2011-09-24  7:35     ` Andi Kleen
2011-09-24  8:38       ` Con Kolivas
2011-09-29 20:45         ` Willy Tarreau [this message]
2011-09-29 22:58           ` Con Kolivas
2011-09-30  4:58             ` Willy Tarreau
2011-09-25  9:04 ` Heinz Diehl
2011-09-25  9:13   ` Con Kolivas
2011-09-25 11:16     ` Heinz Diehl
2011-09-25 11:19       ` Con Kolivas

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=20110929204505.GA8810@1wt.eu \
    --to=w@1wt.eu \
    --cc=andi@firstfloor.org \
    --cc=kernel@kolivas.org \
    --cc=linux-kernel@vger.kernel.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.