Originally posted by kloczek
View Post
First, the only thing slab allocators do is they put a hard 50% low boundary on internal fragmentation (or, rather, internal utilization). Slab allocators do not guarantee anything else.
As for external fragmentation, slab allocators typically _worsen_ it. Imagine writing 128K of data in one write(), and then 64K more. With zfs, you are guaranteed to fragment at this boundary, because different slabs _will_ be used for 128K and 64K writes.
Also you get funny fireworks when your disk is almost full and there are no slabs left for your chosen block size. Read this thread backwards, someone has already mentioned the absolutely wondrous hack zfs had to do to fix this.
Originally posted by kloczek
View Post
Google "memory compaction", you will be surprised.
Works for user pages only, of course. Do you know the single most significant source of non-movable pages in Linux (also the reason why you generally can't allocate 1G hugepages post boot, or also the reason why stuff like CMA with boot-time memory reservation had to be invented for non-scatter-gather DMAs out there in the embedded hw)? You guessed right, slabs.
Comment