Diyelim ki boş bir sayfa ile başlayın, yani dosya sistemine hiç erişmediniz. Şimdi stat (“/ some / dir / file”) komutunu çalıştırdığınızı söyleyin. Öncelikle, çekirdeğin teknik terimlerle inode adı verilen dosyayı bulması gerekir. Kök dizinin inode'unu depolayan dosya sistemi süper bloğuna bakarak başlar. Sonra kök dizini açar, “bazı” bulur, açar, “dir” bulur, vb. Sonuçta inode dosyasını bulur.
O zaman inode verilerini okumalısınız. İlk okuduktan sonra bu da RAM’de önbelleğe alınır. Bu yüzden bir okuma yalnızca bir kez gerçekleşmelidir.
HD'yi eski bir plak çalar gibi düşünün, iğne ile doğru yere bir kez döndüğünüzde okumaya devam edebilirsiniz. Ancak, bir kez “aramaya” denilen farklı bir yere taşınmanız gerektiğinde, çok farklı bir şey yapıyorsunuzdur. Kolu fiziksel olarak hareket ettirmeniz, ardından tablanın doğru yer iğnenin altına gelene kadar dönmesini beklemeniz gerekir. Bu tür bir fiziksel hareket doğası gereği yavaştır, bu nedenle disk aramanın süresi oldukça uzundur.
Peki ne zaman arayacağız? Elbette dosya sistemi düzenine bağlıdır. Dosya sistemleri okuma performansını artırmak için dosyaları arka arkaya depolamaya çalışırlar ve genellikle aynı zamanda birbirine yakın tek bir klasör için inode'lar depolamaya çalışırlar, fakat bunların hepsi dosyaların yazıldığı zaman, dosya sistemi parçalanması vs. gibi şeylere bağlıdır. Bu durumda, bir dosyanın her statüsü bir aramaya neden olur ve ardından dosyanın her açılışı ikinci aramaya neden olur. Bu nedenle, hiçbir şey önbelleğe alınmadığında işler bu kadar uzun sürüyor.
Bazı dosya sistemleri diğerlerinden daha iyidir, birleştirme yardımcı olabilir. Uygulamalarda bazı şeyler yapabilirsiniz. Örneğin, GIO, inode numarasının disk sırasına göre bir tür ilişkisi olduğunu (genellikle sahip olduğu) umudunu belirtmeden önce alınan inode'ları readdir () 'den ayırır, böylece rasgele ileri geri aramaları en aza indirir.
Önemli bir şey, veri depolamayı ve aramayı en aza indirgemek için uygulamalarınızı tasarlamaktır. Örneğin, Nautilus'un okuma / usr / bin'in yavaş olmasının nedeni budur, çünkü oradaki dosyalar genellikle uzantıya sahip değildir, her biri için sihirli koklama yapmamız gerekir. Bu nedenle, her bir dosyayı açmamız gerekiyor => dosya başına bir arama => slooooow. Başka bir örnek, eskiden olduğu gibi gconf gibi birçok küçük dosyada bilgi depolayan uygulamalar ve aynı zamanda kötü bir fikirdir. Her neyse, pratikte gecikmeleri gizlemeye çalışmaktan başka yapabileceğin bir şey olmadığını düşünüyorum.