Giả sử bạn bắt đầu với một bản trống, tức là bạn chưa truy cập hệ thống tập tin. Bây giờ hãy nói rằng bạn chạy stat (khác / một số / dir / tập tin). Đầu tiên kernel phải tìm tập tin, theo thuật ngữ kỹ thuật được gọi là inode. Nó bắt đầu bằng cách tìm trong siêu khối hệ thống tập tin, nơi lưu trữ inode của thư mục gốc. Sau đó, nó mở thư mục gốc, tìm thấy một số tên lửa, mở đó, tìm thấy thư mục dir, v.v ... cuối cùng cũng tìm được inode cho tập tin.
Sau đó, bạn phải thực sự đọc dữ liệu inode. Sau lần đọc đầu tiên, nó cũng được lưu trong bộ nhớ cache. Vì vậy, một lần đọc chỉ phải xảy ra một lần.
Hãy nghĩ về HD giống như một máy ghi âm cũ, một khi bạn đang ở đúng vị trí với cây kim, bạn có thể tiếp tục đọc nội dung nhanh khi nó quay. Tuy nhiên, một khi bạn cần chuyển đến một địa điểm khác, được gọi là Tìm kiếm, bạn đang làm điều gì đó rất khác. Bạn cần di chuyển vật lý cánh tay, sau đó đợi cho đĩa quay cho đến khi đúng vị trí dưới kim. Loại chuyển động vật lý này vốn đã chậm nên thời gian tìm kiếm đĩa khá dài.
Vậy, khi nào chúng ta tìm kiếm? Nó phụ thuộc vào cách bố trí hệ thống tập tin của khóa học. Các hệ thống tệp cố gắng lưu trữ các tệp liên tiếp để tăng hiệu suất đọc và chúng thường cố gắng lưu trữ các nút cho một thư mục gần nhau nhưng tất cả phụ thuộc vào những thứ như khi các tệp được ghi, phân mảnh hệ thống tệp, v.v. trong trường hợp, mỗi chỉ số của một tệp sẽ gây ra tìm kiếm và sau đó mỗi lần mở tệp sẽ gây ra tìm kiếm thứ hai. Vì vậy, đó là lý do tại sao mọi thứ mất một thời gian dài như vậy khi không có gì được lưu trữ.
Một số hệ thống tập tin tốt hơn những hệ thống khác, phân mảnh có thể giúp ích. Bạn có thể làm một số điều trong ứng dụng. Chẳng hạn, GIO sắp xếp các nút nhận được từ readdir () trước khi cho biết họ hy vọng rằng số inode có một số loại liên quan đến thứ tự đĩa (thường có) do đó giảm thiểu tìm kiếm ngẫu nhiên qua lại.
Một điều quan trọng là thiết kế lưu trữ dữ liệu và ứng dụng của bạn để giảm thiểu tìm kiếm. Ví dụ, đây là lý do tại sao Nautilus đọc / usr / bin chậm, vì các tệp trong đó thường không có phần mở rộng, chúng ta cần thực hiện phép thuật đánh hơi cho mỗi loại. Vì vậy, chúng ta cần mở từng tệp => một tìm kiếm cho mỗi tệp => slooooow. Một ví dụ khác là các ứng dụng lưu trữ thông tin trong rất nhiều tệp nhỏ, như gconf đã từng làm, cũng là một ý tưởng tồi. Dù sao, trong thực tế tôi không nghĩ có nhiều việc bạn có thể làm ngoại trừ cố gắng che giấu độ trễ.