Procedure consigliate per le opzioni di montaggio NFS di Linux per Azure NetApp Files
Questo articolo illustra le opzioni di montaggio e le procedure consigliate per l'uso con Azure NetApp Files.
Nconnect
L'uso dell'opzione nconnect
di montaggio consente di specificare il numero di connessioni (flussi di rete) che devono essere stabilite tra il client NFS e l'endpoint NFS fino a un limite di 16. In genere, un client NFS usa una singola connessione tra se stessa e l'endpoint. L'aumento del numero di flussi di rete aumenta significativamente i limiti superiori di I/O e velocità effettiva. I test hanno scoperto nconnect=8
di essere i più efficienti.
Quando si prepara un ambiente GRID di firma di accesso condiviso a più nodi per la produzione, è possibile notare una riduzione del 30% ripetibile in fase di esecuzione da 8 ore a 5,5 ore:
Opzione di montaggio | Tempi di esecuzione del processo |
---|---|
No nconnect |
8 ore |
nconnect=8 |
5,5 ore |
Entrambi i set di test hanno usato la stessa macchina virtuale E32-8_v4 e RHEL8.3, con read-ahead impostato su 15 MiB.
Quando si usa nconnect
, tenere presenti le regole seguenti:
nconnect
è supportato da Azure NetApp Files in tutte le principali distribuzioni Linux, ma solo nelle versioni più recenti:Versione di Linux NFSv3 (versione minima) NFSv4.1 (versione minima) Redhat Enterprise Linux RHEL8.3 RHEL8.3 SUSE SLES12SP4 o SLES15SP1 SLES15SP2 Ubuntu Ubuntu18.04 Nota
SLES15SP2 è la versione minima di SUSE in cui
nconnect
è supportata da Azure NetApp Files per NFSv4.1. Tutte le altre versioni specificate sono le prime versioni che hanno introdotto lanconnect
funzionalità.Tutti i montaggi da un singolo endpoint ereditano l'impostazione
nconnect
della prima esportazione montata, come illustrato negli scenari seguenti:Scenario 1:
nconnect
viene usato dal primo montaggio. Di conseguenza, tutti i montaggi sullo stesso endpoint usanonconnect=8
.mount 10.10.10.10:/volume1 /mnt/volume1 -o nconnect=8
mount 10.10.10.10:/volume2 /mnt/volume2
mount 10.10.10.10:/volume3 /mnt/volume3
Scenario 2:
nconnect
non viene usato dal primo montaggio. Di conseguenza, nessun montaggio sullo stesso endpoint viene usatonconnect
anche senconnect
può essere specificato.mount 10.10.10.10:/volume1 /mnt/volume1
mount 10.10.10.10:/volume2 /mnt/volume2 -o nconnect=8
mount 10.10.10.10:/volume3 /mnt/volume3 -o nconnect=8
Scenario 3:
nconnect
le impostazioni non vengono propagate tra endpoint di archiviazione separati.nconnect
viene utilizzato dal montaggio proveniente da10.10.10.10
ma non dal montaggio proveniente da10.12.12.12
.mount 10.10.10.10:/volume1 /mnt/volume1 -o nconnect=8
mount 10.12.12.12:/volume2 /mnt/volume2
nconnect
può essere usato per aumentare la concorrenza di archiviazione da qualsiasi client specificato.
Per informazioni dettagliate, vedere Procedure consigliate per la concorrenza linux per Azure NetApp Files.
Nconnect
Considerazioni
Non è consigliabile usare nconnect
e sec=krb5*
montare insieme le opzioni. La riduzione delle prestazioni è stata osservata quando si usano le due opzioni in combinazione.
L'API GSS (Generic Security Standard Application Programming Interface) consente alle applicazioni di proteggere i dati inviati alle applicazioni peer. Questi dati potrebbero essere inviati da un client in un computer a un server in un altro computer.
Quando nconnect
viene usato in Linux, il contesto di sicurezza GSS viene condiviso tra tutte le nconnect
connessioni a un determinato server. TCP è un trasporto affidabile che supporta la distribuzione di pacchetti non ordinati per gestire i pacchetti non ordinati in un flusso GSS, usando una finestra scorrevole di numeri di sequenza. Quando i pacchetti non presenti nella finestra di sequenza vengono ricevuti, il contesto di sicurezza viene rimosso e viene negoziato un nuovo contesto di sicurezza. Tutti i messaggi inviati con nel contesto ora rimosso non sono più validi, quindi richiedono di nuovo l'invio dei messaggi. Un numero maggiore di pacchetti in un'installazione nconnect
causa pacchetti out-of-window frequenti, attivando il comportamento descritto. Con questo comportamento non è possibile dichiarare percentuali di riduzione specifiche.
Rsize
e Wsize
Gli esempi in questa sezione forniscono informazioni sull'approccio all'ottimizzazione delle prestazioni. Potrebbe essere necessario apportare modifiche in base alle esigenze specifiche dell'applicazione.
I rsize
flag e wsize
impostano le dimensioni massime di trasferimento di un'operazione NFS. Se rsize
o wsize
non sono specificati sul montaggio, il client e il server negoziano le dimensioni maggiori supportate dai due. Attualmente, sia Azure NetApp Files sia le distribuzioni Linux moderne supportano dimensioni di lettura e scrittura fino a 1.048.576 byte (1 MiB). Tuttavia, per una migliore velocità effettiva e latenza complessiva, Azure NetApp Files consiglia di impostare sia rsize
che wsize
non superiore a 262.144 byte (256 K). È possibile osservare che sia una maggiore latenza che una velocità effettiva ridotta quando si usano rsize
e wsize
superano i 256 KiB.
Ad esempio, Distribuire un sistema di scalabilità orizzontale DI SAP HANA con nodo standby in macchine virtuali di Azure usando Azure NetApp Files in SUSE Linux Enterprise Server mostra 256-KiB rsize
e wsize
il massimo come indicato di seguito:
sudo vi /etc/fstab
# Add the following entries
10.23.1.5:/HN1-data-mnt00001 /hana/data/HN1/mnt00001 nfs rw,vers=4,minorversion=1,hard,timeo=600,rsize=262144,wsize=262144,noatime,_netdev,sec=sys 0 0
10.23.1.6:/HN1-data-mnt00002 /hana/data/HN1/mnt00002 nfs rw,vers=4,minorversion=1,hard,timeo=600,rsize=262144,wsize=262144,noatime,_netdev,sec=sys 0 0
10.23.1.4:/HN1-log-mnt00001 /hana/log/HN1/mnt00001 nfs rw,vers=4,minorversion=1,hard,timeo=600,rsize=262144,wsize=262144,noatime,_netdev,sec=sys 0 0
10.23.1.6:/HN1-log-mnt00002 /hana/log/HN1/mnt00002 nfs rw,vers=4,minorversion=1,hard,timeo=600,rsize=262144,wsize=262144,noatime,_netdev,sec=sys 0 0
10.23.1.4:/HN1-shared/shared /hana/shared nfs rw,vers=4,minorversion=1,hard,timeo=600,rsize=262144,wsize=262144,noatime,_netdev,sec=sys 0 0
Ad esempio, SAS Viya consiglia una dimensione di lettura e scrittura di 256 KiB e GRIGLIA di firma di accesso condiviso limita r/wsize
a 64 KiB, aumentando al contempo le prestazioni di lettura con un aumento del read-ahead per i montaggi NFS. Per informazioni dettagliate, vedere Procedure consigliate per NFS read-ahead per Azure NetApp Files .
Le considerazioni seguenti si applicano all'uso di rsize
e wsize
:
- Le dimensioni delle operazioni di I/O casuali sono spesso inferiori alle
rsize
opzioni di montaggio ewsize
. Di conseguenza, non sono vincoli. - Quando si usa la cache del file system, le operazioni di I/O sequenziali si verificheranno con le dimensioni predicate dalle
rsize
opzioni di montaggio ewsize
, a meno che le dimensioni del file non siano inferiorirsize
a ewsize
. - Le operazioni che ignorano la cache del file system, anche se ancora vincolate dalle
rsize
opzioni di montaggio ewsize
, non sono così grandi del valore massimo specificato darsize
owsize
. Questa considerazione è importante quando si usano generatori di carichi di lavoro che hanno l'opzionedirectio
.
Come procedura consigliata con Azure NetApp Files, per ottenere una velocità effettiva e una latenza ottimali, impostare rsize
e wsize
non superare i 262.144 byte.
Timer di coerenza e attributi della cache da vicino a aperti
NFS usa un modello di coerenza debole. La coerenza è debole perché l'applicazione non deve passare all'archiviazione condivisa e recuperare i dati ogni volta che usarli, uno scenario che avrebbe un impatto notevole sulle prestazioni dell'applicazione. Esistono due meccanismi che gestiscono questo processo: timer degli attributi della cache e coerenza da vicino all'apertura.
Se il client ha la proprietà completa dei dati, ovvero non viene condiviso tra più nodi o sistemi, esiste una coerenza garantita. In tal caso, è possibile ridurre le getattr
operazioni di accesso all'archiviazione e velocizzare l'applicazione disattivando la coerenza () da vicino all'apertura (cto
) (nocto
come opzione di montaggio) e attivando i timeout per la gestione della cache degli attributi (actimeo=600
poiché un'opzione di montaggio modifica il timer su 10m rispetto alle impostazioni predefinite acregmin=3,acregmax=30,acdirmin=30,acdirmax=60
). In alcuni test, nocto
riduce circa il getattr
65-70% delle chiamate di accesso e la regolazione actimeo
riduce queste chiamate un altro 20-25%.
Funzionamento dei timer della cache degli attributi
Gli attributi acregmin
, acregmax
acdirmin
, e acdirmax
controllano la coerenza della cache. I due attributi precedenti controllano per quanto tempo gli attributi dei file sono attendibili. Gli ultimi due attributi controllano per quanto tempo gli attributi del file di directory sono attendibili (dimensioni della directory, proprietà della directory, autorizzazioni di directory). Gli min
attributi e max
definiscono la durata minima e massima in base alle quali gli attributi di una directory, gli attributi di un file e il contenuto della cache di un file vengono considerati attendibili, rispettivamente. Tra min
e max
, viene usato un algoritmo per definire la quantità di tempo in cui una voce memorizzata nella cache è attendibile.
Si considerino ad esempio i valori predefiniti acregmin
e acregmax
rispettivamente 3 e 30 secondi. Ad esempio, gli attributi vengono valutati ripetutamente per i file in una directory. Dopo 3 secondi, viene eseguita una query sul servizio NFS per l'aggiornamento. Se gli attributi sono considerati validi, il client raddoppia il tempo attendibile a 6 secondi, 12 secondi, 24 secondi, quindi come massimo è impostato su 30, 30 secondi. Da quel momento in poi, fino a quando gli attributi memorizzati nella cache non vengono considerati obsoleti (a quel punto il ciclo inizia), la attendibilità viene definita come 30 secondi essendo il valore specificato da acregmax
.
Esistono altri casi che possono trarre vantaggio da un set simile di opzioni di montaggio, anche quando non esiste una proprietà completa da parte dei client, ad esempio se i client usano i dati come di sola lettura e l'aggiornamento dei dati viene gestito tramite un altro percorso. Per le applicazioni che usano griglie di client come EDA, hosting Web e rendering di film e hanno set di dati relativamente statici (strumenti o librerie EDA, contenuto Web, dati di trama), il comportamento tipico è che il set di dati viene in gran parte memorizzato nella cache nei client. Ci sono poche letture e nessuna scrittura. Ci sono molte getattr
chiamate /access che tornano alla risorsa di archiviazione. Questi set di dati vengono in genere aggiornati tramite un altro client che monta i file system e esegue periodicamente il push degli aggiornamenti del contenuto.
In questi casi, è presente un ritardo noto nella raccolta di nuovi contenuti e l'applicazione funziona ancora con dati potenzialmente non aggiornati. In questi casi nocto
e actimeo
può essere usato per controllare il periodo in cui è possibile gestire i dati non aggiornati. Ad esempio, in strumenti ed librerie EDA funziona actimeo=600
bene perché questi dati vengono in genere aggiornati raramente. Per un hosting Web di piccole dimensioni in cui i client devono visualizzare tempestivamente gli aggiornamenti dei dati quando stanno modificando i siti, actimeo=10
potrebbe essere accettabile. Per i siti Web su larga scala in cui è stato eseguito il push di contenuto in più file system, actimeo=60
potrebbe essere accettabile.
L'uso di queste opzioni di montaggio riduce significativamente il carico di lavoro all'archiviazione in questi casi. Ad esempio, un'esperienza EDA recente ha ridotto gli I/O al volume degli strumenti da >150 K a ~6 K. Le applicazioni possono essere eseguite in modo molto più rapido perché possono considerare attendibili i dati in memoria. Il tempo di accesso alla memoria è nanosecondi rispetto a centinaia di microsecondi per getattr
/access in una rete veloce.
Coerenza close-to-open
La coerenza da vicino a aperta (opzione cto
di montaggio) garantisce che, indipendentemente dallo stato della cache, all'apertura dei dati più recenti per un file venga sempre presentata all'applicazione.
- Quando viene eseguita una ricerca per indicizzazione di una directory (
ls
ls -l
ad esempio) viene eseguito un determinato set di RPC (chiamate di routine remote). Il server NFS condivide la visualizzazione del file system.cto
Se usato da tutti i client NFS che accedono a una determinata esportazione NFS, tutti i client visualizzano lo stesso elenco di file e directory in esso contenuti. L'aggiornamento degli attributi dei file nella directory è controllato dai timer della cache degli attributi. In altre parole, purchécto
venga usato, i file vengono visualizzati nei client remoti non appena viene creato il file e il file si trova nella risorsa di archiviazione. - Quando un file viene aperto, il contenuto del file viene garantito aggiornato dal punto di vista del server NFS.
Se si verifica una race condition in cui il contenuto non ha terminato lo scaricamento dal computer 1 quando un file viene aperto nel computer 2, il computer 2 riceve solo i dati presenti nel server al momento dell'apertura. In questo caso, Il computer 2 non recupera più dati dal file fino a quando non viene raggiunto il
acreg
timer e il computer 2 controlla nuovamente la coerenza della cache dal server. Questo scenario può essere osservato usando una parte finale-f
del computer 2 quando il file viene ancora scritto nel computer 1.
Nessuna coerenza da vicino a aperta
Quando non viene usata alcuna coerenza da vicino a aperta (nocto
), il client considera attendibile la freschezza della visualizzazione corrente del file e della directory fino a quando i timer dell'attributo della cache non sono stati violati.
Quando viene eseguita una ricerca per indicizzazione di una directory (
ls
ls -l
ad esempio) viene eseguito un determinato set di RPC (chiamate di routine remote). Il client invia solo una chiamata al server per un elenco corrente di file quando il valore timer dellaacdir
cache è stato violato. In questo caso, i file e le directory creati di recente non vengono visualizzati. Vengono visualizzati i file e le directory rimossi di recente.Quando un file viene aperto, purché il file sia ancora nella cache, il contenuto memorizzato nella cache (se presente) viene restituito senza convalidare la coerenza con il server NFS.
Passaggi successivi
- Procedure consigliate per le operazioni di I/O dirette linux per Azure NetApp Files
- Procedure consigliate per la cache del file system Linux per Azure NetApp Files
- Procedure consigliate per la concorrenza Linux per Azure NetApp Files
- Procedure consigliate per Linux NFS read-ahead
- Procedure consigliate per gli SKU delle macchine virtuali di Azure
- Benchmark delle prestazioni per Linux