memoria

Los requisitos de memoria de darktable son altos. Un simple cálculo aclara esto. Si tiene una imagen de 20MPx, por razones de precisión, darktable la almacenará internamente como una celda de punto flotante de 4 x 32 bits para cada píxel. Por tanto, cada imagen completa de este tamaño necesitará unos 300 MB de memoria. Como queremos procesar la imagen, necesitaremos al menos dos búferes para cada módulo, uno para la entrada y otro para la salida. Si tenemos un módulo más complejo, su algoritmo podría requerir adicionalmente varios búferes intermedios del mismo tamaño. Sin una mayor optimización, se necesitaría algo entre 600 MB y 3 GB simplemente para almacenar y procesar datos de imágenes. Además de eso, tenemos el segmento de código de darktable, el código y los datos de todas las bibliotecas del sistema vinculadas dinámicamente y, sin olvidar, más búferes donde darktable almacena imágenes intermedias para un acceso rápido durante el trabajo interactivo (caché de mapa mip).

Con todo, darktable necesita un mínimo de aproximadamente 4 GB de memoria para funcionar correctamente.

🔗memoria total del sistema

A partir del análisis anterior, es evidente que su computadora necesita una configuración de memoria sensata para ejecutar correctamente darktable. Le sugerimos que tenga al menos 4 GB de RAM física más 4 a 8 GB de espacio de intercambio adicional instalado.

Teóricamente, podría ejecutar darktable con menores cantidades de RAM física y equilibrar esto con suficiente espacio de intercambio. Sin embargo, esto podría hacer que su sistema se “estropee”, ya que lee o escribe páginas de datos hacia y desde el disco duro. Tenemos informes positivos de que esto funciona bien para varios usuarios, pero aún puede resultar extremadamente lento para otros. Una unidad de estado sólido puede aliviar un poco el dolor.

🔗espacio de direcciones disponible

Además de la cantidad total de memoria del sistema, existe otro factor limitante: el espacio de direcciones disponible de su arquitectura de hardware. La cantidad de memoria que puede direccionar un proceso depende de la cantidad de bits de dirección que ofrece su CPU. Para una CPU con registros de direcciones de 32 bits, esto es 2 ^ 32 bytes, lo que hace un total de 4 GB. Este es el límite superior absoluto de memoria que puede utilizar un proceso y constituye una situación difícil para darktable como hemos visto anteriormente.

La ruta de escape de darktable se llama mosaico. En lugar de procesar una imagen en un gran trozo, darktable divide la imagen en partes más pequeñas para cada módulo de procesamiento. Esto todavía requiere un búfer de entrada y salida completo, pero los búferes intermedios se pueden hacer lo suficientemente pequeños para que quepan todo dentro de los límites del hardware.

🔗fragmentación de memoria

Desafortunadamente, esta aún no es la historia completa. Un efecto llamado fragmentación de la memoria puede afectar y afectará al software que necesita realizar una gestión extensa de la memoria. Si un programa de este tipo asigna 5 veces 300 MB a la vez y los libera de nuevo, esa memoria normalmente debería estar disponible para una gran asignación de 1,5 GB después. Sin embargo, esto no suele ser el caso. Es posible que el asignador de memoria del sistema ya no vea esta área como un bloque contiguo de 1,5 GB, sino como una fila de áreas separadas de 300 MB. Si no hay otra área libre de 1,5 GB disponible, la asignación posterior fallará. Durante la ejecución de un programa, este mecanismo eliminará cada vez más los bloques de memoria más grandes en favor de los más pequeños. El caché de mapas mip de darktable asigna varios bloques de memoria pequeños por miniatura, por lo que este problema es aún mayor. Por esta razón, a partir de darktable 2.0, el soporte de 32 bits está obsoleto.

🔗más limitaciones

Como si esto no fuera lo suficientemente desafiante, hay otras cosas que podrían limitar el acceso de darktable a la memoria. En algunas placas antiguas, es necesario activar la opción de BIOS “mapeo de memoria” para tener habilitada toda la memoria instalada físicamente. Además, si tiene un sistema operativo de 32 bits, probablemente necesitará una versión del kernel que tenga habilitada la “Extensión de dirección física” (PAE). Este es a menudo, pero no siempre, el caso de Linux. Muchas distribuciones entregan diferentes núcleos, algunos con PAE activado y otros sin él; tienes que elegir el correcto. Para comprobar si el sistema está configurado correctamente, utilice el comando “libre” en un terminal y examine la salida. Si la salida informa menos RAM de la que ha instalado, tiene un problema que necesita corrección; por ejemplo, tiene 4GB en su placa, pero su kernel solo ve 3GB o menos. Debe consultar el manual de su BIOS y la información sobre su variante de Linux para obtener más ayuda.

🔗configurar darktable en sistemas de 32 bits

Como hemos visto, los sistemas de 32 bits son entornos difíciles para darktable. Aún así, algunos usuarios están ejecutando darktable en ellos, si los requisitos básicos en términos de memoria total del sistema y los temas mencionados en los párrafos anteriores se abordan correctamente.

