Tampaknya Anda dilanda optimisasi ext4 . Beberapa di antaranya dijelaskan dalam Tata Letak Disk Ext4 dokumentasi.
Setiap kali Anda membuat file, misalnya dengan dd, beberapa tempat dialokasikan untuk data baru. Akhirnya, file tersebut dapat terfragmentasi, yaitu data dapat tersebar dalam beberapa potongan melalui disk. Fragmentasi adalah sumber kelambatan yang terkenal (ketika membaca dan menulis) dan karena itu implementasi sistem file sering mencoba menghindarinya. Fragmentasi jauh lebih mahal dengan disk berputar (kepala perlu melakukan perjalanan ke potongan berturut-turut) daripada dengan SSD, namun sebagian besar implementasi sistem file menggunakan strategi disk-disk yang dioptimalkan dengan SSD.
Kombinasi "trik" ketiga, keempat dan kelima yang dijelaskan dalam dokumentasi yang disebutkan di atas mungkin jelaskan mengapa menulis ke subdirektori lebih cepat dalam kasus Anda.
Trik kelima adalah bahwa volume disk dipotong menjadi grup blok 128MB. […] Ketika sebuah direktori dibuat di direktori root, pengalokasi inode memindai grup blok dan menempatkan direktori itu ke dalam grup blok paling sedikit dimuat yang dapat ditemukan.
Hasil dari, emzed2
mungkin dibuat di blok kosong 128MB.
Trik keempat adalah bahwa semua inode dalam direktori ditempatkan di grup blok yang sama dengan direktori, jika memungkinkan.
Karena itu, /data/testfile
dibuat dalam grup (mungkin sangat dimuat) root block, sementara /data/emzed2/testfile
dibuat dalam (mungkin kosong) emzed2
blokir grup.
Trik ketiga [...] adalah mencoba menyimpan blok data file dalam grup blok yang sama dengan inode-nya.
Untuk /data/emzed2/testfile
, sistem file akan terlebih dahulu mengalokasikan semua blok data di emzed2
blokir grup. Jika blok ini awalnya kosong, untuk 128MB pertama, ini berarti tidak ada fragmentasi sama sekali. Untuk /data/testfile
, sistem file akan terlebih dahulu mengisi grup blok akar jika belum diisi, dan kemudian mencari tempat lain untuk menyimpan data.
Anda juga menumbuhkan file 32 byte sekaligus. Untungnya, sistem file seperti ext4 mengalokasikan lebih banyak data daripada yang Anda minta (dengan potongan 8kb dalam kasus ext4) dan mencoba menunda alokasi. Anda mungkin akan melihat pola yang sama dengannya bs=8196
, tetapi perbedaan kecepatan mungkin berkurang dengan ukuran blok yang lebih besar.