Я использую файловые системы XFS в качестве разделов данных / роста в течение почти 10 лет на различных серверах Linux.
Я заметил странное явление в недавних серверах CentOS / RHEL с версией 6.2+.
Стабильное использование файловой системы стало очень изменчивым после перехода на новую версию ОС от EL6.0 и EL6.1. Системы, изначально установленные с EL6.2 +, демонстрируют то же поведение; показаны дикие колебания в использовании диска на разделах XFS (см. синюю линию на графике ниже).
До и после. Обновление с 6.1 до 6.2 произошло в субботу.
График использования диска в той же системе за последний квартал, показывающий колебания за последнюю неделю
Я начал проверять файловые системы на наличие больших файлов и процессов запуска (файлы журнала, может быть?). Я обнаружил, что мои самые большие файлы сообщают разные значения от du
и ls
. Работа du
с --apparent-size
переключателем и без него иллюстрирует разницу.
# du -skh SOD0005.TXT
29G SOD0005.TXT
# du -skh --apparent-size SOD0005.TXT
21G SOD0005.TXT
Быстрая проверка с использованием утилиты ncdu по всей файловой системе дала:
Total disk usage: 436.8GiB Apparent size: 365.2GiB Items: 863258
Файловая система полна разреженных файлов с почти 70 ГБ потерянного пространства по сравнению с предыдущей версией ОС / ядра!
Я просмотрел Red Hat Bugzilla и изменил журналы, чтобы посмотреть, есть ли какие-либо сообщения о том же поведении или новые объявления, касающиеся XFS.
Нада.
Я перешел с версии ядра 2.6.32-131.17.1.el6 на 2.6.32-220.23.1.el6 во время обновления; без изменений в младшем номере версии.
Я проверил фрагментацию файла с помощью filefrag
инструмента. Некоторые из самых больших файлов в разделе XFS имели тысячи экстентов. Работа в режиме онлайн-дефрагментации xfs_fsr -v
в течение медленного периода активности помогла временно сократить использование диска (см. Среду на первом графике выше). Однако использование возобновилось, как только возобновилась активная работа системы.
Что здесь происходит?
Ответы:
Я проследил эту проблему до обсуждения фиксации в дереве исходного кода XFS с декабря 2010 года. Патч был введен в ядре 2.6.38 (и, очевидно, позже был перенесен в некоторые популярные дистрибутивные ядра Linux).
Наблюдаемые колебания в использовании диска являются результатом новой функции; XFS Dynamic Specutive EOF Preallocation .
Это шаг к уменьшению фрагментации файлов во время потоковой записи за счет умозрительного распределения пространства по мере увеличения размеров файлов. Объем пространства, предварительно выделенный на файл, является динамическим и в основном зависит от свободного пространства, доступного в файловой системе (чтобы полностью исключить нехватку пространства).
Это следует за этим графиком:
Это интересное дополнение к файловой системе, поскольку оно может помочь с некоторыми из сильно фрагментированных файлов, с которыми я имею дело.
Дополнительное пространство может быть временно восстановлено путем освобождения кэша страниц, дентриев и инодов с помощью:
Эта функция может быть полностью отключена путем определения
allocsize
значения во время монтирования файловой системы. По умолчанию для XFS -allocsize=64k
.Влияние этого изменения, вероятно, будет ощущаться системами мониторинга / порогового управления (как я его и обнаружил), но оно также затронуло системы баз данных и могло привести к непредсказуемым или нежелательным результатам для виртуальных машин с тонким предоставлением и массивов хранения (они будут использовать больше места, чем вы ожидаете).
В общем, это застало меня врасплох, потому что не было четкого объявления об изменении файловой системы на уровне распространения или даже при мониторинге списка рассылки XFS .
Изменить :
Производительность на томах XFS с этой функцией значительно улучшена. Я наблюдаю постоянную <1% фрагментацию на томах, которые ранее отображали до 50% фрагментации. Производительность записи повысилась во всем мире!
Статистика из того же набора данных, сравнивая устаревшую XFS с версией в EL6.3.
Старый:
Новое:
источник
xfs_fsr
он вернулся примерно до 35 ГБ. Я должен следить за этим