


So funktioniert das Linux-Dateisystem: Alles im Indexknoten und Verzeichniseintrag ist eine Datei
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:
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.
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.
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
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.
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

VS -Code -Erweiterungen stellen böswillige Risiken dar, wie das Verstecken von böswilligem Code, das Ausbeutetieren von Schwachstellen und das Masturbieren als legitime Erweiterungen. Zu den Methoden zur Identifizierung böswilliger Erweiterungen gehören: Überprüfung von Verlegern, Lesen von Kommentaren, Überprüfung von Code und Installation mit Vorsicht. Zu den Sicherheitsmaßnahmen gehören auch: Sicherheitsbewusstsein, gute Gewohnheiten, regelmäßige Updates und Antivirensoftware.

Visual Studio Code (VSCODE) wurde von Microsoft entwickelt, das mit dem Elektronen -Framework erstellt wurde und hauptsächlich in JavaScript geschrieben wurde. Es unterstützt eine breite Palette von Programmiersprachen, einschließlich JavaScript, Python, C, Java, HTML, CSS usw., und kann durch Erweiterungen Unterstützung für andere Sprachen unterstützen.

VS Code funktioniert gut bei macOS und kann die Entwicklungseffizienz verbessern. Zu den Installations- und Konfigurationsschritten gehören: Installieren von VS -Code und Konfiguration. Installieren Sie sprachspezifische Erweiterungen (z. B. Eslint für JavaScript). Installieren Sie die Erweiterungen sorgfältig, um zu vermeiden, dass übermäßige Start -up -Verlangsamungen nachkommen. Erfahren Sie grundlegende Merkmale wie GIT -Integration, Terminal und Debugger. Legen Sie die entsprechenden Themen- und Code -Schriftarten fest. Beachten Sie potenzielle Probleme: Erweiterte Kompatibilität, Dateiberechtigungen usw.

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Ja, VS -Code kann den Python -Code ausführen. Um Python effizient in VS -Code auszuführen, führen Sie die folgenden Schritte aus: Installieren Sie den Python -Interpreter und konfigurieren Sie Umgebungsvariablen. Installieren Sie die Python -Erweiterung im VS -Code. Führen Sie den Python -Code im Terminal von VS Code über die Befehlszeile aus. Verwenden Sie die Debugging -Funktionen und die Codeformatierung von VS Code, um die Entwicklungseffizienz zu verbessern. Nehmen Sie gute Programmiergewohnheiten ein und verwenden Sie Tools für Leistungsanalyse, um die Codeleistung zu optimieren.

Ausführen von Aufgaben in VSCODE: Erstellen Sie Tasks.json -Datei, Versions- und Aufgabenliste angeben. Konfigurieren Sie den Beschriftung, den Befehl, die Argumente und die Art der Aufgabe; Speichern und laden Sie die Aufgabe neu; Führen Sie die Aufgabe mit der Verknüpfungsschlüssel -Strg -Verschiebung B (macOS für CMD Shift B) aus.

Python zeichnet sich in Automatisierung, Skript und Aufgabenverwaltung aus. 1) Automatisierung: Die Sicherungssicherung wird durch Standardbibliotheken wie OS und Shutil realisiert. 2) Skriptschreiben: Verwenden Sie die PSUTIL -Bibliothek, um die Systemressourcen zu überwachen. 3) Aufgabenverwaltung: Verwenden Sie die Zeitplanbibliothek, um Aufgaben zu planen. Die Benutzerfreundlichkeit von Python und die Unterstützung der reichhaltigen Bibliothek machen es zum bevorzugten Werkzeug in diesen Bereichen.
