Newsgroup: it.comp.os.linux.software
Titolo: Nautilus lentissimo con dir molto grosse

Ciao a tutti,
il problema e` quello in oggetto: ho delle directory sul disco che 
contengono decine di migliaia di file, ma NON nella singola cartella, 
bensi` sparsi in decine di livelli di sottocartelle, e Nautilus impiega 
anche 10-15 secondi ad aprirmi la finestra relativa.
Con uno strace ho controllato, e fa uno stat() di ogni singolo file in 
tutte le cartelle e sottocartelle per tutti i livelli di nesting.
Lo fa sia in modalita` browser che in modalita` spatial (che comunque non 
voglio usare), sia in list_view che in icon_view, con o senza il 
directory_item_count.
C'e` qualche opzione che posso modificare per fermare questa follia o e` 
proprio hardcoded nel codice?
Grazie.
Bye.

 proprio hardcoded nel codice?
modifica->prefernze->anteprima
E togli tutte le anteprime ed il conteggio oggetti.



Mi sono dimenticato di dirlo, ma l'ho gia` fatto. :)
In ogni caso le preview non prendono troppo tempo (la CPU e` piu` che in 
grado di gestirle).
Il problema e` proprio che fa uno stat() di ogni singolo file e directory 
a qualsiasi livello sotto quella dir, quindi elabora (in questo 
particolare caso) circa 65.000 file sparsi per il disco.
Ma c'e` una cosa che ho notato solo adesso: e` lento solo se apro un 
collegamento sul desktop. Se apro la mia home e vado nella stessa 
cartella e` immediato, pur facendo gli stessi stat().
In tutti i casi fa comunque migliaia di stat() anche di /etc/localtime, 
ma penso siano cachati e quindi immediati.
Sto notando anche un'altra cosa di cui non mi ero accorto.
Anche facendo un click SINGOLO su un collegamento sul desktop parte lo 
scan tramite stat() di tutti i file contenuti in quella cartella.
E fa la stessa cosa anche con qualsiasi directory si clicchi anche una 
sola volta, salvo rifare tutto lo scan al secondo click, quando la si 
apre.
Mi sa di bug bello grosso.
Bye.

 Mi sa di bug bello grosso.
Può darsi, semmai prova a segnalarlo.
Nel mio caso mi sono installato un file manager alternativo, gnome
commander, che è piuttosto veloce.

 file manager alternativo, gnome commander, che è piuttosto veloce.
Il problema e` che su questo PC ho bisogno di alcune caratteristiche di 
Nautilus, in primis il collegamento trasparente a smb:// e a sftp://, e 
soprattutto sono abituato a lavorare con la list-view in modalita` 
browsing di nautilus (che permette di vedere l'intero albero di 
directory). Inoltre ho l'associazione automatica dei tipi di file con le 
applicazioni Gnome.
Le alternative che provo periodicamente non hanno mai l'insieme di 
caratteristiche di nautilus, e mi trovo sempre a rimpiangerlo per un 
motivo o per l'altro. :/
gnome-commander e` un po' che non lo uso, magari ci daro` un occhio.
Grazie.
Bye.

 proprio hardcoded nel codice?
La follia non è nautilus ma la tua domanda.
Se ti sei preso la briga di usare strace per capire cosa fa, se hai 
capito che fa un sacco di stat() di cui ti lamenti, allora quanto meno:
- o sai a cosa serve stat
- o dovresti guardarlo (man 2 stat)
Stat, per la cronaca, serve anche a sapere, tra le altre cose, se una 
data entità su disco è una directory o un file.
Come Cazzo fai a visualizzare un albero di dir con all'interno dei file 
se non sai cosa è una dir e cosa è un file ?
Se il tuo problema è questo, allora non c'è soluzione se non provare 
qualche FS diverso (che ne so, reiser, che a me sta sul gozzo) sperando 
di aspettare meno.

 se non sai cosa è una dir e cosa è un file ?
