tech-kern archive

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

Re: kernel memory allocators



>From my note I wrote last year:

- There's a need to initialize pool(9) and vmem(9) subsystems very
  early - just after BSS is initialized and C code is run.  So that
  MD init code can use vmem(9) as a generic space allocator to manage
  MD resources.

  To do this, we need a new MI function (say mi_bootstrap()) to be
  called at the entry of initxxx().  This new mi_bootstrap()
  initializes mutex, cv, and pool.  All of these don't allocate
  memory.

- To bootstrap vmem(9), we need a bootstrap poolpage because vmem(9)
  relies on pool for boundary tags.  This part is partially done
  in the yamt-kmem branch.

I don't fully understand the problems you explain, but I agree that
the current bootstrap code order has some room to be improved.

Keep good work. :)

Masao

On Sun, Jan 16, 2011 at 03:35:17PM +0100, Lars Heidieker wrote:
> Hi,
> 
> I have got the kmem reworked to be based on the pool allocator
> directly with different sized caches, backed by the kmem map making
> it's allocations interrupt save, I replaced the malloc with just a
> thin wrapper to use the reworked kmem.... system is up and stable.
> 
> I just came across the order the pool subsystem is initialized,
> pool_init and pool_cache_bootstrap can be called before
> pool_subsystem_init is called, which is a bit wired.
> It makes it possible to pool_init early during pmap_bootstrap for
> example, but allocation from those pools is impossible until
> uvm_km_init/kmeminit has run as the allocators do not have any backing
> map.
> This holds true even if a special allocator is passed to those early
> pools as meta data is still allocated from pool_allocator_kmem which
> isnt't usable until kmeminit.
> 
> For the x86 pmap it's easily possible to move the
> pool_init/pool_cache_bootstrap calls from pmap_bootstrap to pmap_init
> and have no calls to pool_init before the call to pool_subsystem_init.
> This seems possible for other pmaps as well. (I am currently checking this)
> 
> If done so this would enable us to init different pool_allocators
> during pool_subsystem_init (with different page granualarities
> 1,2,3,4,5 pages eg) and to choose from those during pool_init to
> reduce inner fragmentation.
> (Probably splitting the pool_subsystem_init into
> pool_subsystem_bootstrap and pool_subsystem_init, with
> pool_subsystem_init marking when pool_get is safe)
> 
> For those different sizes vmk_caches at the kenrel_map and kmem_map
> can be established (Something I have implemented already).
> 
> Lars
> 
> -- 
> Mystische ErklÃrungen:
> Die mystischen ErklÃrungen gelten fÃr tief;
> die Wahrheit ist, dass sie noch nicht einmal oberflÃchlich sind.
> ãã -- Friedrich Nietzsche
> ãã [ Die FrÃhliche Wissenschaft Buch 3, 126 ]

-- 
Masao Uebayashi / Tombi Inc. / Tel: +81-90-9141-4635


Home | Main Index | Thread Index | Old Index