пам’ять

Вимоги до пам’яті darktable високі. Простий розрахунок дає зрозуміти це. Якщо у вас зображення розміром 20 Мп, то з міркувань точності обробки darktable буде зберігати піксель як 4 х 32-бітову комірку з рухомою крапкою. Отже, на кожне повне зображення такого розміру буде потрібно близько 300 МБ пам’яті. Оскільки ми хочемо обробити зображення, нам знадобляться принаймні два буфери для кожного модуля – один для входу та один для виходу. Якщо ми маємо більш складний модуль, його алгоритм може додатково вимагати кілька проміжних буферів того ж розміру. Без подальшої оптимізації потрібно від 600 МБ до 3 ГБ просто для зберігання та обробки даних зображення. Крім того, у нас є сегмент коду darktable, код та дані всіх динамічно зв’язаних системних бібліотек, і, не забуваймо, додаткові буфери, де darktable зберігає проміжні зображення для швидкого доступу під час інтерактивної роботи (кеш mip map).

Загалом, для darktable потрібно мінімум близько 4 Гб пам’яті, щоб вона працювала успішно.

🔗загальна системна пам’ять

З вищезазначеного аналізу видно, що для належного запуску darktable вашому комп’ютеру потрібен розумний обсяг пам’яті. Ми радимо, щоб у вас було принаймні 4 ГБ фізичної оперативної пам’яті плюс 4–8 ГБ додатково віртуальної пам’яті (файлу чи розділу підкачування сторінок).

Теоретично, ви можете запустити darktable з меншим обсягом фізичної оперативної пам’яті та збалансувати це, маючи достатньо віртуальної. Однак це може призвести до того, що ваша система буде “пробуксовувати”, оскільки вона записує сторінки даних на жорсткий диск і читає з нього. Ми маємо позитивні повідомлення про те, що це добре працює для кількох користувачів, але для інших все одно може стати надзвичайно повільним. Твердотільний (SSD) накопичувач може трохи полегшити біль.

🔗доступний адресний простір

Окрім загального обсягу системної пам’яті, є ще один обмежуючий фактор: доступний адресний простір вашої апаратної архітектури. Скільки пам’яті може бути адресовано процесом, залежить від кількості адресних бітів, які пропонує ваш процесор. Для центрального процесора з 32-розрядними адресними регістрами це 2^32 байти, що становить 4 ГБ. Це абсолютна верхня межа пам’яті, яка може використовуватися процесом, і вона створює важку ситуацію для darktable, як ми бачили вище.

Шлях втечі darktable називається “тайлінгом”. Замість того, щоб обробляти зображення одним великим шматком, darktable розбиває зображення на менші частини для кожного модуля обробки. Для цього все ще потрібен один повний вхідний та вихідний буфер, але проміжні буфери можна зробити досить малими, щоб вмістити все в межі, які накладає обладнання.

🔗фрагментація пам’яті

На жаль, це ще не вся історія. Ефект, який називається фрагментацією пам’яті, може вразити програмне забезпечення з великою кількістю операцій виділення пам’яті. Якщо така програма виділяє 5 разів по 300 МБ за раз і звільняє її знову, ця пам’ять, як правило, повинна бути доступна для одного великого виділення 1.5 ГБ згодом. Однак це часто не так. Розподільник пам’яті системи може більше не розглядати цю область як один суміжний блок на 1.5 ГБ, а як ряд окремих областей на 300 МБ. Якщо іншої вільної області розміром 1.5 ГБ немає, подальше виділення не вдасться. Під час роботи програми цей механізм забирає все більше і більше більших блоків пам’яті на користь менших. mipmap-кеш darktable виділяє кілька невеликих блоків пам’яті на мініатюру, тому ця проблема ще більша. З цієї причини, починаючи з darktable 2.0, 32-бітна підтримка оголошена застарілою.

🔗подальші обмеження

Є й інші речі, які можуть обмежити доступ darktable до пам’яті. На деяких старих материнських платах потрібно активувати опцію BIOS “відображення пам’яті”, щоб увімкнути всю фізично встановлену пам’ять. Окрім того, якщо ви працюєте в 32-розрядній ОС, вам, ймовірно, знадобиться версія ядра, в якій увімкнено “Physical Address Extension” (PAE). Багато дистрибутивів Linux постачають різні ядра, деякі з активованим PAE, а інші без нього; потрібно вибрати правильне. Щоб перевірити, чи правильно налаштована система, використовуйте команду “free” в терміналі та вивчіть результати. Якщо повідомляється про менший обсяг оперативної пам’яті, ніж ви встановили, у вас виникла проблема, яка потребує виправлення; наприклад, у вас на платі 4 ГБ, але ваше ядро бачить лише 3 ГБ або менше. Вам слід звернутися до посібника BIOS та інформації про ваш варіант Linux для подальшої допомоги.

🔗налаштування darktable на 32-бітних системах

Як ми вже бачили, 32-бітні системи є складним середовищем для darktable. Досі деякі користувачі використовують на них darktable, якщо основні вимоги щодо загальної системної пам’яті та тем, згаданих у пунктах вище, були належним чином задоволені.

