web-dev-qa-db-fra.com

Que choisir entre Slab et Slub Allocator dans le noyau Linux?

Quels sont les facteurs qui aident à décider du choix des allocateurs de mémoire dans le noyau Linux?

Dans le noyau Linux actuel, nous avons la possibilité de choisir SLAB, SLUB ou SLOB. J'ai lu que SLOB est utilisé pour le noyau de petites empreintes. Mais je veux connaître les facteurs qui aident à choisir entre Slab Allocator et Slub Allocator.

37
Siddharth

Dans la recherche de réponse, j'ai posté la même question sur Quora et Robert Love y a répondu:

Je suppose que vous posez cette question du point de vue de l'utilisateur d'un système, ou peut-être de quelqu'un qui construit un noyau pour un produit particulier. En tant que développeur du noyau, vous ne vous souciez pas de l'allocateur "slab" utilisé; l'API est la même.

Tout d'abord, "slab" est devenu un nom générique faisant référence à une stratégie d'allocation de mémoire utilisant un cache d'objets, permettant une allocation et une désallocation efficaces des objets du noyau. Il a d'abord été documenté par l'ingénieur Sun Jeff Bonwick 1 et implémenté dans le noyau Solaris 2.4.

Linux propose actuellement trois choix pour son allocateur "slab":

Slab est l'original, basé sur le papier séminal de Bonwick et disponible depuis la version 2.2 du noyau Linux. C'est une implémentation fidèle de la proposition de Bonwick, augmentée par les changements multiprocesseurs décrits dans le document de suivi de Bonwick 2 .

Slub est l'allocateur de mémoire de remplacement de nouvelle génération, qui est la valeur par défaut dans le noyau Linux depuis 2.6.23. Il continue d'utiliser le modèle de base "dalle", mais corrige plusieurs lacunes dans la conception de la dalle, en particulier autour des systèmes avec un grand nombre de processeurs. Slub est plus simple que Slab.

SLOB (Simple List Of Blocks) est un allocateur de mémoire optimisé pour les systèmes embarqués avec très peu de mémoire, de l'ordre des mégaoctets. Il applique un algorithme de premier ajustement très simple sur une liste de blocs, contrairement à l'ancien allocateur de tas de style K & R. En éliminant la quasi-totalité de l'overhad de l'allocateur de mémoire, SLOB convient parfaitement aux systèmes soumis à des contraintes de mémoire extrêmes, mais il n'offre aucun des avantages décrits dans 1 et peut souffrir d'une fragmentation pathologique.

Que devez-vous utiliser? Slub, sauf si vous construisez un noyau pour un périphérique intégré avec une mémoire limitée. Dans ce cas, je comparerais Slub et SLOB et verrais ce qui fonctionne le mieux pour votre charge de travail. Il n'y a aucune raison d'utiliser Slab; il sera probablement supprimé des futures versions du noyau Linux.

Veuillez vous référer à ceci lien pour une réponse originale.

51
Siddharth