У меня есть проблема, где я имею 8x более медленный доступ к ряду файлов по сравнению с теми же файлами в другом каталоге на машине Linux.
Файловая система является файловой системой RAID-5 на 36 ТБ, экспортируемой из PERC H810 Dell, и она отформатирована с ext4. Машина имеет 256 ГБ RAM, и я использую OpenSuSE 12.3 с 3.7.10-1.45-настольным ядром.
Проблема замечена с чем-то простым как "кошка времени slowdir /*>/dev/null", но "кошка времени fastdir /*>/dev/null" о 8x быстрее. Я очищаюсь, кэш IO между тестами (отзовитесь эхом 3>/proc/sys/vm/drop_caches), так, чтобы не должен был влиять на мои результаты.
И slowdir и fastdir находятся в той же файловой системе и том же родительском каталоге.
Вот еще некоторые причуды о проблеме. Если я делаю следующее, проблема сохраняется в новом каталоге, alsoslowdir:
Но, если я делаю новый каталог, alsofastdir, и копирую все файлы в него, затем это 8x быстрее с этим методом:
Все файлы между 7 и 15 МБ в каждом из каталогов и существует несколько тысяч файлов с в общей сложности 58 ГБ в dir.
Я проверил/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) Посмотрите в поиске хорошего инструмента тестирования производительности, хотя - кот действительно не является хорошим методом для измерения IMO. Найти инструмент, который позволяет регулировать потоки, I / O размер, чтение / запись смеси и т.д. с тестами, выполняемыми на конкретном файле (к сожалению, на данный момент не приходят на ум конкретные имена инструментов).
Кстати - что даже привело вас к тестированию производительности в отдельных каталогах, как вы делаете? Уверен, что для начала вы столкнулись с каким-то странным поведением...