E mi va benissimo.
Ma se io ho una directory che contiene
+ Pippo
+ Pluto
+ Paperino
e basta, e la voglio aprire con Nautilus, perche` lui va a fare uno
stat(Pippo/Projects/
www.pippo.com/app/models/DB/CVS/Root
) ?
Lo dovrebbe fare quando apro Pippo/Projects/
www.pippo.com/app/models/DB/
CVS/, non prima.
 
Io mi aspetto che faccia 3 stat(), non 300.000, e poi, on-demand, faccia 
lo stat() man mano che apro i rami sottostanti.
Bye.

 
forse lo fa per avere la vista ad albero cliccabile precaricata.
Nella maggior parte dei casi ha pure un senso.
Te sei su un caso limite.
Alle brutte forcalo e fai un fast-nautilous :-)

 stat(Pippo/Projects/
www.pippo.com/app/models/DB/CVS/Root
) ?
Ma fa davvero così?
Mi sembra impossibile, perché altrimenti l'attesa più lunga dovrebbe 
esserci sempre quando vai su /, no? Dovrebbe essere un'attesa 
lunghissima...
E non è così, vero?
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
_____________________________________________________________________
Non sprecare i cicli idle della tua CPU. Usali per qualcosa di utile.
http://orbit.psi.edu/
 
http://www.worldcommunitygrid.org/index.jsp
 
http://boinc.berkeley.edu/projects.php

 E non è così, vero?
Sulla home no, ma sembra che la tratti diversamente (infatti ha anche 
un'icona apposta). Ma una volta aperta la home, su qualsiasi directory 
clicchi, lo fa.
Ma sembra che le stat() non siano nemmeno il problema piu` grosso. Lo 
sembravano perche`, essendo tante, la shell ci metteva una vita a 
visualizzarle.
Subito dopo le stat() fa una serie di poll() a non so cosa. Questo e` un 
esempio:
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}, {fd=6, 
events=POLLIN}, 
{fd=7, events=POLLIN}, {fd=12, events=POLLIN|POLLPRI}, {fd=14, 
events=POLLIN|POLLPRI}, {fd=15, events=POLLIN|POLLPRI}, {fd=16, 
events=POLLIN|POLLPRI}, {fd=22, events=POLLIN}, {fd=26, events=POLLIN}, 
{fd=27, events=POLLIN}, {fd=25, events=POLLIN}, {fd=17, events=POLLIN}, 
{fd=18, events=POLLIN}, {fd=9, events=POLLIN}, {fd=28, events=POLLIN}], 
16, 956) = 1 ([{fd=3, revents=POLLIN}])
Ma ho intravisto in mezzo diversi inotify, per esempio:
inotify_add_watch(18, "", IN_MODIFY|IN_ATTRIB|IN_CLOSE_WRITE|
IN_MOVED_FROM|IN_MOVED_TO|IN_CREATE|IN_DELETE|IN_DELETE_SELF|IN_MOVE_SELF|
IN_UNMOUNT|IN_ONLYDIR) = -1 ENOENT (No such file or directory)
Dovrei mettermi a spulciare il sorgente, ma, a parte che sono un po' 
arrugginito col C, ora non ho proprio tempo... :(
Bye.

 Cosi` vediamo se sono solo io o se lo fa a tutti.
Ok, ho aperto nautilus, sono andato su /, e ho tracciato sul file 
"traccia" l'apertura di /usr, che ha sotto di sé 186 mila oggetti per 
quasi 3GB complessivi.
L'apertura è stata istantanea. Risultati di massima:
lem@biggy:~$ nautilus --version
GNOME nautilus 2.30.1
lem@biggy:~$ grep "poll(" traccia |wc -l
1723
lem@biggy:~$ grep "poll(" traccia |sort -u|wc -l
325
lem@biggy:~$ grep "stat(" traccia |wc -l
379
lem@biggy:~$ grep "stat(" traccia |sort -u |wc -l
78
lem@biggy:~$ grep "inotify" traccia |wc -l
12
lem@biggy:~$ grep "inotify" traccia |sort -u|wc -l
5


 quasi 3GB complessivi.
Io con 235 mila oggetti e 7.3 GB:
$ grep "poll(" /tmp/nautilus.log |wc -l
538
$ grep "poll(" /tmp/nautilus.log |sort -u|wc -l
164
Le statistiche sul poll non sono molto attendibili, perche` fa un poll 
per ogni movimento del cursore, quindi dipende anche da quanto hai 
"girato" sul desktop prima di cliccare.
$ grep "stat(" /tmp/nautilus.log |wc -l
30708
$ grep "stat(" /tmp/nautilus.log |sort -u|wc -l
30477
$ grep "inotify" /tmp/nautilus.log |wc -l
5
$ grep "inotify" /tmp/nautilus.log |sort -u|wc -l
2
Non ci capisco piu` niente. Sembra che faccia lo stat solo di alcuni tipi 
di file.
Ma in ogni caso il mio fa molti piu` stat del tuo (100 volte tanto) con 
una quantita` di file paragonabile.
Mi viene il dubbio di avere qualche plugin che li fa. Provero` a ripulire 
tutto o a purgarlo e reinstallarlo.
Grazie per l'aiuto.
Bye.