баланс btrfs перестал работать из-за enospc ошибки

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

На практике программы имеют тенденцию выделять больше памяти, чем они используют. Например, виртуальная машина Java выделяет большую виртуальную память на запуске, но сразу не использует его. Память, считающая в ядре Linux, пытается компенсировать это путем отслеживания объема памяти, на самом деле используемого процессами, и превышает возможности объема виртуальной памяти. Другими словами, объем виртуальной памяти, выделенной ядром, может превысить объем физической памяти и области подкачки, объединенной в системе. В то время как это приводит к лучшему использованию физической памяти и области подкачки, оборотная сторона - то, что, когда сумма используемой памяти превышает объем физической памяти и доступной области подкачки, ядро должно так или иначе освободить ресурсы памяти для выполнения обязательства по выделению памяти.

Механизм ядра, который используется для исправления памяти для заполнения чрезмерных обязательств, называют out-of-memory-killer (OOM-уничтожитель). Обычно механизм начнет избавляться от процессов "жулика" памяти-hogging к свободному память для других процессов. Однако, если vm.panic_on_oom установка sysctl является ненулевой, ядро запаникует вместо этого, когда система исчерпает память.

Возможные значения для vm.panic_on_oom установка следующие:

  • 0 (значение по умолчанию), Когда ситуация из памяти возникнет, OOM-уничтожитель, уничтожит процесс жулика.

  • 1 Ядро обычно паникует, но если процесс, который достиг его предельного набора выделения памяти с mbind(MPOL_BIND) или cpuset, процесс уничтожается вместо этого.

  • 2 Ядро всегда паникует в ситуации из памяти.

Эвристика, используемая OOM-уничтожителем, может быть изменена через vm.oom_kill_allocating_task установка sysctl. Возможные значения следующие:

  • 0 (значение по умолчанию) OOM-уничтожитель просканирует через список задач и выберет задачу жулика задачи, использующую большую память для уничтожения.

  • 1 (ненулевой) OOM-уничтожитель уничтожит задачу, которая инициировала условие из памяти.

Память ядра бухгалтерский алгоритм может быть настроена с vm.overcommit_memory настройки sysctl. Возможные значения следующие:

  • 0 Эвристика (по умолчанию) принимает на себя непосильные обязательства со слабыми проверками.

  • 1 Всегда принимайте на себя непосильные обязательства, никакие проверки.

  • 2 Строгий учет, в этом режиме предел виртуального адресного пространства определяется значением vm.overcommit_ratio настройки согласно следующей формуле:

    virtual memory = (swap + physical memory * (overcommit_ratio / 100))
    

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

sysctl настройки могут быть проверены или изменены во времени выполнения с sysctl команда. Для внесения изменений постоянными, настройки могут быть записаны в /etc/sysctl.conf. Вышеупомянутые настройки также доступны через /proc/sys/vm интерфейс. Соответствующие файлы:

  • /proc/sys/vm/panic_on_oom

  • /proc/sys/vm/oom_kill_allocating_task

  • /proc/sys/vm/overcommit_memory

  • /proc/sys/vm/overcommit_ratio

4
16.10.2014, 19:48
1 ответ

Я решил пойти по пути btrfs вместо zfs для моего "NAS". Я тестировал и то, и другое раньше, и должен признать, что обнаружил, что ZFS намного лучше документирован, меня действительно соблазнил его интерфейс командной строки, поэтому для меня ZFS была «лучшим» выбором.

Но тут была остановка: если у вас есть 3 жестких диска по 2 ТБ для ZFS в RAID-5, и вы хотите увеличить их до 4 жестких дисков ТБ, это непросто. Если вы используете пул ZFS как 3HDD и хотите добавить новый жесткий диск, вам нужно добавить еще 3: всего 6x 2 ТБ. А если у вас есть 6HDD и вы хотите увеличить свою FS, вам нужно добавить еще 6 и т. Д. У меня была проблема, что мой корпус NAS не может вместить более 4 дисков, и что я пока не могу позволить себе покупать 4 жестких диска. В этом отношении Btrfs гораздо более гибок.

Однако, когда я только начинал, RAID-5/6 действительно плохо поддерживался. Я провел несколько тестов, как и вы, и в итоге повредил файловую систему. Я проделал те же тесты в RAID-1 и никаких проблем! Поэтому я решил использовать Btrfs в RAID-1, и вместо использования Ubuntu LTS я всегда использую последнюю версию Ubuntu, чтобы получить последнюю версию ядра и пакета btrfs-tools (я использую Ubuntu 15.04 и готовлюсь к переключению до 15.10). Я, вероятно (после тестирования), наконец, перейду на RAID-5, как только выйдет Ubuntu 16.04, и, вероятно, буду придерживаться его.В недавних журналах изменений ядра я видел, что кодовая база для RAID-5/6 намного более зрелая.

Итак, к вашей проблеме. Если вы хотите попробовать Btrfs, особенно в RAID-5 или 6, придерживайтесь самых последних дистрибутивов Linux (например, Arch Linux, последней версии Ubuntu, Fedora и т. Д.). Им может не хватать стабильности других дистрибутивов, но для Btrfs они, вероятно, намного более стабильны.

Одно замечание о вашем «варианте использования»: ваша файловая система Btrfs довольно мала по сравнению с размером файлов, которые вы вставляете. Вероятно, это не совсем хорошо отражает реальный сценарий. Вы должны создавать большие (видео) и маленькие файлы (фотографии, документы) и пытаться заполнить файловую систему до 80%. Один хороший способ проверить это - поместить много файлов в вашу файловую систему, а затем запустить тесты файловой системы, но не для самого тестирования, а из-за стресса, который они вызывают. Для этого можно использовать набор тестов phoronix (например, набор тестов phoronix, pts / disk ).

0
27.01.2020, 21:05

Теги

Похожие вопросы