Aleación de memory glibc: arenas y debugging

Las versiones recientes de glibc (desde 2.12?) Tienen MALLOC_ARENA_MAX y MALLOC_PER_THREAD sintonizables.

Preguntas:

  1. ¿Hay alguna diferencia entre MALLOC_PER_THREAD = 0 y MALLOC_ARENA_MAX = 1? ¿MALLOC_PER_THREAD todavía es compatible con el último glibc?

  2. Arenas aumenta el uso de la memory virtual: ¿son adecuados para kernels de 32 bits?

  3. ¿Son adecuados también para una CPU central (invitados virtuales)?

  4. Si habilito las comprobaciones de memory con

MALLOC_CHECK_ = 3

¿glibc usa un asignador de debugging básico o el pnetworkingeterminado?

Érase una vez que leí glibc con cierto tipo de debugging uso un asignador básico en lugar del regular … pero no puedo encontrar los documentos.

  1. Según tengo entendido, MALLOC_PER_THREAD era un mando de configuration temporal proporcionado en RHEL para habilitar el nuevo asignador por subprocess (para get más detalles, consulte las notas de publicación de CentOS correspondientes ). Ya no está disponible en las versiones actuales de glibc , y el nuevo asignador se convirtió en el pnetworkingeterminado en 2.15 (creo). Si se establece MALLOC_ARENA_MAX=1 significa que solo puede haber una arena, que tiene un efecto similar pero probablemente no es estrictamente equivalente, ya que otras partes del "nuevo" asignador todavía están activas en este caso.

  2. Sí, son adecuados para núcleos de 32 bits; pero el ajuste pnetworkingeterminado es diferente ( M_ARENA_TEST es 2 en sistemas de 32 bits, 8 en otros).

  3. Probablemente no tenga mucho sentido usar múltiples arenas en sistemas de un solo núcleo, pero la optimization por defecto debería ocuparse de eso (el límite estricto para las arenas generalmente es un múltiplo de la cantidad de CPU disponibles).

  4. M_CHECK_ACTION=3 es el valor pnetworkingeterminado hoy en día, por lo que habilitar las comprobaciones de memory usa el asignador pnetworkingeterminado.

La documentation de nivel de usuario para esto está en man mallopt .

glibc 2.26 debería tener un nuevo caching por hilo , tcache , pero eso demorará un poco antes de que esté disponible en las distribuciones. (La date de lanzamiento planificada es el 1 de agosto de este año).