Назад | Перейти на главную страницу

В 8 раз медленнее кошка для тех же файлов на том же диске, но в другом каталоге

У меня проблема с доступом к набору файлов в 8 раз медленнее по сравнению с теми же файлами в другом каталоге на Linux-машине.

Файловая система представляет собой файловую систему RAID-5 объемом 36 ТБ, экспортированную с Dell PERC H810, и отформатированную с помощью ext4. У машины 256 ГБ оперативной памяти, и я использую OpenSuSE 12.3 с ядром 3.7.10-1.45-desktop.

Проблема проявляется в чем-то простом, например «time cat slowdir / *> / dev / null», но «time cat fastdir / *> / dev / null» примерно в 8 раз быстрее. Я очищаю кеш ввода-вывода между тестами (echo 3> / proc / sys / vm / drop_caches), так что это не должно влиять на мои результаты.

И slowdir, и fastdir находятся в одной файловой системе и в одном родительском каталоге.

Вот еще несколько странностей в этой проблеме. Если я сделаю следующее, проблема не исчезнет в новом каталоге alsoslowdir:

Но если я создам новый каталог alsofastdir и скопирую в него все файлы, то с помощью этого метода это будет в 8 раз быстрее:

Все файлы имеют размер от 7 до 15 МБ в каждом из каталогов, и есть несколько тысяч файлов, всего в каталоге 58 ГБ.

Я проверил статистику / usr / sbin / filefrag для всех файлов в быстром и медленном каталогах, и все они имеют 1 или 2 экстента с примерно одинаковым количеством 1 и 2 экстентов между ними.

Что мне не хватает?

При условии, что структура каталогов абсолютно одинакова (и вы действительно должны это проверить), ваши результаты могут быть искажены из-за кеширования (как на уровне контроллера, так и на уровне ОС) и / или сильно различающейся компоновки физического диска для двух каталогов.

Попробуй это:

  1. убедитесь, что у вас есть двоичный файл iostat (обычно это часть пакета sysstat)
  2. аннулировать кеш PERC путем выпуска
    dd if=/dev/zero of=bigfile bs=4k count=1M oflag=direct; sync
  3. сделать недействительным кеш ОС, выполнив
    sync; echo 3 > /proc/sys/vm/drop_caches
  4. сбор статистики диска выдача
    iostat -x -k 5 > stat.txt & cat dir/* > /dev/null; killall iostat
  5. повторите все эти шаги для другого каталога, загрузите статистику диска (для обоих каталогов) и позвольте мне их увидеть

В своем «быстром» тесте вы показали, что копируете рекурсивно: cp -r slowdir alsoslowdir

В вашем «медленном» тесте вы копировали не с рекурсивным флагом, а с подстановочным знаком: cp slowdir / * alsofastdir /

Есть ли у вас подкаталоги в slowdir? Не на 100% уверен, что подстановочный знак также включает подкаталоги, но я вполне уверен, что это не так, и распространяется только на все соответствующие «объекты» в каталоге, что означает, что подкаталоги останутся пустыми.

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

Если это ни к чему не приведет ... Может быть, просто добавить слово «быстро» ко всем именам каталогов? (j / k) Попробуйте найти хороший инструмент для тестирования производительности - cat действительно не лучший метод для измерения IMO. Найдите инструмент, который позволяет настраивать потоки, размер ввода / вывода, сочетание чтения / записи и т. Д. С тестами, выполняемыми для определенного файла (извините, в данный момент не приходят в голову конкретные названия инструментов).

Кстати, что заставило вас протестировать производительность отдельных каталогов, как вы? Я уверен, что вы столкнулись с каким-то странным поведением, чтобы начать это ...