Condividi tramite


Esempi di blocchi opportunistici

Negli esempi seguenti vengono mostrati i movimenti dei messaggi SMB e i dati come blocchi opportunistici vengono eseguiti e interrotti. Si noti che i client possono memorizzare nella cache i dati dell'attributo file e i dati dei file.

Si noti anche che questi esempi si basano su situazioni in cui le applicazioni client richiedono blocchi opportunistici dai server remoti. Questi processi vengono avviati automaticamente dal reindirizzamento di rete e dal server remoto, senza alcun coinvolgimento diretto da parte dell'applicazione client o delle applicazioni. I processi descritti da questi esempi possono essere generalizzati in situazioni in cui le applicazioni client locali richiedono direttamente blocchi opportunistici dal file system locale, con l'eccezione che non è coinvolto alcun scambio di dati sulla rete.

Blocco opportunistico livello 1

Il diagramma seguente mostra una visualizzazione del traffico di rete di un blocco opportunistico di livello 1 in un file. Le frecce indicano la direzione dello spostamento dei dati, se presente.

Evento Client X Server Client Y
1 Apre il file, il blocco di livello 1 delle richieste ==>
2 <== Concede il blocco opportunistico livello 1
3 Esegue operazioni di lettura, scrittura e altre operazioni ==>
4 <== Richieste di apertura file
5 <== Interrompe il blocco opportunistico
6 Elimina i dati in lettura
7 Scrive i dati ==>
8 Invia un messaggio "close" o "done" ==>
9 Okays open operation ==>
10 Esegue operazioni di lettura, scrittura e altre operazioni ==> <== Esegue operazioni di lettura, scrittura e altre operazioni

 

In caso 1, il client X apre un file e come parte dell'operazione aperta richiede un blocco opportunistico di livello 1 nel file. In caso 2, il server concede il blocco di livello 1 perché nessun altro client ha il file aperto. Il client procede per accedere al file in modo consueto in caso 3.

In caso 4, il client Y tenta di aprire il file e richiede un blocco opportunistico. Il server vede che il client X ha il file aperto. Il server ignora la richiesta di Y mentre il client X scarica i dati di scrittura e abbandona la cache di lettura per il file.

Il server forza X a pulire inviando a X un messaggio SMB che interrompe il blocco opportunistico, evento 5. Client X "silently" elimina i dati in lettura; in altre parole, questo processo non genera alcun traffico di rete. In caso 7, il client X scrive i dati di scrittura memorizzati nella cache nel server. Quando il client X viene eseguito la scrittura di dati memorizzati nella cache nel server, client X invia un messaggio "close" o "done" al server, evento 8.

Dopo che il server ha informato che il client X viene scaricato nella cache di scrittura nel server o ha chiuso il file, il server può aprire il file per Y client, nel caso 9. Poiché il server dispone ora di due client con lo stesso file aperto, concede un blocco opportunistico a nessuno dei due client. Entrambi i client passano alla lettura dal file e uno o nessuno scrive nel file.

Blocco opportunistico batch

Il diagramma seguente mostra una visualizzazione del traffico di rete di un blocco opportunistico batch. Le frecce indicano la direzione dello spostamento dei dati, se presente.

Evento Client X Server Client Y
1 Apre il file, richiede blocco batch ==>
2 <== Concede il blocco opportunistico batch
3 File di lettura ==>
4 <== Invia dati
5 Chiude il file
6 Apre il file
7 Cerca dati
8 Legge i dati ==>
9 <== Invia dati
10 Chiude il file
11 <== Apre il file
12 <== Interrompe il blocco opportunistico
13 Chiude il file ==>
14 Okays open operation ==>
15 <== Esegue operazioni di lettura, scrittura e altre operazioni

 

Nel blocco opportunistico batch, il client X apre un file, l'evento 1 e il server concede al client X un blocco batch nell'evento 2. Client X tenta di leggere dati, evento 3, a cui il server risponde con dati, evento 4.

