Saya menggunakan dd untuk mengukur kinerja penulisan dan mengamati sesuatu yang aneh: menulis ke / data / emzed 2 lebih cepat daripada menulis ke / data. Ini adalah cara saya mengukur penampilan:
$ dd if = / dev / zero dari = / data / emzed2 / testfile bs = 32
^ C4921834 + 0 catatan dalam
4921834 + 0 mencatat 157498688 byte (157 MB) disalin, 2,87329 s, 54,8 MB / s
$ dd if = / dev / zero dari = / data / testfile bs = 32
^ C2487991 + 0 catatan dalam
2487991 + 0 mencatat 79615712 byte (80 MB) disalin, 2.650 s, 30,0 MB / s
kedua folder berada di partisi yang sama pada drive SSD. Saya menggunakan Ubuntu 14.04 dan mengulangi percobaan beberapa kali dengan hasil yang sama.
Ada yang tahu apa yang terjadi?
performance
io
rocksportrocker
sumber
sumber
Jawaban:
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.
Hasil dari,
emzed2
mungkin dibuat di blok kosong 128MB.Karena itu,
/data/testfile
dibuat dalam grup (mungkin sangat dimuat) root block, sementara/data/emzed2/testfile
dibuat dalam (mungkin kosong)emzed2
blokir grup.Untuk
/data/emzed2/testfile
, sistem file akan terlebih dahulu mengalokasikan semua blok data diemzed2
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.sumber