Das Problem ist, dass ich nicht für jedes Struct einen eigenen Cache aufbauen möchte, da das absolute Verschwendung ist.
Dann hast du den Vorteil und eigentlichen Grund für den SLAB-Allocator nicht verstanden
Er wurde gerade für die vielen Objekte gleicher Größe entworfen, weil du so weniger Verschnitt produzieren kannst und der Allocator auch schneller ist.
Ich lege für jede Struct einen Cache an.
Wenn du eigentlich eh immer kmalloc() nutzt, dann würde ich dir einen anderen malloc() Algo empfehlen (z.B. dmalloc oder sowas, musst du mal gucken, da gibt es auch welche für Multithreading), aber nen SLAB-Allocator da drunter zu verwenden, das ist Verschwendung!
An diese Puffer werden auch strengere Anforderungen als an allgemeine Objekte gestellt (z.B. Alignment, physische Durchgängigkeit, kein Kreuzen von 64 KB Grenzen).
Ich weiß nicht wie es beim "originalen" SLAB-Allocator aussieht, aber meiner beachtet das Alignment, das gefordert wird. Zumal Puffer so eine Sache ist, jedes Struct ist doch im Endeffekt ein Puffer
So kann ich den SLAB-Allocator z.B. auch für die FPU-Structs nutzen (weil die ja nen spezielles Alignment fordern, obwohl das Aufgrund ihrer Größe schon kein Problem ist).