Існує декілька параметрів, які вимагають коригування для забезпечення нормальної роботи. Свіжовстановлений darktable виявить вашу систему та встановить консервативні значення за замовчуванням. Однак, якщо ви оновите darktable зі старої версії, швидше за все, у вас вже є налаштування, які стануть неоптимальними для роботи в умовах обмежених ресурсів. Наслідками можуть бути переривання darktable через помилки виділення пам’яті або – дуже типово – неможливість належним чином імпортувати нову плівку. Як частий симптом для багатьох ваших зображень замість мініатюр відображаються черепи.

Якщо це так, знайдіть хвилину, щоб оптимізувати свої налаштування. Ви знайдете їх у налаштування > cpu/gpu/пам’ять.

Ось коротке пояснення відповідних параметрів та запропонованих налаштувань:

кількість фонових потоків
Цей параметр визначає максимальну кількість потоків, які можуть виконуватися паралельно під час імпорту плівки або виконання інших фонових завдань. З очевидних причин у 32-розрядних системах ви можете одночасно мати лише один потік, який споживає ресурси. Тому вам потрібно встановити для цього параметра значення 1; все, що вище, вб’є вас.
обмеження пам’яті хоста (в МБ) для тайлінгу
Цей параметр повідомляє darktable, який обсяг пам’яті (у МБ) слід вважати доступним для зберігання буферів зображень під час роботи модуля. Якщо повне зображення неможливо обробити в цих межах, буде увімкнено тайлінг, який оброблятиме його в декількох частинах, одну за одною. В якості початкової точки встановіть для цього параметра мінімально можливе значення 500. Пізніше ви можете поекспериментувати, чи зможете ви трохи збільшити його, щоб зменшити накладні витрати на тайлінг.
мінімальний обсяг пам’яті (в МБ) для одного буфера тайлінгу
Це другий параметр, який контролює тайлінг. Він встановлює нижню межу розміру проміжних буферів зображень у мегабайтах. Параметр необхідний, щоб уникнути надмірного тайлінгу в деяких випадках (для деяких модулів). Встановіть для цього параметра низьке значення 8. Ви можете спробувати збільшити його до 16 пізніше.
розмір кешу мініатюр (в мегабайтах)
Це визначає, скільки мініатюр можна одночасно зберігати в пам’яті. Як початкову точку встановіть це приблизно на 256 МБ. Починаючи з darktable 2.0, кеш виділяє кілька невеликих буферів на мініатюру в кеші, що спричиняє значну фрагментацію пам’яті. Як пояснювалося раніше, це створює проблему для 32-розрядних систем. З цієї причини, починаючи з darktable 2.0, 32-розрядна підтримка оголошена застарілою.

🔗darktable на 64-бітних системах

Тут мало що сказати. Звичайно, 64-розрядні системи також потребують достатньої кількості основної пам’яті, тому рекомендація щодо 4 ГБ плюс віртуальна пам’ять має силу. З іншого боку, 64-розрядні архітектури не страждають від специфічних 32-розрядних обмежень, таких як малий адресний простір та божевілля фрагментації.

Більшість сучасних 64-розрядних процесорів Intel або AMD матимуть доступний адресний простір в межах декількох терабайт. Слово “сучасний” є відносним у цьому контексті: усі процесори AMD та Intel, представлені відповідно з 2003 та 2004 років, пропонують 64-розрядний режим. 64-розрядна версія Linux доступна вже багато років.

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

У 64-розрядній системі ви можете безпечно залишити параметри конфігурації, пов’язані з тайлінгом, за замовчуванням: “обмеження пам’яті хоста (в МБ) для тайлінгу” має мати значення 1500, а “мінімальний обсяг пам’яті (в МБ) для одного буфера тайлінгу” має бути встановлено на 16. Якщо ви переходите з 32-розрядної на 64-розрядну систему, вам потрібно буде перевірити ці налаштування та вручну змінити їх, якщо потрібно, у діалоговому вікні налаштування darktable.

Зазвичай немає необхідності обмежувати кількість фонових потоків у 64-розрядній системі. У багатопроцесорній системі число від двох до восьми потоків може значно пришвидшити генерацію мініатюр порівняно з лише одним потоком. Причина полягає не стільки в тому, щоб максимально скористатися всіма ядрами вашого процесора – конвеєр darktable все одно використовує їх усі паралельно, але в тому, щоб потоки готували дані під час затримки вводу-виводу.

Варто згадати один виняток. Якщо ви використовуєте darktable для обробки зшитих панорам (наприклад, TIFF, створених програмою Hugin), ці зображення можуть досягати значних розмірів. Кожен фоновий потік повинен виділити достатньо пам’яті, щоб зберегти одне повноцінне зображення, а також проміжні результати та вихідне зображення в буферах. Це може швидко призвести до того, що навіть у добре обладнаної 64-розрядної системи закінчиться пам’ять. У цьому випадку зменште кількість фонових потоків до лише одного.

Translations