Кажется, что вы пострадали от оптимизации ext4. Некоторые из них описаны в документации Ext4 Disk Layout .
Каждый раз, когда вы увеличиваете файл, например, с помощью dd, для новых данных выделяется какое-то место. В конце концов, файл может быть фрагментирован, то есть данные могут быть распределены по диску на несколько частей. Фрагментация является хорошо известным источником медлительности (при чтении и записи), и поэтому реализации файловой системы часто пытаются ее избежать. Фрагментация намного дороже с вращающимися дисками (голова должна перемещаться к последовательным блокам), чем с SSD, однако в большинстве реализаций файловой системы используются стратегии с оптимизированными вращающимися дисками с SSD.
Комбинация третьего, четвертого и пятого "трюков", описанных в упомянутой выше документации, может объяснить, почему запись в подкаталог выполняется быстрее в вашем случае.
Пятая хитрость заключается в том, что том диска разделен на группы блоков по 128 МБ. […] Когда каталог создается в корневом каталоге, распределитель inode сканирует группы блоков и помещает этот каталог в наименее загруженную группу блоков, которую он может найти.
В результате emzed2
вероятно, был создан в пустом блоке размером 128 МБ.
Четвертый трюк заключается в том, что все inode в каталоге размещаются в той же группе блоков, что и каталог, когда это возможно.
Следовательно, /data/testfile
создается в (вероятно, сильно загруженной) корневой группе блоков, а /data/emzed2/testfile
создается в (возможно, пустой) группе блоков emzed2
.
Третий прием […] заключается в том, что он пытается сохранить блоки данных файла в той же группе блоков, что и его индекс.
Для /data/emzed2/testfile
файловая система сначала выделяет все блоки данных в группе блоков emzed2
. Если этот блок был изначально пуст для первых 128 МБ, это означает, что фрагментации вообще не было. Для /data/testfile
файловая система сначала заполняет корневую группу блоков, если она еще не была заполнена, а затем ищет другие места для хранения данных.
Кроме того, вы увеличиваете файл 32 байта за раз. К счастью, файловые системы, такие как ext4, выделяют больше данных, чем вы запрашиваете (кусками по 8 КБ в случае ext4), и пытаются отложить выделение. Вероятно, вы увидите похожий шаблон с bs=8196
, но разница в скорости может уменьшиться с увеличением размера блока.