Ich habe ein ziemlich altes Home-Verzeichnis auf der Festplatte. Es wurden viele Dateien erstellt und entfernt, und jetzt beträgt die Größe von / home / username 995328 Byte. Bitte beachten Sie, dass ich die Größe der "Verzeichnisdatei" meine (jedes Verzeichnis ist eine spezielle Datei, die Links zu anderen Dateien und Verzeichnissen enthält), nicht die Gesamtgröße der darin enthaltenen Dateien. Mit anderen Worten, das ist die Größe von "." (Punkt-) Verzeichnis, das Sie in der Ausgabe von ls -la sehen.
Mein Home-Verzeichnis enthält nur 244 Dateien und Verzeichnisse. Auf einem anderen PC habe ich 203 Dateien + Verzeichnisse im Home-Verzeichnis und das "." dir sind nur 4096 Bytes. Dies mag nicht von Belang sein, aber ich habe beim Abspielen von Natural Selection 2 einen enormen Leistungsabfall bemerkt. Insbesondere werden kompilierte Shader und Mods in "~ / .config / Natural Selection 2" gespeichert, und jedes Mal, wenn auf eine Datei zugegriffen wird, wird diese Datei dort gespeichert um dieses riesige ~ 1 Mb Heimverzeichnis zu durchlaufen.
Um die Dinge zu beschleunigen, habe ich sein Verzeichnis nach / opt / confs verschoben (meine Root-Partition befindet sich auf der SSD, das Spiel selbst befindet sich ebenfalls dort, in / opt) und es hat sehr geholfen. Andere Player sind jedoch noch vor mir geladen, sie sind auch auf Windows und SSD. Ich habe auch versucht, --bind dieses Verzeichnis von "/ opt / confs / Natural Selection 2" nach "~ / .config / Natural Selection 2" zu mounten, aber ich habe keine Verbesserung festgestellt.
Was DID hilft, ist das Erstellen eines neuen Benutzers in / opt / home (d. H. Auf einer SSD) und dessen Verwendung zum Starten des Spiels, sodass / home / username nicht mehr verwendet wird. Ich hatte eine große Verbesserung, wie das Doppelte, 37 Sekunden statt 1 Minute 15 Sekunden. Ich habe 32 GB RAM (nur 10-12 sind zu jeder Zeit belegt), daher sollte all dies stark zwischengespeichert werden und die Geschwindigkeit der Festplatte sollte die Pfadüberquerung nicht beeinträchtigen.
Ich denke, die Home-Verzeichnis-Datei ist jetzt voller Lücken, nachdem alte Dateien und. * -Verzeichnisse entfernt wurden, und daher ist die Suche langsam. Ich konnte keinen Weg finden, es kleiner und schneller zu machen, als ein neues Verzeichnis zu erstellen und die Dateien und Verzeichnisse in dieses zu verschieben, das jetzt leere alte Ausgangsverzeichnis zu entfernen und dieses neue umzubenennen. Aber das ist ein hackiger Weg und wenn dies wirklich ein Problem ist, sollte es einen Weg geben, mit spärlichen Verzeichnissen umzugehen. Vor allem, wenn alle sagen, dass ext-Dateisysteme überhaupt keine Defragmentierung benötigen. Nun, für Dateien ist es wahr, aber anscheinend kümmert sich niemand um Verzeichnisse.
bearbeiten: habe vergessen, andere Fälle zu testen, um andere Möglichkeiten auszuschließen. Ich habe das Home-Verzeichnis dieses Benutzers nach / home (auf Festplatte) und das Konfigurationsverzeichnis des Spiels nach / opt / confs (SSD) verschoben. Nun lautet der Pfad also / (SSD) / home / (HDD) /newuser/.config/ (noch HDD) Natural Selection 2 (Symlink zu / opt / confs / Natural Selection 2, SSD). Lädt immer noch ziemlich schnell, kein Unterschied mit reinem SSD-Pfad (43 Sekunden). Dann habe ich eine Kontrollmessung durchgeführt: Ich habe das Ausgangsverzeichnis des neuen Benutzers in das Ausgangsverzeichnis meines Hauptbenutzers verschoben, sodass sein Pfad / home / rkfg / newuser lautet, wobei / home / rkfg das problematische fragmentierte Verzeichnis ist. Das Konfigurationsverzeichnis des Spiels ist immer noch mit SSD verbunden, alles andere ist dasselbe. Und die langen Ladezeiten sind wieder da: 1 Minute 39 Sekunden! Jetzt muss es die große Verzeichnisdatei durchlaufen und da das Spiel es Dutzende Male pro Sekunde tut, summiert sich alles auf. Ja, es ist in diesem Teil nicht sehr optimiert, hoffentlich wird es besser. Der springende Punkt ist jedoch: Riesige und fragmentierte Verzeichnisdateien führen zu längeren Suchzeiten. Und der Cache hilft trotz aller Optimierungen nicht viel.
ls -ld ~
melden, dann? (Beachten Sie auch, dass ext4-Verzeichnisse HTrees sind. Das Betriebssystem muss nicht das gesamte Verzeichnis linear durchsuchen, um eine Datei zu finden. Ja, dies ist stark zwischengespeichert. Der Dentry-Cache ist einer der optimiertesten Kernel-Teile. )> ls -ld ~
drwxrwx---+ 145 rkfg rkfg 995328 Feb 24 12:42 /home/rkfg
Ich habe versucht, diese Situation durch Erstellen von Tausenden von Dateien (mit Touch) in einem neuen Verzeichnis und anschließendes Entfernen wiederherzustellen. Die Verzeichnisgröße wird nach dem Entfernen nicht kleiner, aber die Leistung scheint nicht beeinträchtigt zu sein. Die Verzeichnisdatei ist jedoch nicht fragmentiert (1 Extent), während das Ausgangsverzeichnis 46 Extents hat (wie von Filefrag gemeldet).