У меня проблема с доступом к набору файлов в 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 экстентов между ними.
Что мне не хватает?
При условии, что структура каталогов абсолютно одинакова (и вы действительно должны это проверить), ваши результаты могут быть искажены из-за кеширования (как на уровне контроллера, так и на уровне ОС) и / или сильно различающейся компоновки физического диска для двух каталогов.
Попробуй это:
dd if=/dev/zero of=bigfile bs=4k count=1M oflag=direct; sync
sync; echo 3 > /proc/sys/vm/drop_caches
iostat -x -k 5 > stat.txt & cat dir/* > /dev/null; killall iostat
В своем «быстром» тесте вы показали, что копируете рекурсивно: cp -r slowdir alsoslowdir
В вашем «медленном» тесте вы копировали не с рекурсивным флагом, а с подстановочным знаком: cp slowdir / * alsofastdir /
Есть ли у вас подкаталоги в slowdir? Не на 100% уверен, что подстановочный знак также включает подкаталоги, но я вполне уверен, что это не так, и распространяется только на все соответствующие «объекты» в каталоге, что означает, что подкаталоги останутся пустыми.
Вы можете захотеть повторить тест и убедиться с абсолютной уверенностью, что данные, содержащиеся в каждом каталоге, идентичны.
Если это ни к чему не приведет ... Может быть, просто добавить слово «быстро» ко всем именам каталогов? (j / k) Попробуйте найти хороший инструмент для тестирования производительности - cat действительно не лучший метод для измерения IMO. Найдите инструмент, который позволяет настраивать потоки, размер ввода / вывода, сочетание чтения / записи и т. Д. С тестами, выполняемыми для определенного файла (извините, в данный момент не приходят в голову конкретные названия инструментов).
Кстати, что заставило вас протестировать производительность отдельных каталогов, как вы? Я уверен, что вы столкнулись с каким-то странным поведением, чтобы начать это ...