Maison  >  Article  >  base de données  >  Comment Redis utilise différents allocateurs de mémoire pour comparer les taux de fragmentation

Comment Redis utilise différents allocateurs de mémoire pour comparer les taux de fragmentation

WBOY
WBOYavant
2023-05-26 10:58:211701parcourir

 Dans le code source zmalloc.c de Redis, nous pouvons voir le code suivant :

   /* Remplacer explicitement malloc/free etc lors de l'utilisation de tcmalloc */

  #if défini(USE_TCMALLOC)

  #define malloc(size) tc_malloc (size)

tc_calloc(count,size) est la définition de la fonction calloc

 #define realloc(ptr,size) tc_realloc(ptr,size)

 #define free(ptr) tc_free(ptr)

 #elif défini( USE_JEMALLOC)

  #define malloc(size) je_malloc(size)

La phrase suivante est réécrite comme demandé : L'instruction "#define calloc(count,size) je_calloc(count,size)" est utilisée pour remplacer la fonction définie standard "calloc" par une fonction personnalisée nommée "je_calloc".

  #define realloc(ptr,size) je_realloc( ptr,size)

  #define free(ptr) je_free(ptr)

  #endif

  À partir du code ci-dessus, nous pouvons voir que lorsque Redis est compilé, il déterminera d'abord s'il doit utiliser tcmalloc. Si tel est le cas, il le fera. Utiliser tcmalloc La fonction correspondante remplace l'implémentation de la fonction dans la libc standard. Après cela, il vérifiera si jemalloc prend effet. Sinon, la fonction de gestion de la mémoire de la libc standard sera utilisée.

 Dans la dernière version 2.4.4, jemalloc a été inclus dans le package de code source dans le cadre du package de code source, il peut donc être utilisé directement. Et si vous souhaitez utiliser tcmalloc, vous devez l'installer vous-même.

  Parlons brièvement de la façon d'installer le package tcmalloc. tcmalloc fait partie de google-proftools, nous devons donc en fait installer google-proftools. Lors de l'installation sur une machine 64 bits, la bibliothèque libunwind requise doit d'abord être installée.

 wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz

 tar zxvf libunwind-0.99-alpha.tar.gz

 cd libunwind-0.99-alpha/

  CFLAGS=-fPIC ./configure

  make CFLAGS=-fPIC

  make CFLAGS=-fPIC install

  Comment Redis utilise différents allocateurs de mémoire pour comparer les taux de fragmentation

  Et puis installez google- preftools :

 wget http : //google-perftools.googlecode.com/files/google-perftools-1.8.1.tar.gz

 tar zxvf google-perftools-1.8.1.tar.gz

 cd google-perftools-1.8.1 /

  ./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --disable-debugalloc --enable-minimal

 make && make install

  sudo echo "/usr /local /lib" > /etc/ld.so.conf.d/usr_local_lib.conf #Si vous n'avez pas ce fichier, créez-en un vous-même

  sudo /sbin/ldconfig

  Ensuite, installez Redis et spécifiez-le lors de la création du correspondant paramètres pour activer tcmalloc

 $ curl -O http://redis.googlecode.com/files/redis-2.4.4.tar.gz

 $ tar xzvf redis-2.4.4.tar.gz

 $ cd redis -2.4.4

 $ make USE_TCMALLOC=yes FORCE_LIBC_MALLOC=yes

 $ sudo make install

 Après avoir redémarré Redis, vous pouvez voir l'allocateur de mémoire utilisé via la commande info.

Revenant au sujet de cet article, cet article traite des trois allocateurs de mémoire correspondant à tcmalloc, jemalloc et libc. Ce qui suit est un résultat de test simple, tiré des informations d'informations Redis, conçu pour évaluer ses performances et son taux de fragmentation. Les tests ont utilisé différents allocateurs. Nous pouvons voir que le taux de fragmentation est le plus bas lors de l'utilisation de tcmalloc, qui est de 1,01, jemalloc est de 1,02 et le taux de fragmentation de l'allocateur de la libc est de 1,31, comme indiqué ci-dessous : 8M

 mem_fragmentation_ratio : 1.01

 mem_allocator:tcmalloc-1.7

used_memory:708381168

used_menory_human:675.56M

used_memory_rss:723587072

used_memory_peak:70880 3768

used_memory_peak_human:675,97 M

  mem_fragmentation_ratio:1.02

mem_allocator:jemalloc-2.2. 1

used_memory:869000400

used_menory_human:828.74M

used_memory_rss:11 36689152

 used_memory_peak:868992208

 used_memory_peak_human :828,74M

 mem_fragmentation_ratio:1,31

 mem_allocator :libc

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer