Heim  >  Artikel  >  System-Tutorial  >  So funktioniert das Linux-Dateisystem: Alles im Indexknoten und Verzeichniseintrag ist eine Datei

So funktioniert das Linux-Dateisystem: Alles im Indexknoten und Verzeichniseintrag ist eine Datei

WBOY
WBOYnach vorne
2024-04-03 09:16:01422Durchsuche

So funktioniert das Linux-DateisystemIndexknoten und Verzeichniseinträge

Alles in Linux ist eine Datei. Gewöhnliche Dateien, Verzeichnisse, Blockgeräte, Sockets und Pipes müssen ebenfalls über ein einheitliches Dateisystem verwaltet werden.

Linux weist jeder Datei zwei Datenstrukturen zu, einen Indexknoten und einen Verzeichniseintrag, die hauptsächlich zum Aufzeichnen der Metainformationen und der Verzeichnisstruktur der Datei verwendet werden.

Der Indexknoten ist die einzige Kennung jeder Datei. Die Beziehung zwischen dem Verzeichniseintrag und dem Indexknoten ist einfach: eine Datei kann mehrere Namen haben.

Die für Dateien durch Hardlinks erstellten Aliase entsprechen verschiedenen Verzeichniseinträgen. Solche Verzeichniseinträge sind im Wesentlichen immer noch mit derselben Datei verknüpft, sodass ihre Indexknoten dieselben sind.

Die kleinste Einheit einer C-Festplatte ist eine Spur (512B). Allerdings ist jeder Lese- und Schreibvorgang sehr klein und die Effizienz ist sehr gering. Daher organisiert das Dateisystem kontinuierliche Spuren in logischen Blöcken. Jedes Mal wird der logische Block als kleinste Einheit zum Verwalten von Daten verwendet 4 KB, bestehend aus fortlaufenden 8 Spuren.

Zwei Punkte, die es zu beachten gilt:

linux 文件系统优化_优化文件系统的管理_优化文件系统NTFS的管理

Virtuelles Dateisystem

Verzeichniseinträge, Indexknoten, logische Blöcke und Superblöcke bilden die vier Hauptelemente des Linux-Dateisystems. Um verschiedene Dateisysteme zu unterstützen, führt Linux eine konkrete Schicht zwischen dem Benutzerprozess und dem Dateisystem ein, nämlich das virtuelle Dateisystem VFS.

VFS definiert eine Reihe von Datenstrukturen und Standard-Sockets, die von allen Dateisystemen unterstützt werden.

Dateisystem-E/A

E/A-Klassifizierung: gepufferte und ungepufferte E/A, direkte und indirekte E/A, blockierende und nicht blockierende E/A, synchrone und asynchrone E/A.

优化文件系统NTFS的管理_优化文件系统的管理_linux 文件系统优化

Unzureichender Speicherplatz, df hat das Laufwerk C überprüft und festgestellt, dass noch viel Speicherplatz vorhanden ist

Obwohl nicht nur Dateidaten, sondern auch Indexknoten Platz auf dem Laufwerk C belegen, verwenden Sie den folgenden Befehl:

df-i

Wenn Sie feststellen, dass nicht genügend Inodes und ausreichend Speicherplatz auf dem Laufwerk C vorhanden sind, kann dies an zu vielen kleinen Dateien liegen. Dieses Problem kann gelöst werden, indem diese kleinen Dateien gelöscht oder mit anderen C-Laufwerken mit ausreichend Indexknoten verbunden werden.

Der Kernel verwendet den Slab-Mechanismus, um den Cache von Verzeichniseinträgen und Indexknoten zu verwalten. /proc/meminfo gibt nur die Gesamtgröße von Slab an. Für jeden Slab-Cache müssen Sie auch /proc/slabinfo überprüfen.

优化文件系统的管理_优化文件系统NTFS的管理_linux 文件系统优化

Speichersystem-E/A-Funktionsprinzip:

Die E/A des Speichersystems ist im Allgemeinen die langsamste Verbindung im gesamten System. Daher verwendet Linux verschiedene Caching-Mechanismen, um die I/O-Effizienz zu optimieren. Um beispielsweise die Leistung des Dateizugriffs zu optimieren, werden verschiedene Caching-Mechanismen wie Seiten-Cache, Indexknoten-Cache und Verzeichniseintrags-Cache verwendet, um direkte Aufrufe an Blockgeräte der oberen Schicht zu reduzieren. Um die Zugriffseffizienz von Blockgeräten zu optimieren, werden Puffer zum Zwischenspeichern von Blockgerätedaten verwendet.

c Antriebsleistungsindikatoren

Bei der Nutzung wird nur berücksichtigt, ob E/A vorhanden ist, nicht die Größe der E/A. Mit anderen Worten: Wenn die Auslastung 100 % beträgt, akzeptiert das Laufwerk C möglicherweise immer noch neue E/A-Anfragen

Sie können einen bestimmten Indikator nicht isoliert vergleichen, sondern müssen ihn umfassend analysieren, indem Sie das Lese-/Schreibverhältnis, den E/A-Typ (zufällig oder kontinuierlich) und die E/A-Größe bei zufälligen Lese-/Schreibvorgängen in Datenbanken kombinieren kleine Dateien usw. In mehreren Szenarien mit eingebettetem Linux kann IOPS die Gesamtleistung des Systems besser widerspiegeln, in Szenarien mit mehr sequentiellen Lese- und Schreibvorgängen wie Multimedia kann der Durchsatz die Gesamtleistung des Systems besser widerspiegeln

优化文件系统的管理_优化文件系统NTFS的管理_linux 文件系统优化

Wenn Sie auf diese „verrückten Protokollierungsszenarien“ stoßen, können Sie iostat, strace, lsof und andere Tools verwenden, um den Protokollierungsprozess zu lokalisieren, die entsprechende Protokolldatei zu finden und dann die Protokollebene über den Anwendungs-Socket anzupassen, um das Problem zu lösen. Wenn die Anwendung die Protokollebene nicht dynamisch anpassen kann, müssen Sie möglicherweise auch die Konfiguration der Anwendung ändern und die Anwendung neu starten, damit die Konfiguration wirksam wird.

Warum verfolgt Strace diesen Prozess, erkennt aber keine Schreibsystemaufrufe?

Da das Schreiben von Dateien von untergeordneten Threads ausgeführt wird, sehen alle Strace-Tracking-Prozesse den Schreibsystemaufruf nicht. Sie können die Thread-Informationen des Prozesses über pstree anzeigen und dann Strace zum Verfolgen verwenden; oder alle Threads über Strace-fppid verfolgen

Anatomie langsamer Abfragen

top und iostat analysierten die CPU- und Laufwerksauslastung des Systems und entdeckten das E/A-Dilemma des Laufwerks C. Dann haben wir pidstat verwendet und festgestellt, dass das Problem durch mysqld verursacht wurde. Dann haben wir Strace und Lsof (Linux-Dateisystemoptimierung) verwendet, um die Datei zu finden, die mysqld gelesen hat. Gleichzeitig haben wir anhand des Namens und Pfads der Datei herausgefunden, welche Datenbank und Datentabelle mysqld betreibt. Basierend auf diesen Informationen haben wir festgestellt, dass es sich um ein langsames Abfrageproblem handelte, das dadurch verursacht wurde, dass kein Index verwendet wurde.

Nachdem der Datendienst gestoppt wurde, verschwindet das E/A-Problem.

优化文件系统的管理_优化文件系统NTFS的管理_linux 文件系统优化Die Datentabelle, auf die die Fallanwendung zugreift, basiert auf der MyISAM-Engine. Eine Funktion von MyISAM besteht darin, dass nur der Index im Videospeicher zwischengespeichert wird und die Daten nicht zwischengespeichert werden. Wenn der Abfragesatz den Index nicht verwenden kann, muss daher die Datentabelle aus der Datenbankdatei in den Videospeicher gelesen und dann verarbeitet werden.

dataservice gibt den Dateicache ständig frei, was dazu führt, dass MySQL den Cache des Laufwerks C nicht verwendet.

Redis verwendete zunächst top und iostat, um die CPU-, Speicher- und Laufwerksauslastung des Systems zu analysieren, stellte jedoch fest, dass es bei den Systemressourcen kein Dilemma gab. Für die weitere Analyse benötigen Sie ein gewisses Verständnis der Funktionsweise des Systems und der Anwendungen. Beispielsweise sollte es im morgigen Fall beim Abfragen des Caches keine große Anzahl von C-Festplatten-E/A-Schreibvorgängen geben, obwohl es bei der C-Festplatten-E/A kein Dilemma gibt. In diesem Sinne verwendeten wir weiterhin eine Reihe von Tools wie pidstat, strace, lsof und nsenter, um zwei potenzielle Probleme zu finden. Das eine war die unangemessene Konfiguration von Redis und das andere der Missbrauch von Redis durch Python-Anwendungen. I/O-Benchmark-Testtools

fio(flexibler I/OTester)

I/O-Leistungsoptimierung

App-Optimierung

Ersetzen Sie zufällige Schreibvorgänge durch Anhänge-Schreibvorgänge, reduzieren Sie die Abfragekosten und erhöhen Sie die E/A-Schreibrate. Linux-Dateisystemoptimierung: Nutzen Sie den Systemcache vollständig aus, um die Anzahl der tatsächlichen E/A-Vorgänge zu erhöhen Erstellen Sie Ihr eigenes Caching oder verwenden Sie ein externes Caching-System wie Redis. Auf diese Weise können einerseits die zwischengespeicherten Daten und der Lebenszyklus innerhalb der Anwendung gesteuert werden, andererseits können auch die Auswirkungen anderer Anwendungen, die den Cache verwenden, auf sich selbst verringert werden. Von der C-Standardbibliothek bereitgestellte Bibliotheksfunktionen wie fopen und fread nutzen den Cache der Standardbibliothek, um den Betrieb des C-Laufwerks zu reduzieren. Wenn Sie Systemaufrufe wie „Öffnen“ und „Lesen“ direkt verwenden, können Sie nur den vom Betriebssystem bereitgestellten Seiten-Cache und Puffer verwenden, und es ist kein Cache für Bibliotheksfunktionen verfügbar, wenn Sie häufig denselben C-Speicherplatz lesen und schreiben müssen , Sie können mmap anstelle von read verwenden, um die Anzahl der Kopien des Videospeichers zu reduzieren. Versuchen Sie, Schreibanforderungen zusammenzuführen, anstatt jede Anforderung synchron auf das Laufwerk c zu schreiben. Sie können fsync() anstelle von O_SYNC verwenden, um dieselbe Datei in mehreren Anwendungen gemeinsam zu nutzen. Wenn Sie die Linux-Speicherverwaltung auf dem Laufwerk C verwenden, wird empfohlen, sicherzustellen, dass die E/A nicht vollständig von einer Anwendung belegt wird Verwenden Sie das E/A-Subsystem von cgroups, um die IOPS und den Durchsatz des Prozesses/der Prozessgruppe zu begrenzen. Bei Verwendung des CFQ-Planers können Sie ionice verwenden, um die E/A-Planungspriorität des Prozesses anzupassen, insbesondere um die E/A zu verbessern Priorität der Kernanwendungen. ionice unterstützt drei Prioritätsklassen: Idle, Best-effort und Realtime. Unter diesen unterstützen Best-Effort und Realtime auch Stufen von 0 bis 7. Je kleiner der Wert, desto höher die Prioritätsstufe.

Das obige ist der detaillierte Inhalt vonSo funktioniert das Linux-Dateisystem: Alles im Indexknoten und Verzeichniseintrag ist eine Datei. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:itcool.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen