memória

Os requisitos de memória do darktable são altos. Um cálculo simples torna isto claro. Se você tiver uma imagem de 20MPx então, por motivo de precisão, o darktable armazenará esta imagem internamente como uma célula de ponto flutuante de 4 x 32 bits para cada pixel. Para tanto, cada imagem completa deste tamanho precisará de uns 300MB de memória. Como queremos processar a imagem, precisaremos ao menos de búferes para cada módulo, um para entrada e outro para saída. Se tivermos um módulo complexo, seu algoritmo pode exigir adicionalmente diversos búferes intermediários do mesmo tamanho. Sem uma maior otimização, precisaremos de algo entre 600 MB e 3 GB simplesmente para armazenar os dados processados das imagens. Além disso, teremos o segmento de código do darktable, o código e os dados de todas as bibliotecas de sistema vinculadas dinamicamente e, para não esquecer, mais búferes aonde o darktable armazena imagens intermediárias para um acesso rápido durante o trabalho interativo (cache de mapa mip).

Com tudo isso, o darktable precisa de um mínimo de 4GB de memória para funcionar corretamente.

🔗memória total do sistema

A partir da análise anterior, é evidente que seu computador precisa de uma configuração de memória sensata para executar corretamente o darktable. Nós sugerimos que tenha pelo menos 4 GB de RAM física e mais de 4 a 8 GB de memória de troca (swap) adicional instalada.

Teoricamente, você poderia executar o darktable com menores quantidades de RAM física e equilibrar com espaço de memória de troca suficiente. No entanto, isto pode fazer com que o sistema “trave”, já que ele lê e escreve páginas de dados para e do disco rígido. Possuímos relatos positivos de que isto funciona bem para diversos usuários, mas pode causar extrema lentidão para outros. Uma unidade de estado sólido (SSD) pode aliviar um pouco este problema.

🔗espaço de endereçamento disponível

Além da quantidade total de memória de sistema, existe outro fator limitador: o espaço de endereçamento disponível da arquitetura de hardware. Quanto de memória pode ser endereçada por um processador depende do número de bits de endereçamento que sua CPU oferece. Para uma CPU com registradores de 32 bits para endereçamento, isto equivale à 2^32 bytes, o que leva a um total de 4 GB. Este é um limite superior absoluto de memória que pode ser usada por um processador e constitui uma situação difícil para o darktable como vimos anteriormente.

A rota de escape do darktable se chama mosaico. Ao invés de processar uma imagem em um grande todo, o darktable divide a imagem em partes menores para cada módulo de processamento. Isto ainda requer bufer de entrada e saída completo, mas os búferes intermediários podem ser pequenos o bastante para caber completamente dentro dos limites do hardware.

🔗fragmentação de memória

Infelizmente isto ainda não é o fim da história. Um efeito, chamado fragmentação de memória, pode afetar e afetará todo software que precisa realizar um gerenciamento extenso da memória. Se um programa deste tipo aloca 5 vezes 300 MB de cada vez e libera-os em seguida, esta memória normalmente deveria estar disponível para uma grande atribuição de 1,5 GB depois. No entanto, isto frequentemente não ocorre assim. O alocador de memória do sistema pode não ver mais esta área como um bloco contínuo de 1,5 GB mas uma linha de áreas de 300 MB separadas. Se não existir outra área de 1,5 GB disponível, uma alocação subsequente irá falhar. Durante a execução do programa, este mecanismo eliminará cada vez mais blocos de memória maiores em favor dos menores. O cache de mapas mip do darktable atribui vários blocos de memória pequenos por miniatura, sendo por isto este problema ainda maior. Por esta razão, a partir do darktable 2.0, o suporte a sistemas de 32 bits está obsoleto.

🔗outras limitações

Como se isto não fosse suficientemente desafiante, existem outras coisas que podem limitar o acesso do darktable à memória do sistema. Em algumas placas antigas, é necessário ativar a opção de BIOS “mapeamento de memória” para habilitar toda a memória instalada fisicamente. Além disso, se você estiver em um sistema de 32 bits, você provavelmente precisará de uma versão do kernel que tenha a “Extensão de Endereçamento Físico” (PAE, sigla em inglês) ativada. Isto é comum mas nem sempre o caso para o Linux. Muitas distribuições entregam diferentes kernels, alguns sem que o PAE esteja ativado. Você deve escolher o correto. Para verificar se o sistema está configurado corretamente, use o comando “free” no terminal e examine a saída. Se a saída reportar menos RAM do que você tem instalado, você tem um problema a ser corrigido. Por exemplo, você possui 4 GB na placa mas seu kernel enxerga 3 GB ou menos. Você deve consultar o manual do BIOS e as informações sobre sua distribuição Linux para mais ajuda.

🔗configurar o darktable em sistemas de 32 bits

Como vimos, sistemas de 32 bits são ambientes difíceis para o darktable. Ainda assim, alguns usuários podem usar o darktable neles, se os requisitos básicos em termos de memória total e os tópicos abordados nos parágrafos anteriores forem tratados apropriadamente.