Evento 5 mostra il blocco opportunistico batch sul lavoro. L'applicazione in Client X chiude il file. Tuttavia, il reindirizzamento di rete filtra l'operazione di chiusura e non trasmette un messaggio di chiusura, quindi esegue una chiusura "invisibile". Il reindirizzamento di rete può eseguire questa operazione perché il client X ha la sola proprietà del file. Successivamente, nel caso 6, l'applicazione riapri il file. Di nuovo, nessun flusso di dati nella rete. Per quanto riguarda il server, il client ha avuto il file aperto dall'evento 2.

Gli eventi 7, 8 e 9 mostrano il normale corso del traffico di rete. In caso 10, si verifica un'altra chiusura invisibile all'utente.

Nell'evento 11, il client Y tenta di aprire il file. La visualizzazione del server del file è che il client X lo ha aperto, anche se l'applicazione nel client X l'ha chiusa. Pertanto, il server invia un messaggio che interrompe il blocco opportunistico al client X. Client X invia ora il messaggio di chiusura nella rete, evento 13. Evento 14 segue come il server apre il file per il client Y. L'applicazione nel client X ha chiuso il file, quindi non trasferisce più a o dal server per tale file. Il client Y inizia i trasferimenti di dati come di consueto nell'evento 15.

Tra l'ora in cui il client X viene concesso il blocco nel file nell'evento 2 e la chiusura finale all'evento 13, tutti i dati dei file memorizzati nella cache del client sono validi, nonostante l'intervento dell'applicazione aperta e chiudere le operazioni. Tuttavia, dopo l'interruzione del blocco opportunistico, i dati memorizzati nella cache non possono essere considerati validi.

Filtro blocco opportunistico

Il diagramma seguente mostra una visualizzazione del traffico di rete di un blocco opportunistico del filtro. Le frecce indicano la direzione dello spostamento dei dati, se presente.

Evento Client X Server Client Y
1 Apre il file senza diritti di accesso ==>
2 <== Apre il file
3 Richieste di filtro lock==>
4 <== Concede il blocco
5 Apre il file per la lettura ==>
6 <== Riapri il file
7 Legge i dati usando l'handle di lettura ==>
8 <== Invia dati
9 <== Invia dati
10 <== Invia dati
11 <== Apre il file
12 Apre il file ==>
13 <== Richieste di blocco del filtro
14 Nega il blocco filtro==>
15 <== Legge i dati
16 Invia dati ==>
17 Letture (memorizzate nella cache)
18 Chiude il file ==>
19 <== Chiudi il file

 

Nel blocco opportunistico del filtro, il client X apre un file, l'evento 1 e il server risponde nell'evento 2. Il client richiede quindi un blocco opportunistico di filtro nell'evento 3, seguito dal server che concede il blocco opportunistico in evento 4. Client X apre quindi di nuovo il file per la lettura nell'evento 5, a cui il server risponde nell'evento 6. Il client tenta quindi di leggere i dati, a cui il server risponde con dati, evento 8.

Evento 9 mostra il blocco opportunistico del filtro sul lavoro. Il server legge prima del client e invia i dati sulla rete anche se il client non lo ha richiesto. Il client memorizza nella cache i dati. In caso 10, il server prevede anche una richiesta futura per i dati e invia un'altra parte del file per il client nella cache.

Nell'evento 11 e 12, un altro client, Y, apre il file. Il client Y richiede anche un blocco opportunistico di filtro. In caso 14, il server lo nega. In caso 15, il client Y richiede dati, che il server invia nell'evento 16. Nessuno di questi influisce sul client X. In qualsiasi momento, un altro client può aprire questo file per l'accesso in lettura. Nessun altro client influisce sul blocco del filtro X del client.

Evento 17 mostra i dati di lettura X del client. Tuttavia, poiché il server ha già inviato i dati e il client lo ha memorizzato nella cache, nessun traffico attraversa la rete.

In questo esempio il client X non tenta mai di leggere tutti i dati nel file, quindi il read-ahead indicato dagli eventi 9 e 10 è "sprecato"; ovvero, i dati non vengono mai effettivamente usati. Si tratta di una perdita accettabile perché il read-ahead ha spedato l'applicazione.

In caso 18, il client X chiude il file. Il reindirizzamento di rete del client abbandona i dati memorizzati nella cache. Il server chiude il file.