января 10, 2019

darktable 2.4 > Специальные темы

ПРЕД.


Глава 10. Специальные темы

В этой главе затрагивается несколько технических тем, которые могут помочь вам запустить darktable на конкретном оборудовании или оптимизировать производительность. Много дополнительной технической справочной информации, советов и трюков описано в обширном разделе блога, который вы можете найти на домашней странице приложения [http://www.darktable.org].

10.1. Darktable и память

Требования к памяти у darktable высоки. Простой расчет сделает это понятным. Если у вас есть 20-мегапиксельное изображение, то darktable по соображениям точности в рамках работы приложения будет хранить каждый пиксель изображения как ячейку размером 4x32бит и использовать операции с плавающей точкой. Для каждого полного изображения такого размера потребуется около 300МБ памяти. Поскольку мы хотим обрабатывать изображение, нам понадобится, по крайней мере, два буфера для каждого модуля - один для ввода и один для вывода. Если у нас будет более сложный модуль, его алгоритм может дополнительно потребовать несколько промежуточных буферов того же размера. Без дальнейшей оптимизации, нам может потребоваться памяти между 600МБ и 3ГБ только для хранения и обработки данных изображения. Кроме того у нас есть программный код darktable, код и данные всех динамических системных библиотек, а также не забываем о дополнительных буферах, где darktable хранит промежуточные изображения для быстрого доступа во время работы (mip map cache). В общем, для работы darktable хотел бы видеть, как минимум 4ГБ, чтобы успешно запускаться

10.1.1. Объём системной памяти

Из того, что сказано ранее, очевидно, что вашему компьютеру нужна корректная настройка памяти для работы darktable. Мы рекомендуем вам иметь не менее 4ГБ физической оперативной памяти плюс 4-8ГБ в разделе (файле) подкачки. Последнее требуется, так как ваша система может временно разместить неиспользуемые данные на диск, чтобы освободить физическую память.

Теоретически вы можете запускать darktable с меньшим количеством физической оперативной памяти и сбалансировать недостающий объём памяти достаточным количеством в разделе (файле) подкачки. Тем не менее, вы должны быть готовы к тому, что ваша система может начать сильно "тормозить", поскольку она будет постоянно считывать или записывать страницы данных на жесткий диск и с него. Существуют положительные отзывы о том, что это неплохо работает у отдельных пользователей, но для других данный подход может стать чрезвычайно медленным и неприемлемым ...

10.1.2. Доступное адресное пространство

Помимо объёма системной памяти существует еще один ограничивающий фактор: доступное адресное пространство вашей аппаратной архитектуры. Сколько памяти может быть адресовано процессом зависит от количества выделяемых бит для адресов, предлагаемых вашим процессором. Для CPU с 32-разрядными адресными регистрами это 2^32 байта, что составляет в общей сложности 4ГБ. Это абсолютный верхний предел памяти, который может использоваться процессом, и это представляет собой сложную ситуацию для darktable, как мы видели выше.

Выход из сложившейся ситуации предоставляет технология тайлинга. Вместо обработки изображения одним большим фрагментом мы разбиваем его на более мелкие части (плитки или черепицу) для каждого этапа обработки (модуля). Для этого все равно требуется один полный буфер ввода и вывода, но промежуточные буферы могут быть достаточно маленькими, чтобы тем самым соответствовать аппаратным ограничениям.

Прим. переводчика: термин "тайлинг" в русском языке не относится к устоявшемуся термину, в различных источниках он может быть заменён терминами "плитка" или "черепица", иногда его оставляют без перевода "tiling".

10.1.3. Фрагментация памяти

К сожалению, это еще не всё. Существует эффект, называемый фрагментацией памяти, который возникает при работе программного обеспечения, которое требует масштабного управления памятью. Если такая программа выделяет 5 раз по 300 Мбайт за раз и снова освобождает ее, эта память обычно должна быть доступна для одного большого выделения на 1,5 ГБ после этого. Это, однако, часто бывает не так. Менеджер распределение памяти системы больше не может видеть эту область как один непрерывный блок в 1,5 ГБ, а только как ряд из областей по 300МБ. Если нет другой свободной области в 1,5ГБ, то распределение не произойдёт. Во время запуска программы данный механизм забирает все больше и больше блоков памяти в пользу блоков меньшего размера. В darktable 2.0 кэш миниатюр (mip map cache) выделяет несколько небольших блоков памяти для каждого миниатюры, поэтому эта проблема возрастает ещё больше. По этой причине, начиная с darktable 2.0, не рекомендуется использовать 32-разрядные системы.

10.1.4. Дополнительные ограничения

Как будто описанного ранее не было достаточно, но существуют дополнительные ограничения, которые могут ограничивать доступ к памяти. На некоторых старых материнских платах вам необходимо активировать опцию "memory remapping" в BIOS, чтобы включить всю физически установленную память. Кроме того, если вы используете 32-битную ОС, вам, вероятно, понадобится версия ядра, которая имеет технологию "Physical Address Extension" (PAE). Часто, но не всегда, это относится к дистрибутивам Linux. Многие дистрибутивы поставляют разные ядра, некоторые с поддержкой PAE, а некоторые без PAE и вам нужно выбрать правильный. Чтобы проверить правильность установки системы, используйте команду "free" в терминале и проверьте вывод. Если на выходе отображается меньше ОЗУ, чем вы установили, у вас есть проблема, требующая исправления; например, у вас установлено 4ГБ, но ваше ядро видит только 3ГБ или меньше. Чтобы получить дополнительную помощь, вам необходимо проконсультироваться с руководством по BIOS и информацией о вашем дистрибутиве Linux.

10.1.5. Настройка darktable на 32-битной системе

Как мы видели, 32-битные системы представляют собой сложную среду для darktable. Тем не менее, некоторые пользователи работают с darktable на них, если основные требования в отношении системной памяти и темы, упомянутые в разделах выше, рассматриваются надлежащим образом.

Для запуска приложения есть несколько параметров настройки. Если вы произведёте первичную установку приложения, то darktable определит тип вашей системы и установит консервативные значения по умолчанию. Однако если вы обновите darktable c более старой версии (например, с 0.9.3 и до 1.0), скорее всего, у вас будут неоптимальные настройки. Последствиями для darktable могут быть частые прерывания работы из-за сбоев в распределении памяти или, что наиболее типично, darktable будет неспособен должным образом импортировать новую съёмку. Как частый симптом вы будете видеть черепа вместо миниатюр для многих ваших фотографий.

Если это так, найдите минуту, чтобы оптимизировать настройки. Вы найдете их в разделе "Основные настройки" (раздел 8.2, "Основные настройки" ) в диалоговом окне настроек darktable. Вы также можете найти эти параметры в качестве переменных конфигурации в $HOME/.config/darktable/darktablerc (%homepath%\\AppData\\Local\\darktable\\darktablerc для ОС Windows) и редактировать их там.

Ниже приведено краткое описание соответствующих параметров и их настроек:

"Количество фоновых потоков"
Этот параметр определяет максимальное количество потоков, разрешенных выполняться параллельно при импорте съёмки или выполнении других фоновых операций. В 32-битных системах вы можете иметь только один поток. Поэтому вам нужно установить этот параметр в 1; значения выше приведут к краху.

"Максимальный объём памяти (в МБ) для мозаики"
Этот параметр сообщает darktable сколько памяти (в МБ) оно может выделить для хранения буферов изображений во время операций модуля. Если изображение не может быть обработано в этих пределах в одном фрагменте, то оно будет обрабатываться несколькими частями, одна часть за другой. Установите это значение в 500Мб в качестве отправной точки. Вы можете поэкспериментировать с параметром позже, возможно, вы немного его увеличите, чтобы уменьшить издержки на тайлинг.

"Минимальный объём буфера (в МБ) для мозаики"
Это второй параметр, контролирующий тайлинг. Он устанавливает нижний предел размера промежуточных буферов изображений в мегабайтах. Параметр необходим, чтобы избежать чрезмерного деления изображения на фрагменты в некоторых случаях (для некоторых модулей). Установите этот параметр в значение 8МБ. Вы можете, при необходимости, увеличить его до 16МБ позже.

"Память в мегабайтах для кэша миниатюр"
Определяет, сколько миниатюр может храниться в памяти одновременно. В качестве отправной точки установите примерно на 256МБ. Начиная с darktable 2.0, кэш выделяет несколько небольших буферов на каждую миниатюру, что вызывает значительную фрагментацию памяти. Как объяснялось ранее, это создает проблемы для 32-битных систем. По этой причине, начиная с darktable 2.0, не рекомендуется использовать 32-разрядные системы.

10.1.6. Darktable на 64-битных системах

Здесь особо сказать нечего. Конечно, для 64-битных систем требуется достаточное количество системной памяти, поэтому рекомендуем минимум 4ГБ плюс настройку раздела (файла) подкачки. С другой стороны, 64-разрядная архитектура не страдает от ограничений присущим 32-битным архитектурам, таким как небольшое адресное пространство и фрагментация.

Большинство современных 64-разрядных процессоров Intel или AMD будут иметь доступное адресное пространство в диапазоне до нескольких терабайт. Под словом "современные" в этом контексте понимает, все процессоры AMD и Intel, выпущенные с 2003 и 2004 года, соответственно, и предлагающие 64-разрядный режим. Дистрибутивы Linux 64-бит доступны уже много лет.

Все соответствующие дистрибутивы Linux дают вам возможность установить 32-разрядную или 64-разрядную версию без дополнительных затрат. Вы даже можете запускать старые 32-разрядные двоичные файлы в 64-разрядной Linux. Единственное, что вам нужно сделать: потратить некоторое время на миграцию. В конце концов, мы настоятельно рекомендуем перейти на 64-разрядную версию Linux. На самом деле нет причин не обновляться.

В 64-разрядной системе вы можете спокойно оставить параметры конфигурации, связанные с тайлингом, по умолчанию: "Максимальный объём памяти (в МБ) для мозаики" имеет значение 1500МБ и "Минимальный объём буфера (в МБ) для мозаики" установлено на 16МБ. Если вы переходите от 32-разрядной к 64-разрядной системе, вам нужно будет проверить эти параметры и вручную изменить их, если необходимо, в диалоге настроек darktable.

Как правило, нет необходимости ограничивать себя количеством фоновых потоков в 64-битной системе. В многопроцессорной системе число от двух до восьми потоков может значительно ускорить создание миниатюр против одного потока. Причина заключается не в том, чтобы максимально использовать все ядра процессора, darktable их и так использует в пиксельном конвейере параллельно, но в скрытии задержки операций ввода-вывода.

Одно исключение стоит упомянуть. Если вы используете darktable для обработки сшитых панорам, например TIFF, созданных Hugin, то эти изображения могут достигать значительных размеров. Каждый фоновый поток должен выделять достаточное количество памяти для буферов хранения одного полного изображения, плюс промежуточные результаты и вывод. Это может быстро привести к нехватке памяти даже в хорошо оборудованной 64-битной системе. В этом случае уменьшите количество фоновых потоков до одного.

Комментариев нет:

Отправить комментарий