S
S
Sergey Pugovkin2020-08-05 23:33:49
linux
Sergey Pugovkin, 2020-08-05 23:33:49

Does the number of files in a directory affect the speed of writing (creating new files) in ext4?

Does the number of files in a directory affect the speed of writing (creating new files) in ext4?
Listing doesn't matter.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Saboteur, 2020-08-06
@Driver86

Affects, but depending on how many files. File hashes are indexed, so you can find the file pretty quickly.
The difference between 100 and 1000 files will be minimal (less than a percent).
The difference between 100 and 1.000.000 files will be slightly noticeable, but only until the blocks containing the directory are cached in memory.
Compared to ext3, ext4 is VERY much optimized for dealing with a lot of files.
Below , edo1h provided an example test, but it incorrectly used an external command, getting the main load on the processor, not on the disk. My comment was too long, so I decided to add it to the answer:

spoiler
Давайте померяем еще раз вашим скриптом, а потом более правильным:
$ test() { for A in `seq 1 10000`; do touch $RANDOM.$RANDOM.$A; done }
$ time test
real 0m8.406s
user 0m5.939s
sys 0m2.548s
$ time test
real 0m7.943s
user 0m5.699s
sys 0m2.333s
$ time test
real 0m7.929s
user 0m5.647s
sys 0m2.369s
Как мы видим, ничего особо не видно. Непонятно быстрее или медленнее. Вдобавок user time занимает основную часть времени и видимо сильно влияет на результат.
Перепишем скрипт:
$ test1() { for A in `seq 1 10000`; do echo "" > $RANDOM.$RANDOM.$A; done }
Почистим файлы и попробуем заново
$ rm -rf *
$ time test1
real 0m0.310s
user 0m0.111s
sys 0m0.196s
Сразу остановимся и увидим, что теперь у нас основное время это именно sys, а не user тайм, то есть уже чаще скрипт ждет пока выполнятся дисковые операции, а не дисковые операции ждут пока им дадут команду что-то делать. Повторим команду несколько раз:
$ time test1
real 0m0.331s
user 0m0.101s
sys 0m0.229s
$ time test1
real 0m0.331s
user 0m0.129s
sys 0m0.200s
$ time test1
real 0m0.402s
user 0m0.118s
sys 0m0.229s
$ time test1
real 0m0.324s
user 0m0.087s
sys 0m0.236s
$ time test1
real 0m0.382s
user 0m0.129s
sys 0m0.253s
$ time test1
real 0m0.387s
user 0m0.102s
sys 0m0.283s
$ time test1
real 0m0.421s
user 0m0.115s
sys 0m0.299s
$ time test1
real 0m0.465s
user 0m0.115s
sys 0m0.312s
$ time test1
real 0m0.465s
user 0m0.139s
sys 0m0.324s
$ time test1
real 0m0.467s
user 0m0.139s
sys 0m0.327s
$ time test1
real 0m0.553s
user 0m0.156s
sys 0m0.365s
$ time test1
real 0m0.560s
user 0m0.194s
sys 0m0.364s
Итоги: видно что кеширование где-то работает, но с каждыми новыми файлами тенденция к замедлению есть, и она всего лишь через несколько десятков тысяч файлов увеличилась почти в полтора раза.
То есть задолго до миллиона я получу замедление в несколько раз. Но это на моей виртуалке. На каждом оборудовании надо тестировать индивидуально.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question