Considerazioni sulle prestazioni per NTFS transazionale
Ntfs transazionale (TxF) è stato progettato con attenzione per le prestazioni e in genere eseguirà prestazioni migliori rispetto alle alternative transazionali per utilizzo generico in scenari simili. Tuttavia, le transazioni del file system presentano un sovraccarico maggiore rispetto alle operazioni non transazionate e una riduzione delle prestazioni di I/O rispetto alle operazioni di I/O non transazionate deve essere prevista. Le applicazioni critiche per le prestazioni devono eseguire un ciclo di qualificazione dell'adozione della tecnologia, valutando l'impatto sulle prestazioni delle operazioni di file system transazionate.
Panoramica delle operazioni TxF
TxF usa la registrazione annulla per registrare le modifiche necessarie per inserire nuovamente il file system in uno stato coerente, definito anche rollback, dovrebbe verificarsi un'interruzione delle transazioni. Questa registrazione di annullamento genera operazioni di I/O aggiuntive e rappresenta l'origine del sovraccarico delle prestazioni TxF rispetto alle operazioni non transazionali del file system.
Un riepilogo generale del funzionamento di TxF è il seguente:
- Man mano che una transazione viene eseguita, TxF scrive i record di annullamento nel file di log per ogni modifica apportata al file system. Se si verifica un'interruzione, questi record di annullamento vengono analizzati per inserire nuovamente il file system nello stato precedente all'avvio della transazione.
- Un record di annullamento modifica dei metadati descrive una modifica solo ai metadati del file system. Alcuni esempi di questa operazione sono spostamenti, ridenominazione, accodamento e modifiche dell'attributo. Per le modifiche dei metadati annullare i record, tutte le informazioni necessarie per annullare la modifica si trovano nel record e archiviate nel file di log.
- Un record di sovrascrivere undo descrive una sovrascrittura di una parte di un file. Quando si verifica una sovrascrittura di un file, il contenuto originale del file viene archiviato in un file di annullamento speciale in una directory nascosta e la sovrascrivere undo record punta a questo file. Quando gli aggiornamenti dei file vengono scaricati dalla cache al disco, è necessario scaricare anche il contenuto del file di annullamento, quindi una sovrascrittura di file transazionata potrebbe generare fino a due operazioni di I/O aggiuntive aggiuntive: una per leggere i dati precedenti e una per scriverla nel file di annullamento. Queste operazioni di I/O aggiuntive sono un costo delle prestazioni di TxF.
- Quando si verifica un commit, TxF scarica prima tutte le informazioni di annullamento, quindi scarica le modifiche effettive del file e quindi scrive e scarica un record di commit. Se non sono presenti file di annullamento da scaricare, l'unico sovraccarico TxF aggiuntivo relativo all'I/O non transazionato è lo scaricamento stesso del log. Tuttavia, gli scaricamenti del log comportano scritture sequenziali di grandi dimensioni efficienti in modo che il costo delle prestazioni sia minimo.
- TxF è ottimizzato per il commit. È previsto che la maggior parte delle transazioni avrà esito positivo e non deve eseguire il rollback, pertanto tutti i record di annullamento per una transazione devono essere inutilizzati. Dal punto di vista delle prestazioni, le operazioni di commit TxF sono veloci e rollback sono a elevato utilizzo di risorse.
- Il rollback è più intensivo delle risorse rispetto al commit. Durante il rollback, tutte le modifiche apportate nella transazione devono essere annullate. In generale, la durata del rollback può essere approssimativamente uguale a quella richiesta in origine per apportare le modifiche. Ad esempio, se è necessario 1 secondo per apportare tutte le modifiche, potrebbe richiedere circa 1 secondo per annullarli. Per transazioni molto lunghe, il rollback può creare un impatto aggiuntivo sulle prestazioni. Ad esempio, l'ora di avvio del sistema può essere ritardata se il sistema deve eseguire automaticamente il rollback di una transazione nel caso in cui il sistema si arresta e deve eseguire un riavvio non programmato.
Le conclusioni di riepilogo sulle prestazioni che possono essere estratte dall'elenco precedente sono le seguenti:
- Il costo delle prestazioni di TxF per le transazioni che coinvolgono le sovrascrizioni di file può essere significativo.
- Il costo delle prestazioni di TxF per le transazioni che coinvolgono solo le operazioni di metadati può essere relativamente basso, purché vengano usate transazioni di grandi dimensioni. Una transazione di grandi dimensioni è quando sono presenti molti record di annullamento per ogni record di commit.
Consigli per prestazioni ottimali
Ammortizzare il sovraccarico txF rispetto alle transazioni più grandi. Ad esempio, se si dispone di N set di modifiche da apportare in cui ogni modifica ha passaggi M e si dispone dell'opzione per eseguire questa operazione come transazioni N di passaggi M ognuno o come singola transazione con i passaggi M*N , quest'ultima opzione sarà più efficiente.
Si consideri l'impatto possibile sull'avvio di transazioni molto grandi. Come indicato in precedenza, il rollback può essere lento e ritarderà il tempo di avvio se il sistema deve eseguire rollback automatici come ora di avvio. Maggiore è la transazione, più lunga è il ritardo.
Mantenere le transazioni per la maggior parte delle operazioni sui metadati. Si tratta di ciò che TxF è ottimizzato per e, in generale, le prestazioni si trovano nello stesso modo di I/O di file non transazionati per transazioni di metadati di grandi dimensioni. Esempi di funzioni TxF efficienti dei metadati sono MoveFileTransacted, SetFileAttributesTransacted, CopyFileTransacted, DeleteFileTransacted, CreateHardLinkTransacted e scritture accodate (chiamate alla funzione WriteFile quando il puntatore al file come alla fine del file o EOF). Un esempio di operazioni non metadati a elevato utilizzo di risorse è chiamate alla funzione WriteFile quando il puntatore al file non è in EOF.
Riepilogo delle aspettative di prestazioni TxF
Per gli aggiornamenti sul posto, le sovrascrizioni a una sezione di un file saranno molto più lente rispetto all'I/O dei file non transazionati, mentre le prestazioni TxF per le operazioni dei metadati del file system (ad esempio, creare, spostare e accodare) è paragonabile a I/O file non transazionati per transazioni di grandi dimensioni.