Скажімо, ви починаєте з порожнього аркуша, тобто ви взагалі не зверталися до файлової системи. Тепер скажіть, що ви запускаєте stat ("/ some / dir / file"). Спочатку ядро має знайти файл, який в технічному плані називається inode. Він починається з пошуку в суперблоку файлової системи, який зберігає inode кореневого каталогу. Потім він відкриває кореневу директорію, знаходить «деякі», відкриває це, знаходить «dir» тощо, врешті-решт знаходячи inode для файлу.
Тоді вам доведеться насправді читати дані inode. Після першого читання це також зберігається в оперативній пам'яті. Отже, читання має відбутися лише один раз.
Думайте про HD як про старий програвач звукозаписів, коли ви в потрібному місці з голкою можете постійно читати речі, коли він обертається. Однак, як тільки вам потрібно переїхати в інше місце, яке називається «шукаючи», ви робите щось зовсім інше. Потрібно фізично рухати рукою, потім чекати, поки блюдо крутиться, поки потрібне місце не опиниться під голкою. Цей вид фізичного руху за своєю суттю повільний, тому час пошуку дисків досить тривалий.
Отже, коли ми шукаємо? Це залежить від макета файлової системи, звичайно. Файлові системи намагаються зберігати файли послідовно, щоб підвищити продуктивність читання, і вони, як правило, також намагаються зберігати вставки для одного каталогу поруч один з одним, але все залежить від речей, наприклад, коли файли записуються, фрагментація файлової системи тощо. Отже, в гіршому випадку У випадку, кожен статистичний файл буде викликати пошук, і тоді кожне відкриття файлу спричинить повторний пошук. Отже, тому справи займають так довго, коли нічого не зберігається в кеші.
Деякі файлові системи кращі за інші, дефрагментація може допомогти. Деякі речі можна робити в додатках. Наприклад, GIO сортує отримані індекси з readdir () перед тим, як заявляти про них, сподіваючись, що число inode має якесь відношення до порядку диска (як правило, є), таким чином мінімізуючи випадкові пошуки вперед і назад.
Одне важливе - створити ваше сховище даних та додатки, щоб мінімізувати пошук. Наприклад, саме тому Nautilus читання / usr / bin повільний, тому що файли там, як правило, не мають розширення, нам потрібно робити магічне нюхання для кожного. Отже, нам потрібно відкрити кожен файл => один пошук на файл => slooooow. Інший приклад - додатки, які зберігають інформацію у безлічі невеликих файлів, як, наприклад, gconf, що також роблять, також погана ідея. У будь-якому випадку, на практиці я не думаю, що ти можеш зробити багато, крім того, щоб спробувати приховати затримки.