Załóżmy, że zaczynasz od pustej listy, tzn. Wcale nie masz dostępu do systemu plików. Teraz powiedz, że uruchamiasz stat („/ some / dir / file”). Najpierw jądro musi znaleźć plik, który technicznie nazywa się i-węzłem. Zaczyna się od przeszukania superbloku systemu plików, który przechowuje i-węzeł katalogu głównego. Następnie otwiera katalog główny, znajduje „trochę”, otwiera to, znajduje „dir” itp., W końcu znajduje i-węzeł dla pliku.
Następnie musisz odczytać dane i-węzła. Po pierwszym przeczytaniu jest to również buforowane w pamięci RAM. Tak więc odczyt musi się zdarzyć tylko raz.
Pomyśl o HD jak o starym odtwarzaczu, gdy już znajdziesz się we właściwym miejscu z igłą, możesz szybko czytać rzeczy podczas obracania się. Jednak gdy musisz przenieść się w inne miejsce, zwane „szukaniem”, robisz coś zupełnie innego. Musisz fizycznie przesunąć ramię, a następnie zaczekać, aż talerz zacznie się obracać, aż właściwe miejsce znajdzie się pod igłą. Ten rodzaj ruchu fizycznego jest z natury powolny, więc czasy poszukiwania dysków są dość długie.
Kiedy więc szukamy? Zależy to oczywiście od układu systemu plików. Systemy plików próbują przechowywać pliki kolejno, aby zwiększyć wydajność odczytu, i generalnie próbują również przechowywać i-węzły dla jednego katalogu blisko siebie, ale wszystko zależy od rzeczy, takich jak zapis plików, fragmentacja systemu plików itp. Tak więc, w najgorszym przypadku W takim przypadku każda statystyka pliku spowoduje wyszukiwanie, a następnie każde otwarcie pliku spowoduje drugie wyszukiwanie. Dlatego właśnie tak długo trwa, gdy nic nie jest buforowane.
Niektóre systemy plików są lepsze od innych, defragmentacja może pomóc. Możesz robić pewne rzeczy w aplikacjach. Na przykład GIO sortuje odebrane i-węzły z readdir () przed stwierdzeniem ich, mając nadzieję, że liczba i-węzłów ma jakiś związek z kolejnością dysków (na ogół ma), minimalizując w ten sposób losowe wyszukiwania tam i z powrotem.
Jedną ważną rzeczą jest zaprojektowanie magazynu danych i aplikacji w celu zminimalizowania wyszukiwania. Na przykład dlatego Nautilus czyta / usr / bin jest powolny, ponieważ pliki tam na ogół nie mają rozszerzenia, dla którego musimy wykonać magiczne wąchanie. Musimy więc otworzyć każdy plik => jedno wyszukiwanie na plik => slooooow. Innym przykładem są aplikacje przechowujące informacje w wielu małych plikach, takie jak kiedyś gconf, również zły pomysł. W każdym razie, w praktyce nie sądzę, że możesz wiele zrobić, prócz ukrycia opóźnień.