pourquoi le nautile est-il lent?

19

Je me demande pourquoi Nautilus est très lent lors de l'ouverture d'un répertoire contenant de nombreux fichiers. Mon répertoire / usr / lib, par exemple, contient 1 900 fichiers et il faut environ 5+ secondes pour tout afficher. C'est comme ça depuis que j'ai installé Ubuntu il y a quelques mois et c'est parfois assez ennuyeux. Je n'ai pas de matériel puissant mais je sais que l'Explorateur Windows est tellement plus rapide que cela.

Y a-t-il quelque chose qui puisse être fait pour l'accélérer?

Ubuntu 10.04

District de codage
la source
1
Je suppose que Nautilus utilise ls pour faire sa liste tandis qu'Explorer a un cache.
digitxp
De quel type de système s'agit-il? Je pense que c'est un facteur important. Ce serait "lent" sur mon netbook, mais pas tant sur un i7 avec 4 Go + de RAM.
Chris
En relation avec Ask Ubuntu: Nautilus est très lent
slhck

Réponses:

27

Le suivi de l'exécution de nautilusmontre que la lenteur est due à une combinaison de deux facteurs:

  • Il est intelligent d'afficher des informations utiles sur chaque fichier. Il examine le contenu des fichiers pour déterminer quelle icône utiliser et éventuellement afficher un aperçu. Cela peut être atténué en désactivant les aperçus dans les préférences.

  • Il fait beaucoup de travail inutile (comme stating plusieurs fois chaque fichier, et /proc/filesystemsmême vérifier les non-répertoires). Tout ce que vous pouvez faire est d'apprendre la programmation, d'améliorer le programme et d'envoyer un patch. Ou envoyez au moins une demande de fonctionnalité aux auteurs (veuillez l'accélérer).

  • Il appelle plusieurs processus externes pour chaque répertoire, je n'ai pas exploré ce qu'ils font.

Gilles 'SO- arrête d'être méchant'
la source
Bonne réponse: D! +1 pour le patching + featurerequestrequest: D
BloodPhilia
Je suis programmeur, mais pas encore assez bon pour y contribuer. Par curiosité, comment avez-vous fait la trace?
Coding District
2
@Derek: strace -f -ttt -p1234 -o nautilus.straceoù 1234 est le pid de nautilus. Je n'ai pas analysé la trace en détail, j'ai juste jeté un coup d'œil au début (beaucoup de choses impliquant des sous-processus) et les choses par fichier (plusieurs stats et un openpour certains fichiers).
Gilles 'SO- arrête d'être méchant'
1
Beaucoup de stat () multiples proviennent d'appels de bibliothèque, beaucoup de glibc.
Tim Post
woah, c'est un problème depuis plus de 6 ans! comment se fait-il que personne n'a encore investi de temps dans tout cela? Pour commencer, les aperçus et les statistiques doivent être effectués APRÈS avoir répertorié les fichiers. Ainsi, la liste des dossiers volumineux sera aussi instantanée que possible lset la navigation sera possible pendant le chargement des aperçus. L'explorateur Windows fonctionne comme ceci, si je me souviens bien. Un peu incroyable pour un programme Ubuntu très utilisé comme celui-ci. cependant, ne devrait pas se plaindre mais contribuer à la place
phil294
5

Dans l'onglet "Aperçu" sous "Edition -> Préférences", essayez de basculer toutes les options sur "Jamais".

Cela m'a aussi énormément aidé à désactiver les "technologies d'assistance". Vous pouvez le faire dans "Système -> Préférences -> Technologies d'assistance". Décochez "Activer les technologies d'assistance".

Vous devrez vous déconnecter et vous reconnecter pour que cette dernière modification prenne effet.

Geai
la source
Cela me donne des améliorations très modestes. La suppression des signets a fait une bien plus grande différence.
Peter Jenkins
5

Cela m'a rappelé une conversation que j'ai eue avec Alexander Larsson , le développeur principal de Nautilus et d'autres projets, y compris GVFS.

Giles sa réponse , en particulier le peu de Nautilus regardant à l'intérieur du contenu des fichiers, touche à la raison principale pour laquelle Nautilus est "lent". Cependant, Giles n'explique pas pourquoi cela est lent, ce qui pourrait être évident pour certains, mais pas pour d'autres. Voici ce qu'Alex avait à dire:

Disons que vous commencez avec une liste vierge, c'est-à-dire que vous n'avez pas du tout accédé au système de fichiers. Supposons maintenant que vous exécutez stat («/ some / dir / file»). Le noyau doit d'abord trouver le fichier qui, en termes techniques, est appelé l'inode. Il commence par regarder dans le superbloc du système de fichiers, qui stocke l'inode du répertoire racine. Ensuite, il ouvre le répertoire racine, en trouve «certains», l'ouvre, trouve «dir», etc. finissant par trouver l'inode pour le fichier.

Ensuite, vous devez réellement lire les données d'inode. Après la première lecture, il est également mis en cache dans la RAM. Ainsi, une lecture seule doit avoir lieu une seule fois.

Considérez le HD comme un vieux tourne-disque, une fois que vous êtes au bon endroit avec l'aiguille, vous pouvez continuer à lire des trucs rapidement pendant qu'il tourne. Cependant, une fois que vous devez déménager dans un endroit différent, appelé «chercher», vous faites quelque chose de très différent. Vous devez déplacer physiquement le bras, puis attendre que le plateau tourne jusqu'à ce que le bon endroit soit sous l'aiguille. Ce type de mouvement physique est intrinsèquement lent, donc les temps de recherche de disques sont assez longs.

