Katakanlah Anda mulai dengan papan tulis kosong, yaitu Anda belum mengakses sistem file sama sekali. Sekarang katakan Anda menjalankan stat ("/ some / dir / file"). Pertama kernel harus mencari file, yang dalam istilah teknis disebut inode. Itu dimulai dengan melihat pada superblock filesystem, yang menyimpan inode dari direktori root. Kemudian ia membuka direktori root, menemukan "beberapa", membuka itu, menemukan "dir", dll. Akhirnya menemukan inode untuk file.
Maka Anda harus benar-benar membaca data inode. Setelah pertama kali membaca ini juga di-cache dalam RAM. Jadi, membaca hanya harus terjadi sekali.
Pikirkan HD seperti pemutar rekaman lama, begitu Anda berada di tempat yang tepat dengan jarum, Anda dapat terus membaca barang dengan cepat saat diputar. Namun, begitu Anda harus pindah ke tempat lain, yang disebut "mencari" Anda melakukan sesuatu yang sangat berbeda. Anda perlu menggerakkan lengan secara fisik, kemudian menunggu piring berputar sampai tempat yang tepat berada di bawah jarum. Gerakan fisik semacam ini secara inheren lambat sehingga mencari waktu untuk disk cukup lama.
Jadi, kapan kita mencari? Itu tergantung pada tata letak sistem file tentu saja. Filesystem mencoba untuk menyimpan file secara berurutan untuk meningkatkan kinerja membaca, dan mereka umumnya juga mencoba untuk menyimpan inode untuk satu direktori dekat satu sama lain tetapi itu semua tergantung pada hal-hal seperti ketika file ditulis, fragmentasi filesystem, dll. Jadi, yang terburuk kasus, setiap stat dari file akan menyebabkan pencarian dan kemudian setiap pembukaan file akan menyebabkan pencarian kedua. Jadi, itulah mengapa hal-hal itu memakan waktu begitu lama ketika tidak ada yang di-cache.
Beberapa sistem file lebih baik daripada yang lain, defragmentasi mungkin membantu. Anda dapat melakukan beberapa hal di aplikasi. Sebagai contoh, GIO mengurutkan inode yang diterima dari readdir () sebelum menyatakan mereka berharap bahwa nomor inode memiliki semacam hubungan dengan urutan disk (umumnya memiliki) sehingga meminimalkan pencarian acak bolak-balik.
Satu hal penting adalah merancang penyimpanan data dan aplikasi Anda untuk meminimalkan pencarian. Sebagai contoh, ini sebabnya Nautilus membaca / usr / bin lambat, karena file-file di sana umumnya tidak memiliki ekstensi yang perlu kita lakukan untuk menghirup sihir masing-masing. Jadi, kita perlu membuka setiap file => satu pencarian per file => slooooow. Contoh lain adalah aplikasi yang menyimpan informasi dalam banyak file kecil, seperti gconf yang digunakan sebelumnya, juga merupakan ide yang buruk. Ngomong-ngomong, dalam praktiknya saya tidak berpikir ada banyak yang bisa Anda lakukan kecuali mencoba menyembunyikan latensi.