Hay varios parámetros que requieren un ajuste para que funcione. Si instala nuevo, darktable detectará su sistema y establecerá valores conservadores por defecto. Sin embargo, si actualiza darktable desde una versión anterior, es probable que tenga configuraciones desfavorables en sus preferencias. Las consecuencias pueden ser el aborto de darktable debido a fallas en la asignación o, muy típicamente, darktable no puede importar correctamente un nuevo rollo de película. Como síntoma frecuente, se muestran cráneos en lugar de miniaturas para muchas de sus imágenes.

If this is the case, take a minute to optimize your preference settings. You will find them in preferences > processing > cpu/gpu/memory.

Aquí hay una breve explicación de los parámetros relevantes y sus configuraciones propuestas:

número de subprocesos en segundo plano
Este parámetro define el número máximo de hilos que se pueden ejecutar en paralelo al importar rollos de película o hacer otras cosas de fondo. Por razones obvias, en los sistemas de 32 bits, solo puede tener un hilo consumiendo recursos a la vez. Por lo tanto, debe establecer este parámetro en 1; cualquier cosa más alta te matará.
límite de memoria del host (en MB) para mosaico
Este parámetro le dice a darktable cuánta memoria (en MB) debe asumir que está disponible para almacenar búferes de imágenes durante las operaciones del módulo. Si una imagen no se puede procesar dentro de estos límites en un fragmento, el mosaico se hará cargo y procesará la imagen en varias partes, una tras otra. Establezca esto en el valor más bajo posible de 500 como punto de partida. Puede experimentar más tarde si puede aumentarlo un poco para reducir la sobrecarga del mosaico.
cantidad mínima de memoria (en MB) para un solo búfer en mosaico
Este es un segundo parámetro que controla el mosaico. Establece un límite inferior para el tamaño de los búferes de imágenes intermedios en megabytes. El parámetro es necesario para evitar un mosaico excesivo en algunos casos (para algunos módulos). Establezca este parámetro en un valor bajo de 8. Puede aumentar tentativamente a 16 más adelante.
memoria en megabytes para usar como caché de miniaturas
Esto controla cuántas miniaturas (o mapas mip) se pueden almacenar en la memoria a la vez. Como punto de partida, establezca esto en algo así como 256 MB. Desde darktable 2.0, el caché asigna unos pocos búferes pequeños por miniatura en el caché, lo que provoca una fragmentación significativa de la memoria. Como se explicó anteriormente, esto plantea un problema para los sistemas de 32 bits. Por esta razón, a partir de darktable 2.0, el soporte de 32 bits está obsoleto.

🔗darktable en sistema de 64-bits

No hay mucho que decir aquí. Por supuesto, los sistemas de 64 bits también requieren una cantidad suficiente de memoria principal, por lo que la recomendación de intercambio de más de 4 GB es válida. Por otro lado, las arquitecturas de 64 bits no sufren las limitaciones específicas de 32 bits como el espacio de direcciones pequeño y la locura de la fragmentación.

La mayoría de las CPU modernas Intel o AMD de 64 bits tendrán un espacio de direcciones disponible en el rango de varios Terabytes. La palabra “moderno” es relativa en este contexto: todas las CPU AMD e Intel introducidas desde 2003 y 2004, respectivamente, ofrecen un modo de 64 bits. Linux de 64 bits ha estado disponible durante muchos años.

Todas las distribuciones de Linux relevantes le dan la opción de instalar una versión de 32 bits o de 64 bits sin costo adicional. Incluso puede ejecutar archivos binarios antiguos de 32 bits en un Linux de 64 bits. Lo único que debe hacer es invertir algo de tiempo en la migración. Al final, recomendamos encarecidamente pasar a una versión de 64 bits de Linux. Realmente no hay razón para no hacerlo.

En un sistema de 64 bits, puede dejar de forma segura los parámetros de configuración relacionados con el mosaico en sus valores predeterminados: “límite de memoria del host (en MB) para el mosaico” debe tener un valor de 1500 y “cantidad mínima de memoria (en MB) para un solo búfer in tiling ”debe establecerse en 16. Si está migrando de un sistema de 32 bits a uno de 64 bits, deberá verificar estas configuraciones y cambiarlas manualmente si es necesario en el cuadro de diálogo de preferencias de darktable.

Por lo general, no es necesario restringirse en el número de subprocesos en segundo plano en un sistema de 64 bits. En un sistema multiprocesador, un número de dos a ocho subprocesos puede acelerar la generación de miniaturas considerablemente en comparación con un solo subproceso. La razón no es tanto aprovechar al máximo todos los núcleos de su CPU (el pixelpipe de darktable los usa todos en paralelo de todos modos) sino ocultar la latencia de E / S.

Vale la pena mencionar una excepción. Si usa darktable para procesar panoramas cosidos (por ejemplo, TIFF generados por Hugin), estas imágenes pueden alcanzar tamaños considerables. Cada subproceso de fondo necesita asignar suficiente memoria para mantener una imagen completa más los intermedios y la salida en sus búferes. Esto puede provocar rápidamente que incluso un sistema de 64 bits bien equipado se quede sin memoria. En ese caso, reduzca el número de subprocesos en segundo plano a solo uno.