FSCTL_FILE_LEVEL_TRIM codice di controllo
Il codice di controllo FSCTL_FILE_LEVEL_TRIM fornisce un metodo per tagliare gli intervalli di dati con in un file. Gli intervalli di taglio dei file vengono convertiti nel dispositivo di archiviazione sottostante che consente di ottimizzare l'organizzazione delle risorse per migliorare le prestazioni di accesso. Una richiesta di FSCTL_FILE_LEVEL_TRIM consente a un file del disco virtuale di rimanere allocati a una dimensione fissa, tagliando allo stesso tempo l'archiviazione fisica in modo che corrisponda agli intervalli di dati liberati nel disco virtuale.
Per eseguire questa operazione, chiamare FltFsControlFile o ZwFsControlFile con i parametri seguenti.
Parametri
Istanza [in]: solo FltFsControlFile . Puntatore dell'istanza opaca per il chiamante. Questo parametro è obbligatorio e non può essere NULL.
FileObject [in]: solo FltFsControlFile . Puntatore all'oggetto file al file con i dati da tagliare. Questo parametro è obbligatorio e non può essere NULL.
FileHandle [in]: Solo ZwFsControlFile . Handle di file del file con i dati da tagliare. Questo parametro è obbligatorio e non può essere NULL.
FsControlCode [in]: codice di controllo per l'operazione. Usare FSCTL_FILE_LEVEL_TRIM per questa operazione.
InputBuffer [in]: puntatore a una struttura FILE_LEVEL_TRIM che contiene una matrice di intervalli di taglio per il file.
InputBufferLength [in]: dimensioni, in byte, del buffer a cui punta il parametro InputBuffer . Questo valore deve essere almeno sizeof(FILE_LEVEL_TRIM).
OutputBuffer [out]: puntatore a una struttura di FILE_LEVEL_TRIM_OUTPUT facoltativa che riceve il risultato dell'operazione di taglio.
OutputBufferLength [out]: dimensioni, in byte, del buffer a cui punta il parametro OutputBuffer . Questo valore deve essere almeno sizeof(FILE_LEVEL_TRIM_OUTPUT) se FILE_LEVEL_TRIM_OUTPUT è incluso in OutputBuffer. In caso contrario, questo valore è impostato su 0.
Blocco di stato
FltFsControlFile o ZwFsControlFile restituisce STATUS_SUCCESS o probabilmente uno dei valori seguenti.
Codice | Significato |
---|---|
STATUS_INVALID_PARAMETER | Il file da tagliare è compresso o crittografato, la lunghezza del buffer di input o di output non è valida o non viene specificato alcun intervallo di taglio. |
STATUS_INSUFFICIENT_RESOURCES | Un'allocazione interna delle risorse non è riuscita. |
STATUS_FILE_LOCK_CONFLICT | Un intervallo di taglio fa parte di un intervallo di byte bloccato in precedenza. |
STATUS_VOLUME_DISMOUNTED | Il volume in cui risiede il file non è montato. |
STATUS_PURGE_FAILED | Eliminazione della cache non riuscita per un intervallo di taglio. |
STATUS_NO_RANGES_PROCES edizione Standard D | Nessun intervallo nella matrice di intervallo di taglio è stato elaborato. |
Osservazioni:
L'esecuzione di tagli su determinati dispositivi di archiviazione può migliorare significativamente le prestazioni di scrittura future. Trim restituisce anche le risorse al pool di allocazione nei sistemi di archiviazione di cui viene eseguito il thin provisioning. Quando i file vengono eliminati in un disco virtuale, le dimensioni del file del disco virtuale stesso non vengono modificate. Gli intervalli di dati liberati nel disco virtuale non vengono eliminati nell'archiviazione fisica in cui risiede il file del disco virtuale. Un dispositivo disco virtuale può notificare al file system che determinati intervalli di dati in un file del disco virtuale possono essere eliminati nel dispositivo di archiviazione fisica con una richiesta di FSCTL_FILE_LEVEL_TRIM . Il file system insecherà quindi una richiesta di taglio per l'archiviazione fisica. Una richiesta di FSCTL_FILE_LEVEL_TRIM può essere emessa anche dalle applicazioni di servizio che gestiscono file di scambio di database o memoria.
Il codice di controllo FSCTL_FILE_LEVEL_TRIM tenterà di tagliare gli intervalli di byte selezionati di un file da un dispositivo di archiviazione. Gli intervalli di byte sono contenuti nella matrice Ranges nella struttura FILE_LEVEL_TRIM . Incluso nella matrice Ranges sono una o più strutture FILE_LEVEL_TRIM_RANGE .
L'inclusione di intervalli sovrapposti nella matrice di intervalli non è necessariamente una condizione di errore. Ciò dipende dal modo in cui l'elaborazione extent viene gestita dalla risorsa di archiviazione sottostante.
Gli intervalli tagliati vengono eliminati come pagine dalla cache del file system. Per trovare la corrispondenza con le dimensioni della pagina della cache, la lunghezza di un intervallo di taglio viene adattata a un multiplo di PAGE_SIZE. Inoltre, se un offset di intervallo di taglio non inizia in corrispondenza di un limite di pagina, viene allineato al limite della pagina successiva. Con questi vincoli, le lunghezze dell'intervallo di taglio ridurranno quando gli offset non sono allineati alla pagina o le lunghezze non sono una dimensione di pagina multipla. Una lunghezza dell'intervallo di taglio può ridursi a 0 se la lunghezza originale è minore di due pagine e l'offset non è allineato alla pagina.
Se viene specificato un intervallo di taglio o una pagina regolata oltre la fine del file (EOF), l'intervallo viene ignorato. Tuttavia, un offset di intervallo allineato prima di EOF ma con una lunghezza che estende oltre EOF verrà modificato in base a una dimensione di pagina multipla <= EOF.
Il taglio a livello di file non è supportato per i file compressi o crittografati (file con ATTRIBUTE_FLAG_COMPRESSION_MASK o ATTRIBUTE_FLAG_ENCRYPTED attributi impostati).
Un taglio di file viene eseguito all'esterno di qualsiasi transazione. Impossibile eseguire il rollback dell'operazione di taglio.
Con file sparse (file con il set di attributi ATTRIBUTE_FLAG_SPAR edizione Standard), viene ignorato un intervallo di taglio in una parte non allocata del file.
Se incluso in OutputBuffer, il membro NumRangesProcessed del FILE_LEVEL_TRIM_OUTPUT indicherà il numero di intervalli di taglio elaborati correttamente. Se si verifica un errore durante l'elaborazione degli intervalli di taglio, NumRangesProcessed specifica l'indice iniziale degli intervalli non elaborati rimanenti, terminando con il membro NumRanges di FILE_LEVEL_TRIM - 1.
Requisiti
Tipo di requisito | Requisito |
---|---|
Client minimo supportato | Windows 8 |
Intestazione | Ntifs.h (include Ntifs.h o Fltkernel.h) |