Há muitos parâmetros que precisam de ajuste para que o darktable funcione. Se você instalar o darktable do zero, ele detectará o sistema e determinará valores conservadores por padrão. No entanto, se você atualiza o darktable a partir de uma versão mais antiga, é possível que tenha valores desfavoráveis em suas preferências. As consequências podem incluir o darktable abortando a execução devido a falhas de alocação ou – muito tipicamente – não sendo capaz de importar um rolo de filme apropriadamente. Como sintoma frequente você obtém caveiras exibidas ao invés de miniaturas para muitas de suas imagens.

Se este for o caso, gaste um minuto para otimizar suas configurações. Você encontrará em preferências > processamento > cpu/gpu/memória as opções necessárias.

Aqui está uma breve explanação dos parâmetros relevantes e suas configurações propostas:

número de subprocessos em segundo plano
Este parâmetro define o número máximo de subprocessos que são permitidos executar em paralelo ao importar rolos de filme ou realizar outras tarefas em segundo plano. Por razões óbvias, em sistemas de 32 bits você pode ter um subprocesso consumindo recursos por vez. Assim você precisa definir este parâmetro para 1; qualquer coisa maior vai piorar o desempenho.
limite de memória (em MB) para processamento de ladrilhos
Este parâmetro diz ao darktable quanto de memória (em MB) ele deve assumir como disponível para armazenar búferes de imagem durante as operações dos módulos. Se uma imagem não puder ser processada dentro destes limites em um bloco único, o mosaico será utilizado e o processamento da imagem ocorrerá em diversas partes, uma de cada vez. Defina isto para o menor valor possível (500) como ponto de partida. Você pode experimentar novos valores mais tarde se ao aumentar você reduzir a sobrecarga do processamento em ladrilhos.
mínimo de memória (em MB) para processamento de ladrilhos em buffer único
Este é um segundo parâmetro que controla o processamento em ladrilhos. Isto define um limite inferior para o tamanho dos búferes intermediários de imagem. O parâmetro é necessário para evitar um mosaico excessivo em alguns casos (para alguns módulos). Estabeleça neste parâmetro um valor abaixo de 8. Você pode aumentar, por tentativas, até 16 ou superior.
memória em MB usada para o cache de miniaturas
Isto controla quantas miniaturas (ou mapas mip) podem ser armazenadas na memória ao mesmo tempo. Como ponto de partida, defina algo como 256 MB. Desde o darktable 2.0, a cache aloca poucos búferes pequenos por miniatura, o que provoca significativa fragmentação de memória. Como explicado anteriormente, isto pode ser um problema para os sistemas de 32 bits. Por este motivo, a partir do darktable 2.0, o suporte ao 32 bits está obsoleto.

🔗darktable em sistemas de 64 bits

Não há muito o que ser dito aqui. É claro que sistemas de 64 bits também precisam de uma quantidade suficiente de memória principal, assim a recomendação dos 4 GB mais memória de troca (swap) é válida. Por outro lado, as arquiteturas de 64 bits não sofrem das limitações específicas de 32 bits como o pouco espaço de endereçamento e a loucura da fragmentação.

A maioria das CPU modernas da Intel ou AMD de 64 bits terão um espaço de endereçamento disponível em um intervalo de vários Terabytes. A palavra “moderno” é relativa neste contexto: todas as CPUs AMD e Intel introduzidas a partir de 2003 e 2004, respectivamente, oferecem um modo de 64 bits. O Linux de 64 bits já está disponíveis há vários anos.

Todas as distribuições Linux relevantes fornecem a opção para instalar uma versão de 32 ou 64 bits sem nenhum custo adicional. Você pode rodar binários antigos de 32 bits no Linux de 64 bits. A única coisa que você precisa fazer é investir algum tempo na migração. No final, nós recomendamos fortemente passar para uma versão de 64 bits do Linux. Realmente não há razão para não fazê-lo.

Em um sistema de 64 bits, você pode com segurança deixar os parâmetros de configuração relacionados ao processamento em ladrilhos com seus valores padrão: “limite de memória (em MB) para processamento de ladrilhos” deve ter um valor de 1500 e o “mínimo de memória (em MB) para processamento de ladrilhos em buffer único” deve estabelecer-se em 16. Se você está migrando de um sistema de 32 bits para um de 64 bits, você deverá verificar estas configurações e alterá-las manualmente se for necessário na janela de preferências do darktable.

Em geral, não é necessário restringir o número de subprocessos no plano de fundo em um sistema de 64 bits. Em um sistema multiprocessado, um número de dois à oito subprocessos pode acelerar consideravelmente a geração de miniaturas quando comparado ao uso de somente um subprocesso. A razão para isto não é tanto aproveitar o máximo das vantagens dos núcleos da sua CPU - a pixelpipe do darktable usa todos eles em paralelo de qualquer maneira - mas ocultar a latência de entrada e saída.

Vale a pena mencionar uma exceção. Se você usa o darktable para processar panoramas (por exemplo, TIFF gerados pelo Hugin), estas imagens podem alcançar tamanhos consideráveis. Cada subprocesso de segundo plano precisa alocar memória suficiente para manter uma imagem completa mais as intermediárias e de saída em seus búferes. Isto pode rapidamente fazer com que até mesmo sistemas de 64 bits bem equipados fiquem sem memória. Neste caso, diminua o número de subprocessos em segundo plano para apenas um.

translations