Я бегал Файловые системы 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).
Наблюдаемые колебания в использовании диска являются результатом новой функции; Предварительное размещение динамических спекулятивных EOF в XFS.
Это шаг для уменьшения фрагментации файлов во время потоковой записи путем спекулятивного выделения места по мере увеличения размера файлов. Объем пространства, предварительно выделенного для каждого файла, является динамическим и в первую очередь зависит от свободного пространства, доступного в файловой системе (чтобы предотвратить полное исчерпание пространства).
Он следует этому графику:
freespace max prealloc size
>5% full extent (8GB)
4-5% 2GB (8GB >> 2)
3-4% 1GB (8GB >> 3)
2-3% 512MB (8GB >> 4)
1-2% 256MB (8GB >> 5)
<1% 128MB (8GB >> 6)
Это интересное дополнение к файловой системе, так как оно может помочь с некоторыми сильно фрагментированными файлами, с которыми я имею дело.
Дополнительное пространство можно временно освободить, освободив кеш страницы, dentries и inode с помощью:
sync; echo 3 > /proc/sys/vm/drop_caches
Эту функцию можно полностью отключить, указав allocsize
значение во время монтирования файловой системы. По умолчанию для XFS allocsize=64k
.
Воздействие этого изменения, вероятно, будет ощущаться системами мониторинга / определения пороговых значений (именно так я это заметил), но оно также повлияло на системы баз данных и может привести к непредсказуемым или нежелательным результатам для виртуальных машин и массивов хранения с тонким предоставлением (они будут использовать больше места, чем вы ожидаете).
В общем, это застало меня врасплох, потому что не было четкого объявления об изменении файловой системы на уровне распространения или даже при мониторинге Список рассылки XFS.
редактировать:
Производительность томов XFS с этой функцией значительно улучшена. Я вижу постоянную фрагментацию <1% на томах, которые ранее отображали фрагментацию до 50%. Производительность записи повысилась во всем мире!
Статистика из того же набора данных при сравнении устаревшей XFS с версией в EL6.3.
Старый:
# xfs_db -r -c frag /dev/cciss/c0d0p9
actual 1874760, ideal 1256876, fragmentation factor 32.96%
Новое:
# xfs_db -r -c frag /dev/sdb1
actual 1201423, ideal 1190967, fragmentation factor 0.87%