Leistungsüberlegungen für Transaktions-NTFS
Transactional NTFS (TxF) wurde sorgfältig für die Leistung entwickelt und führt in der Regel besser aus als allgemeine Transaktionsalternativen in ähnlichen Szenarien. Dateisystemtransaktionen weisen jedoch mehr Mehraufwand auf als nicht durchgeführte Vorgänge, und eine verringerung der E/A-Leistung im Vergleich zu nicht transaktionenten E/A-Vorgängen ist zu erwarten. Leistungskritische Anwendungen sollten einen Qualifizierungszyklus für die Technologieakzeptanz durchführen und die Leistungsauswirkungen von transaktionenten Dateisystemvorgängen bewerten.
Übersicht über TxF-Vorgänge
TxF verwendet Rückgängigmachen Protokollierung, um die erforderlichen Änderungen aufzuzeichnen, um das Dateisystem wieder in einen konsistenten Zustand zu versetzen, auch als Rollback bezeichnet, sollte eine Transaktion abgebrochen werden. Diese Rückgängig-Protokollierung generiert zusätzliche E/A und ist die Quelle des TxF-Leistungsaufwands im Vergleich zu vorgängen nicht transaktionalen Dateisystemen.
Eine allgemeine Zusammenfassung der Funktionsweise von TxF lautet wie folgt:
- Während einer Transaktion schreibt TxF Rückgängigmachen Datensätze in die Protokolldatei für jede Änderung, die sie am Dateisystem vornimmt. Wenn ein Abbruch auftritt, werden diese Rückgängig-Datensätze analysiert, um das Dateisystem wieder in den Zustand zu versetzen, in dem es vor dem Beginn der Transaktion lag.
- Eine Metadatenänderung Rückgängig-Datensatzes beschreibt eine Änderung nur für die Metadaten des Dateisystems. Einige Beispiele hierfür sind Verschiebungen, Umbenennungen, Anfüge- und Attributänderungen. Bei Metadatenänderungs-Rückgängig-Datensätzen sind alle informationen, die zum Rückgängigmachen der Änderung erforderlich sind, im Datensatz enthalten und in der Protokolldatei gespeichert.
- Ein überschreiben Rückgängig-Datensatzes beschreibt eine Überschreibung eines Teils einer Datei. Wenn eine Datei überschrieben wird, werden die ursprünglichen Inhalte der Datei in einer speziellen Rückgängig-Datei in einem ausgeblendeten Verzeichnis gespeichert, und der Überschreiben des Rückgängig-Datensatzes verweist auf diese Datei. Wenn Dateiaktualisierungen schließlich vom Cache auf den Datenträger geleert werden, muss der Inhalt der Rückgängig-Datei ebenfalls geleert werden, sodass eine überschriebene Datei bis zu zwei zusätzliche zufällige E/A-Vorgänge generieren kann: eine zum Lesen der alten Daten und eines zum Schreiben in die Rückgängig-Datei. Diese zusätzlichen E/A-Vorgänge sind eine Leistungskosten von TxF.
- Wenn ein Commit auftritt, löscht TxF zuerst alle Rückgängig-Informationen, löscht dann die tatsächlichen Dateiänderungen und schreibt und löscht dann einen Commit-Datensatz. Wenn keine Rückgängig-Dateien zum Leeren vorhanden sind, ist der einzige zusätzliche TxF-Aufwand im Verhältnis zu nicht durchgeführten E/A-Vorgängen das Protokoll selbst geleert. Protokollspülungen führen jedoch zu effizienten sequenziellen Schreibvorgängen, sodass die Leistungskosten minimal sind.
- TxF ist für commit optimiert. Es wird erwartet, dass die meisten Transaktionen erfolgreich sind und kein Rollback erforderlich ist, daher werden alle Rückgängig-Datensätze für eine Transaktion voraussichtlich nicht verwendet. Aus Leistungsgründen sind TxF-Commitvorgänge schnell und Rollbacks ressourcenintensiv.
- Rollback ist ressourcenintensiver als Commit. Während des Rollbacks müssen alle Änderungen, die in der Transaktion vorgenommen wurden, nicht ausgeführt werden. Im Allgemeinen kann die Rollbackdauer ungefähr dasselbe sein, wie es dauerte, um die Änderungen ursprünglich vorzunehmen. Wenn es beispielsweise 1 Sekunde dauerte, um alle Änderungen vorzunehmen, kann es etwa 1 Sekunde dauern, um sie rückgängig zu machen. Bei sehr langen Transaktionen kann ein Rollback zusätzliche Leistungseinbußen haben. Die Systemstartzeit kann z. B. verzögert werden, wenn das System eine Transaktion automatisch zurücksetzen muss, wenn das System nicht mehr reagiert und einen ungeplanten Neustart durchführen muss.
Die zusammenfassenden Schlussfolgerungen über die Leistung, die aus der vorherigen Liste gezogen werden können, sind wie folgt:
- Die Leistungskosten von TxF für Transaktionen mit Dateiüberschreibungen können erheblich sein.
- Die Leistungskosten von TxF für Transaktionen, die nur Metadatenvorgänge umfassen, können relativ niedrig sein, vorausgesetzt, große Transaktionen werden verwendet. Eine große Transaktion ist, wenn für jeden Commit-Datensatz viele Rückgängig-Datensätze vorhanden sind.
Empfehlungen für optimale Leistung
TxF-Overhead über größere Transaktionen amortisieren. Wenn Sie beispielsweise über N Änderungen verfügen, die vorgenommen werden müssen, wenn jede Änderung über M Schritte verfügt und Sie dies entweder als N Transaktionen mit M Schritten ausführen oder alles als einzelne Transaktion mit M*N Schritten ausführen können, letztere Option wäre effizienter.
Berücksichtigen Sie die möglichen Auswirkungen auf den Start sehr großer Transaktionen. Wie bereits erwähnt, kann ein Rollback langsam sein und verzögert die Startzeit, wenn das System automatische Rollbacks als Startzeit ausführen muss. Je größer die Transaktion, desto länger die Verzögerung.
Behalten Sie Transaktionen in den meisten Metadatenvorgängen bei. Dies ist, was TxF für große Metadatentransaktionen optimiert ist und im Allgemeinen die Leistung ungefähr mit nicht durchgeführten Datei-E/A-Transaktionen übereinstimmt. Beispiele für effiziente Metadaten-TxF-Funktionen sind MoveFileTransacted, SetFileAttributesTransacted, CopyFileTransacted, DeleteFileTransacted, CreateHardLinkTransacted, und angefügte Schreibvorgänge (Aufrufe der WriteFile--Funktion, wenn der Dateizeiger am Ende der Datei, oder EOF-). Ein Beispiel für ressourcenintensive nicht metadatenintensive Vorgänge sind Aufrufe der WriteFile- Funktion, wenn sich der Dateizeiger nicht im EOF befindet.
Zusammenfassung der TxF-Leistungserwartungen
Bei direkten Aktualisierungen werden Überschreibungen in einen Abschnitt einer Datei wesentlich langsamer als bei nicht durchgeführten Datei-E/A-Vorgängen, während die TxF-Leistung für Metadatenvorgänge des Dateisystems (z. B. Erstellen, Verschieben und Anfügen) mit nicht durchgeführten Datei-E/A für große Transaktionen vergleichbar ist.