darktable page lede image
darktable page lede image

Temas especiales

Capítulo 10. Temas especiales

This chapter touches several technical topics which might help you to get darktable running on specific hardware or optimize its performance. A lot of additional technical background information and many tips and tricks are also covered in an extensive blog section that you can find on our homepage.

10.1. darktable y la memoria

darktable's memory requirements are high. A simple calculation makes this clear. If you have a 20MPix image, darktable for precision reasons will store this internally as a 4 x 32-bit floating point cell for each pixel. Each full image of this size will need about 300MB of memory. As we want to process the image, we will at least need two buffers for each module  – one for input and one for output. If we have a more complex module, its algorithm might additionally require several intermediate buffers of the same size. Without further optimization, anything between 600MB and 3GB would be needed only to store and process image data. On top we have darktable's code segment, the code and data of all dynamically linked system libraries, and not to forget further buffers where darktable stores intermediate images for quick access during interactive work (mip map cache). All in all, darktable would like to see a minimum of about 4GB to run happily.

10.1.1. Memoria total del sistema

De lo dicho anteriormente, es evidente que su computador necesita un ajuste sensato de memoria para correr darktable apropiadamente. Le sugerimos que tenga al menos 4GB de memoria RAM física además de 4 u 8GB de espacio swap adicional instalado. Lo último es requerido para que su sistema pueda intercambiar temporalmente los datos innecesarios al disco para liberar espacio de la RAM física.

Teóricamente, también puede correr darktable con menores cantidades de RAM física y balancearlo con suficiente espacio swap. Sin embargo, debe estar preparado para que su sistema reciba una fuerte paliza, ya que leerá y escribirá páginas de datos hacia y desde su disco duro. Tenemos reportes positivos de que esto funciona bien para varios usuarios, pero quizás sea extremadamente lento para otros...

10.1.2. Espacio disponible

Ademas de la cantidad total de memoria en el sistema hay otro factor limitante: el espacio disponible de la arquitectura de su hardware. Cuando memoria puede ser usada por un proceso dependerá del número de bits que su CPU ofrece. Para un CPU con 32-bit registrados, esto es 2^32 bytes, lo cual da un total de 4GB. Esto es el límite superior absoluto de memoria que puede ser utilizado por un proceso y constituye una situación apretada para darktable, como vimos anteriormente.

La ruta de escape de darktable se llama bandas. En vez de procesar una imagen en un gran pedazo, dividimos la imagen en pequeñas partes para cada paso de procesado (módulo). Aún así, esto requerirá un buffer completo de entrada y uno de salida, pero los buffers intermedios pueden ser lo suficientemente pequeños para que todo se ajuste a los limites del hardware.

10.1.3. Fragmentación de memoria

Unfortunately this is not the full story yet. There is an effect called memory fragmentation, which can and will hit software that needs to do extensive memory management. If such a program allocates 5 times 300MB at a time and frees it again, that memory should normally be available for one big 1.5GB allocation afterwards. This however is often not the case. The system's memory allocator may no longer see this area as one contiguous 1.5GB block but as a row of 300MB areas. If there is no other free area of 1.5GB available, the allocation would fail. During a program run this mechanism will take away more and more of the larger memory blocks in favor of smaller ones. darktable 2.0 mip map cache allocates several small memory blocks per each thumbnail, so this problem is even bigger. For this reason, as of darktable 2.0, 32-bit support is soft-deprecated.

10.1.4. Limitaciones adicionales

Y por si esto no fuese lo suficientemente difícil, hay mas cosas que pueden limitar su acceso a la memoria. En algunas tarjetas antiguas necesita activas la opción remapeo de memoria en su BIOS para tener instalada toda la memoria física. Adicionalmente, si está en un SO de 32-bit, probablemente necesitará una versión de kernel que tenga activada la Extensión de Dirección Física (PAE). Este es usualmente, pero no siempre, el caso para Linux. Muchas distribuciones ofrecen diferentes kernels, algunos con o sin la PAE activada; necesita escoger el correcto. Para verificar que su sistema este configurado correctamente, utilice el comando free en una terminal y examine la salida. Si la salida reporta menos RAM de la que tiene instalada, entonces tiene un problema que necesita ser corregido; por ejemplo, si tiene 4GB en su tarjeta, pero su kernel solo ve 3GB o menos. Necesita consultar su BIOS manualmente y la información sobre su variante de Linux para mas ayuda.

10.1.5. Configurando darktable en sistemas 32-bit

As we've seen 32-bit systems are difficult environments for darktable. Still some users are running darktable on them, if the basic requirements in terms of total system memory and the topics mentioned in the paragraphs above are addressed properly.

Hay varios ajustes que podemos hacer a los parámetros para que corra. Si tiene una instalación fresca, darktable detectará su sistema y ajustará valores conservadores por defecto. Sin embargo, si actualiza darktable desde una versión anterior (e.g. viniendo de 0.9.3 hacia 1.0), las posibilidades son que tenga unos ajustes desfavorables en sus preferencias. Las consecuencias pueden hacer que darktable aborte debido a fallas de asignación o – comúnmente – darktable no será capaz de importar un nuevo carrete apropiadamente. Un síntoma frecuente será la visualización de calaveras en vez de miniaturas para muchas de sus imágenes.

Si este es el caso, tome un minuto para optimizar los ajustes de sus preferencias. Los encontrará en el diálogo de preferencias de opciones básicas (Sección 8.2, “Opciones básicas”) en darktable. También puede encontrar estos parámetros como variables de configuración en $HOME/.config/darktable/darktablerc y editarlas.

Aquí tiene una corta explicación de los parámetros relevantes y sus ajustes propuestos:

número de hilos en segundo plano

This parameter defines the maximum number of threads that are allowed in parallel when importing film rolls or doing other background stuff. For obvious reasons on 32-bit systems you can only have one thread eating resources at a time. So you need set this parameter to 1; anything higher will kill you.

límite de memoria (en MB) para el proceso por bandas

Este parámetro le indica a darktable cuanta memoria (en MB) deberá asumir como disponible para almacenar los buffers de la imagen durante las operaciones de los módulos. Si una imagen no puede ser procesada dentro de estos límites en un solo pedazo, las bandas se ocuparán y procesarán la imagen en varias partes. Ajuste esto a lo mas bajo posible tomando 500 como punto de partida. Quizás experimente luego si puede incrementarlo un poco para reducir las bandas.

mínima cantidad de memoria (en MB) para un buffer de proceso en bandas

Este es un segundo parámetro que controla las bandas. Está ajustado a un límite bajo para el tamaño de buffers intermedios de la imagen en megabytes. El parámetro es necesario para evitar las bandas excesivas en ciertos casos (para algunos módulos). Ajuste este parámetro a un valor inferior a 8. Quizás luego quiera incrementarlo a 16.

memoria en megabytes para usar en la cache de las miniaturas

This controls how many thumbnails (or mip maps) can be stored in memory at a time. As a starting point set this to something like 256MB. Since darktable 2.0, the cache does allocate a few small buffers per each thumbnail in cache, thus causing significant memory fragmentation. As explained before, this poses a problem for 32-bit systems. For this reason, as of darktable 2.0, 32-bit support is soft-deprecated.

10.1.6. darktable en sistemas 64-bit

No hay mucho mas que decir. Claro que los sistemas 64-bit también requieren de una cantidad suficiente de memoria principal, así que la recomendación de los 4GB más la swap se mantiene verdadera. Por otra parte, las arquitecturas 64-bit no sufren de las limitaciones especificas de los 32-bit como el pequeño espacio de asignación y la locura de fragmentación.

La mayoría de los CPUs modernos Intel o AMD 64-bit tendrán un espacio de asignación disponible en el rango de varios Terabytes. La palabra moderno es relativa a este contexto: todos los CPUs AMD e Intel introducidos entre el 2003 y el 2004, respectivamente, ofrecen un modo 64-bit. Linux para 64-bit ha estado disponible por muchos años.

Todas las distribuciones relevante de Linux le dan la opción de instalar una versión 32-bit o 64-bit sin costos adicionales. Incluso puede correr binarios obsoletos de 32-bit en Linux 64-bit. Lo único que necesita hacer: invierta algo de tiempo en la migración. Al final, le recomendamos enérgicamente moverse a una versión 64-bit de Linux. Realmente no hay razón por la cual no actualizar a un 64-bit.

En un sistema 64-bit puede dejar de forma segura los parámetros de configuración para las bandas relacionadas como vienen por defecto: límite de memoria (en MB) para el proceso de bandas debería tener un valor de 1500 y el mínima cantidad de memoria (en MB) para un buffer único de proceso en bandas debería estar en 16. En caso de que migre de un sistema 32-bit a uno de 64-bit necesitará activar estos parámetros y cambiarlos manualmente en el diálogo de preferencias de darktable.

Típicamente no hay necesidad de restringir a uno mismo en el número de hilos en segundo plano sobre sistemas 64-bit. En un sistema multi-procesador, un número de dos a ocho hilos pueden acelerar la generación de miniaturas considerablemente versus un solo hilo. La razón no es tanto sobre tomar la mayor ventaja sobre los cores de su CPU – el pixelpipe de darktable los utiliza a todos en paralelo – sino esconder la latencia I/O.

Hay una excepción que vale la pena mencionar. Si utiliza darktable para procesar panoramas combinados, e.g. TIFFs generados por Hugin, estas imágenes pueden alcanzar tamaños considerables. Cada hilo en segundo plano necesita asignar suficiente memoria para mantener una imagen completa mas sus intermediarios y la salida en el buffer. Esto no funcionará incluso en sistemas de 64-bit bien equipados que se quedaron sin memoria. En ese caso, baje el número de hilos en segundo plano a solo uno.