David Lang a écrit :On Wed, 4 Jan 2006, Eric Dumazet wrote:Andi Kleen a écrit :Eric Dumazet <dada1@xxxxxxxxxxxxx> writes:1) Reduces the size of (struct fdtable) to exactly 64 bytes on 32bits
platforms, lowering kmalloc() allocated space by 50%.
It should be probably a kmem_cache_alloc() instead of a kmalloc
in the first place anyways. This would reduce fragmentation.
Well in theory yes, if you really expect thousand of tasks running...
But for most machines, number of concurrent tasks is < 200, and using a special cache for this is not a win.
is it enough of a win on machines with thousands of concurrent tasks that it would be a useful config option?
Well..., not if NR_CPUS is big too. (We just saw a thread on lkml about raising NR_CPUS to 1024 on ia64).
On a 1024 CPUS machine, a kmem cache could use at least 1 MB for its internal structures, plus 1024 pages (PAGE_SIZE) for holding the caches (one cache per CPU), if you assume at least one task was created on behalf each cpu.
if PAGE_SIZE is 64KB, you end up with 65 MB of ram for the cache. Even with 100.000 tasks running on the machine, its not a win.
slab caches are very complex machinery that consume O(NR_CPUS) ram.