Historias
Slashboxes
Comentarios

Firefox usará el asignador de memoria de FreeBSD

Entrada escrita por mig21 y editada por Yonderboy el 20 de Febrero 2008, 19:37h   Printer-friendly   Email story
desde el dept. gestión-de-memoria
Leo en programming.reddit que Firefox 3 beta 3 utiliza el asignador de memoria dinámica de la rama experimental de FreeBSD (jemalloc) en lugar del asignador de la plataforma de ejecución. Al parecer ha dado buenos resultados en cuanto velocidad y reducción de la fragmentación en los test de rendimiento para las tres plataformas mayoritarias (Windows, Mac OS X y Linux). Para el que esté interesado en estos temas hay disponible un artículo muy interesante sobre jemalloc: A Scalable Concurrent malloc(3) Implementation for FreeBSD (pdf) en el que se explica su implementación, que coge ideas entre otros de hoard, y ciertamente tiene muy buena pinta. Hablé de hoard hace poco en Problemas de memoria (y algunas soluciones).

Historias relacionadas

[+] Comparativa de uso de memoria entre navegadores
chonago nos cuenta: «El navegador Firefox de Mozilla Foundation siempre ha sido muy criticado por su enorme consumo de memoria, un problema que parece haber sido resuelto en las vesiones preliminares de Firefox 3.5, que sorprenden por su eficiencia. Así lo confirman datos de una comparativa que analiza este apartado y enfrenta a Firefox 3.5 RC, Google Chrome 3.0 Dev, Safari 4.0 y Opera 10bLos desarrolladores de chrome han analizado públicamente sus malos resultados en esta comparativa.
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • por rodio (32755) el Miércoles, 20 Febrero de 2008, 20:25h (#1017723)

    Para aquellos que sepan inglés, se puede seguir el proceso de cómo se plantearon el análisis de la fragmentación de memoria en Firefox y las posibles soluciones hasta elegir jmalloc, así como las dificultades encontradas y las mejoras que han ido introduciendo, viendo las entradas sucesivas que fue escribiendo Pavlov (uno de los diseñadores):

    http://wordpress.com/tag/memory-fragmentation/ [wordpress.com]

    Aconsejo leerlas todas empezando desde la entrada más antigua, porque al menos a mí me pareció bastante interesante.

  • Firefox = Emacs

    (Puntos:3, Divertido)
    por pobrecito hablador el Miércoles, 20 Febrero de 2008, 22:20h (#1017775)
    Ahora ya incluyen hasta su propio gestor de memoria. Para cuándo un Firefox standalone sin sistema operativo?

  • No está en la beta3

    (Puntos:2, Informativo)
    por pobrecito hablador el Miércoles, 20 Febrero de 2008, 23:01h (#1017791)

    Y en el artículo enlazado [blogspot.com] también dice que jemalloc está sólo en las "nightly builds".
  • por errepunto (22529) el Jueves, 21 Febrero de 2008, 09:16h (#1017887)
    Guau, creo que o estoy yo muy confundido o están muy confundidos los demás :D

    El sistema operativo gestiona la memoria que las aplicaciones le solicitan. Si firefox le pide memoria y memoria y más memoria, le irá dando memoria RAM mientras pueda, y cuando ya no pueda tirará de memoria virtual (swap memory).

    Si "enseñamos" a la aplicación a pedir memos memoria, a que reutilice y libere de forma más eficiente y a que mueva los bloques de memoria (vital para evitar fragmentación) de forma más eficiente, sobre cargamos menos la memoria en general y la gestión se hace mucho más rápida.

    Muchas veces la cantidad de memoria consumida aumenta espectacularmente porque no se hace un free en el momento adecuado y la velocidad de ejecución puede caer por una gestión ineficiente de los bloques de memoria que tiene asignados por el sistema operativo.

    Lo que no entiendo es por qué no se ha implementado un recolector de basura que automatice estas tareas. Supongo que será como matar moscas a cañonazos, pero bueno. A ver como aumenta el rendimiento con la beta 3 (y si mejora aún más en las siguientes versiones, jeje).

    Saludos
    --

    La verdad está ahí fuera, ¡pero como corre la jodia!
  • Re:Se les ve desesperadillos

    (Puntos:2, Inspirado)
    por snookiex (35574) el Miércoles, 20 Febrero de 2008, 20:17h (#1017722)
    ( http://snort-ai.sourceforge.net/ | Última bitácora: Miércoles, 27 Mayo de 2009, 03:25h )
    No he usado interfaces basadas en XUL, me podrías decir por qué decís que es un engendro? el concepto en sí es muy interesante como para descalificarlo totalmente. Me gustaría que alguien que haya trabajado de primera mano con ello nos diera una luz al respecto.
    --
    Mi Detector de Intrusos inteligente: Snort-AI[snort-ai.sourceforge.net]
    [ Padre ]
  • Re:malloc?

    (Puntos:3, Interesante)
    por afobutu (20358) el Miércoles, 20 Febrero de 2008, 21:28h (#1017743)
    ( http://localhost:8080/ )
    Igual me equivoco, pero lo que hará será pedir al principio una gran cantidad de memoria contigua al S.O., y luego gestionarla internamente para ir dándose trocitos a sí mismo, así, chabacanamente explicado.
    --

    --------
    Así habló Zaratustra.
    [ Padre ]
    • Re:malloc? de afobutu (Puntos:2) Miércoles, 20 Febrero de 2008, 23:18h
    • 1 respuesta por debajo de tu umbral de lectura actual.
  • Re:malloc?

    (Puntos:5, Informativo)
    por pobrecito hablador el Miércoles, 20 Febrero de 2008, 21:37h (#1017749)
    El programador sabe mejor que el sistema operativo el uso que va a dar a la memoria. Un ejemplo sencillo es cuando trabajas con colecciones de cadenas: puedes hacer un malloc/una reserva por cada cadena que vayas necesitando pero es más efeciente reservar al principio una pool grande común a todas e ir repartiendo la memoria a discrección.

    Otra ventaja es que, al hacer solo una asignación real (un malloc), solo con un free has liberado todas las cadenas. Eso simplifica la liberación de recursos en caso de error o al finalizar el algoritmo (claro que complica la liberación de cadenas sueltas)

    No es el caso porque gecko está escrito en un subconjunto de C++ pero fíjate si es común aplicar tu propio esquema de manejo de memoria que ese lenguaje ya viene preparado para que "enchufes" el tuyo, tanto si trabajas con contenedores estándar [sgi.com] como si no lo haces [glenmccl.com]. En otros lenguajes como Java no hay esa flexibilidad pero sigues teniendo el recolector de basura que aplica su propio esquema sobre los malloc/free del sistema.
    [ Padre ]
    • Re:malloc? de pobrecito hablador (Puntos:2) Jueves, 21 Febrero de 2008, 01:20h
    • Re:malloc? de Reynard (Puntos:1) Jueves, 21 Febrero de 2008, 04:11h
    • 1 respuesta por debajo de tu umbral de lectura actual.
  • Re:malloc?

    (Puntos:4, Informativo)
    por mig21 (7781) <reversethis-{moc.liamg} {ta} {pb12gim}> el Miércoles, 20 Febrero de 2008, 22:50h (#1017787)
    ( http://yapw.blogspot.com/ | Última bitácora: Martes, 26 Mayo de 2009, 20:40h )
    creo que este enlace responde a tu pregunta: jemalloc builds [pavlov.net]
    --
    Y tú ¿Ya usas tu bitácora [barrapunto.com] para hablar de las noticias que te interesan?
    [ Padre ]
  • por suy (8275) el Miércoles, 20 Febrero de 2008, 23:43h (#1017813)
    ( http://www.badopi.org/ | Última bitácora: Viernes, 12 Junio de 2009, 10:14h )

    De programación multiplataforma sí sabe (C++ lo es). De lo que no sabe es de programación GUI, ya que C++ no tiene un API estándar para hacer GUIs.

    --

    Escribiendo de demasiadas cosas [barnacity.net] desde 2003.

    [ Padre ]
  • Re:malloc?

    (Puntos:5, Informativo)
    por Draco (3721) el Jueves, 21 Febrero de 2008, 07:30h (#1017859)
    ( http://www.alldreamcoupons.com/ | Última bitácora: Viernes, 02 Enero de 2009, 18:47h )
    Depende a qué llames "Sistema Operativo".

    Si con eso te refieres tan solo al kernel, verás que no hay ninguna llamada al sistema "malloc". Hay brk(), que simplemente aumentan el tamaño del heap y mmap() que reserva zonas completas de memoria, normalmente del tamaño de páginas.

    mmap() funciona en espacio de usuario y hace uso de estas llamadas. Tú puedes usar el malloc por defecto en tu sistema, o usar el tuyo propio(en Solaris vienen varias implementaciones de malloc).
    --

    Programs should be written for people to read, and only incidentally for machines to execute

    [ Padre ]
    • Re:malloc? de mig21 (Puntos:2) Jueves, 21 Febrero de 2008, 08:50h
    • 1 respuesta por debajo de tu umbral de lectura actual.
  • por djworld (10393) el Jueves, 21 Febrero de 2008, 08:06h (#1017865)
    ( http://www.losviajesdelcamarografo.com/ | Última bitácora: Miércoles, 14 Enero de 2009, 08:40h )
    Ejem... ¿por ejemplo Google Earth y Skype? Si quieres más aquí tienes algunas: http://trolltech.com/customers/coolapps [trolltech.com]. De todas formas, eso no es excusa para no usarlo.
    --
    openSUSE 11.1 [opensuse.org]
    [ Padre ]
  • Re:malloc?

    (Puntos:3, Informativo)
    por aplatana2 (22096) el Jueves, 21 Febrero de 2008, 10:23h (#1017915)
    ( http://drupal.gulic.org/blog/aplatanado )
    Como ya se ha dicho en otros comentarios malloc no es una llamada del sistema en Linux. Es una función de la libc que se implementa mediante una pocas llamadas. Así que parte del trabajo de gestionar la memoria del proceso la hace la propia libc, normalmente pidiendo grandes cantidades de memoria al sistema para posteriormente dividirla y asignarla según lo pida el programa mediante malloc.

    Como ejemplo me acuerdo de cuando programaba en Borlanda para Windows. Ellos decían que tenían la mejor gestión de memoria. Mucho más eficiente que la del runtime de Microsoft. Pero eso no evita que tuvieran que utilizar las llamadas al sistema para pedir la memoria al windows.
    [ Padre ]
  • 3 respuestas por debajo de tu umbral de lectura actual.