Condividi tramite


Gestione cache dei nomi

La struttura NAME_CACHE memorizza nella cache le stringhe di nome delle operazioni recenti eseguite nel server in modo che il client possa eliminare le richieste ridondanti. Ad esempio, se una richiesta aperta non è riuscita di recente con un messaggio "file non trovato" e l'applicazione client prova nuovamente la richiesta aperta con una stringa maiuscola e il mini-reindirizzamento di rete non supporta i nomi con distinzione tra maiuscole e minuscole, RDBSS può non riuscire immediatamente la richiesta senza colpire il server.

In generale, l'algoritmo consiste nell'inserire un limite di tempo e di conteggio delle operazioni sulla voce NAME_CACHE. La finestra temporale è in genere due secondi. Quindi, se la voce NAME_CACHE è maggiore di due secondi, la corrispondenza avrà esito negativo e la richiesta verrà inviata al server. Se la richiesta ha esito negativo nuovamente nel server, la voce NAME_CACHE viene aggiornata con un'altra finestra a due secondi. Se il conteggio delle operazioni di richiesta non corrisponde, una o più richieste sono state inviate al server, che potrebbero rendere non valida la voce NAME_CACHE. Di nuovo, questa operazione verrà inviata al server.

Una struttura NAME_CACHE ha una parte pubblica esposta al mini-reindirizzamento di rete, MRX_NAME_CACHE e una sezione privata da usare esclusivamente da RDBSS. La parte mini-redirector ha un campo di contesto, NTSTATUS, per il risultato di un'operazione del server precedente in questa voce di nome e un puntatore di estensione del contesto per un'archiviazione specifica del mini-reindirizzamento che può essere co-allocata con la struttura NAME_CACHE. Per altre informazioni, vedere RxNameCacheInitialize.

Per la rete Windows, il conteggio delle operazioni SMB è un esempio di stato specifico del mini-redirector, che potrebbe essere salvato nel campo contesto di MRX_NAME_CACHE. Quando viene chiamato RxNameCacheCheckEntry , eseguirà un controllo di uguaglianza tra il campo di contesto e un parametro fornito come parte della ricerca di una corrispondenza nella cache dei nomi. Quando viene creata o aggiornata una voce di NAME_CACHE, è il processo del mini-reindirizzamento di rete per fornire un valore appropriato per questo campo e la durata, in secondi, per la voce NAME_CACHE.

La parte RDBSS privata della struttura NAME_CACHE contiene il nome come stringa Unicode, un valore hash del nome per velocizzare le ricerche, un'ora di scadenza della voce e un flag che indica se il server supporta nomi con distinzione tra maiuscole e minuscole.

La struttura NAME_CACHE_CONTROL gestisce una determinata cache dei nomi. Include un elenco gratuito, un elenco attivo e un blocco per sincronizzare gli aggiornamenti. La struttura NAME_CACHE_CONTROL include anche campi per archiviare il numero corrente di voci NAME_CACHE allocata, un valore per il numero massimo di voci da allocare, le dimensioni di qualsiasi risorsa di archiviazione di rete-mini-reindirizzamento aggiuntiva usata per ogni voce NAME_CACHE e i valori per le statistiche (numero di volte in cui la cache è stata aggiornata, verificata, una corrispondenza valida è stata restituita, e quando il mini-reindirizzamento di rete ha salvato un'operazione di rete. Il campo MaximumEntries limita il numero di voci NAME_CACHE create nel caso in cui un programma non corretto generasse un numero elevato di richieste aperte con nomi di file non validi che utilizzano grandi quantità di memoria.

Attualmente sono disponibili cache dei nomi gestite da RDBSS per OBJECT_NAME_NOT_FOUND. Per questa cache dei nomi, viene mantenuta una finestra a due secondi, che viene invalidata se un'operazione viene inviata al server. Ciò potrebbe verificarsi quando l'applicazione client ha un file (esempio1) aperto che un'applicazione nel server potrebbe usare per segnalare la creazione di un file diverso (esempio2) nel server. Quando il client legge il primo file (sample1) e apprende che il secondo file (sample2) è stato creato nel server, quindi un hit nella cache dei nomi corrispondente al secondo file (sample2) non può restituire un errore. Questa ottimizzazione gestisce solo il caso delle operazioni successive di apertura dei file nello stesso file che non esiste ancora. Questo scenario si verifica usando Microsoft Word.

Le routine di gestione della cache dei nomi RDBSS includono quanto segue:

Routine Descrizione

RxNameCacheActivateEntry

Questa routine accetta una voce della cache dei nomi e aggiorna l'ora di scadenza e il contesto del mini-reindirizzamento di rete. Inserisce quindi la voce nell'elenco attivo.

RxNameCacheCheckEntry

Questa routine controlla una voce NAME_CACHE per la validità.

RxNameCacheCreateEntry

Questa routine alloca e inizializza una struttura NAME_CACHE con la stringa di nome specificata. Si prevede che il chiamante inizializzi eventuali elementi mini-reindirizzamento di rete aggiuntivi del contesto della cache dei nomi e quindi inserisca la voce nell'elenco attivo della cache dei nomi.

RxNameCacheExpireEntry

Questa routine inserisce una voce NAME_CACHE nell'elenco gratuito.

RxNameCacheExpireEntryWithShortName

Questa routine scade tutte le voci NAME_CACHE il cui prefisso di nome corrisponde al nome di file breve specificato.

RxNameCacheFetchEntry

Questa routine cerca una corrispondenza con una stringa di nome specificata per una voce NAME_CACHE.

RxNameCacheFinalize

Questa routine rilascia l'archiviazione per tutte le voci NAME_CACHE associate a una struttura NAME_CACHE_CONTROL.

RxNameCacheFreeEntry

Questa routine rilascia l'archiviazione per una voce NAME_CACHE e decresce il conteggio delle voci della cache NAME_CACHE associate a una struttura NAME_CACHE_CONTROL.

RxNameCacheInitialize

Questa routine inizializza una cache dei nomi (una struttura di NAME_CACHE_CONTROL).