Mam katalog z około 100 000 plików. ls -f zawiesza się przez ponad minutę. Uruchomiłem strace i natychmiast zacząłem widzieć getdents, więc ls wyraźnie czyta katalog. Widzę również wiele wywołań do brk, więc ls wyraźnie buforuje rzeczy w pamięci. Napisałem prosty program, który wywołuje readdir i wyświetla nazwy plików, i odpowiada natychmiast. Ale ls -f nie dostarcza danych wyjściowych. Co daje? Myślałem, że chodzi o to, że powoduje, że ls nie robi nic więcej niż readdir. Czy istnieje przenośny i niezawodny sposób wyświetlania zawartości katalogu? (Zauważ, że pochodzi z coreutils GNU w Linuksie.)
-EDYTOWAĆ-
Wprowadzono alias, ale „/ bin / ls -1f> / dev / null” zajmuje od 8 do 15 sekund, „/ bin / ls -1fx> / dev / null” zajmuje od 4 do 11 sekund, ale prosty program to tylko readdir zajmuje 0,011 sekundy. Co muszę zrobić, aby GNU nie ssały?
Dodano optymalizację w coreutils 7.0 (commit 8d974b00fbbc2025de63e1e6d54827648fefa1c4):
Pierwszym wyjaśnieniem, które przychodzi mi na myśl, jest to, że używasz starszej wersji coreutils. Musisz zaktualizować.
źródło