Alors, quand cherchons-nous? Cela dépend bien sûr de la disposition du système de fichiers. Les systèmes de fichiers essaient de stocker les fichiers consécutivement pour augmenter les performances de lecture, et ils essaient généralement de stocker les inodes pour un seul répertoire les uns à côté des autres, mais tout dépend de choses comme le moment où les fichiers sont écrits, la fragmentation du système de fichiers, etc. Donc, dans le pire des cas cas, chaque statistique d'un fichier provoquera une recherche, puis chaque ouverture du fichier provoquera une deuxième recherche. C'est pourquoi les choses prennent autant de temps lorsque rien n'est mis en cache.

Certains systèmes de fichiers sont meilleurs que d'autres, la défragmentation peut aider. Vous pouvez faire certaines choses dans les applications. Par exemple, GIO trie les inodes reçus de readdir () avant de les déclarer en espérant que le numéro d'inode a une sorte de relation avec l'ordre du disque (il a généralement) minimisant ainsi les recherches aléatoires d'avant en arrière.

Une chose importante est de concevoir votre stockage de données et vos applications pour minimiser la recherche. Par exemple, c'est pourquoi Nautilus lisant / usr / bin est lent, car les fichiers qu'il contient n'ont généralement pas d'extension dont nous avons besoin pour effectuer un reniflement magique pour chacun. Donc, nous devons ouvrir chaque fichier => une recherche par fichier => slooooow. Un autre exemple est celui des applications qui stockent des informations dans de nombreux petits fichiers, comme le faisait gconf, également une mauvaise idée. Quoi qu'il en soit, dans la pratique, je ne pense pas que vous puissiez faire grand-chose, sauf essayer de masquer les latences.

Il a terminé avec la note suivante:

La vraie solution pour tout ce dilemme est de s'éloigner des médias en rotation. J'entends que les SSD Intel sont géniaux. Linus ne jure que par eux.

:-)

Bruce van der Kooij
la source
3
Intéressant :) Cependant, si la recherche est à l'origine de la lenteur, je me demande toujours pourquoi l'explorateur Windows est-il alors plus rapide? Certainement pas à cause du matériel.
Coding District
4
Si je devais deviner, je dirais que cela ne fait pas de reniflement magique mais fait simplement la détection de fichiers basée sur l'extension (je peux le confirmer pour Windows XP).
Bruce van der Kooij
2
Exactement. Explorer (pour la plupart) ne fait aucun type de reniflement de fichier, il utilise simplement l'extension. S'il doit rendre un aperçu ou lire une icône, eh bien, il doit ouvrir le fichier. Vous pouvez le voir si vous ouvrez un grand dossier plein de fichiers .exe. Une extension de shell pourrait forcer Explorer à ouvrir un fichier pour faire un peu de reniflement aussi. Par exemple, certains utilitaires d'archivage examineront les fichiers .exe pour voir s'il s'agit d'archives SFX. MS a investi beaucoup d'efforts pour essayer d'accélérer l'Explorateur, à la fois en vitesse réelle et en vitesse apparente.
afrazier
3

J'ai finalement compris ce qui rend le nautilus si lent: les signets.

Pour y remédier, supprimez tous vos signets, redémarrez, puis rajoutez ceux dont vous ne pouvez pas vous passer.

En utilisant strace, j'ai réalisé que nautilus indiquait beaucoup de fichiers pour chaque vue. Même les fichiers qui n'étaient pas dans le répertoire que je parcourais pendant la trace. Je pense que nautilus essaie de pré-mettre en cache ces signets.

J'avais un lecteur réseau comme signet ... c'était peut-être la raison pour laquelle nautilus prenait plusieurs secondes à charger.

Peter Jenkins
la source
1

Essayez d'utiliser un autre gestionnaire de fichiers tel que Thunar. Thunar est beaucoup plus rapide pour charger les listes de répertoires et plus stable pour copier des fichiers de mon disque dur USB NTFS vers ext4, bien qu'avec de grands ensembles de fichiers, il semble avoir des problèmes comme Nautilus.

Voici un lien pour le script de commutateur https://help.ubuntu.com/community/DefaultFileManager

mut1na
la source
Excellente solution de contournement! J'adore les "sudo apt-get install thunar" et "exo-Preferred-Applications", puis je sélectionne Thunar dans (Utilitaires> File Manger).
Doud
1

Si vous avez installé xfce dans un système Gnome et que vous ne l'utilisez jamais, supprimez exo-utils

Il a résolu mon problème, ainsi que le problème de Chrome qui n'ouvre pas correctement les fichiers après leur téléchargement.

Adam H
la source
Ça ne m'a pas aidé. exo-utils est également requis par de nombreux packages, y compris le package xfdesktop4, il est donc assez difficile à supprimer: sudo dpkg -r --ignore-depend = xfce4-terminal, thunar-volman, squeeze, thunar, xfce4-panel, xfce4-verve -plugin, xfdesktop4 exo-utils
Peter Jenkins
1

Dans l'onglet "Aperçu" sous "Edition -> Préférences", essayez de basculer toutes les options sur "Jamais".

Cela m'a aussi énormément aidé à désactiver les "technologies d'assistance". Vous pouvez le faire dans "Système -> Préférences -> Technologies d'assistance". Décochez "Activer les technologies d'assistance".

Vous devrez vous déconnecter et vous reconnecter pour que cette dernière modification prenne effet.

wsmart
la source
1
Le temps pour ouvrir un grand dossier est passé d'environ 30 secondes à peut-être deux secondes. Bon chagrin.
wsmart
Mon message a été supprimé ici par un autre utilisateur. Apparemment. Je voulais remercier Jay pour son message car cela a fait une énorme différence pour mon problème lent Nautius. Soyez réel, sobre.
wsmart