Ottimizzazione delle prestazioni di sincronizzazione file
Esistono diversi modi per migliorare la sincronizzazione dei file.
Gli I/O del file JFS che non sono sequenziali si accumulano in memoria fino a quando non vengono soddisfatte alcune condizioni:
- L'elenco di disponibilità si riduce a minfreee deve essere eseguita la sostituzione della pagina.
- Il daemon syncd scarica le pagine ad intervalli regolarmente pianificati.
- Viene immesso il comando sync .
- La scrittura casuale dietro elimina le pagine non corrette dopo aver raggiunto la soglia di scrittura casuale dietro.
Se molte pagine si accumulano prima che si verifichi una di queste condizioni, quando le pagine vengono svuotate dal daemon syncd , il blocco i-node viene ottenuto e mantenuto fino a quando tutte le pagine sporche non sono state scritte sul disco. Durante questo periodo, i sottoprocessi che tentano di accedere a tale file vengono bloccati perché il blocco i-node non è disponibile. Anche il comando fuser è bloccato per il file, poiché il comandofuser richiede il blocco inode per fornire le informazioni richieste. Tenere presente che il daemon syncd attualmente scarica tutte le pagine non corrette di un file, ma un file alla volta. Sui sistemi con una grande quantità di memoria e un gran numero di pagine che vengono modificate, possono verificarsi picchi elevati di I/O quando il daemon syncd scarica le pagine.
AIX® ha un'opzione regolabile denominata sync_release_ilock. Il comando ioo con l'opzione -o sync_release_ilock=1 consente al blocco i-node di essere rilasciato mentre le pagine non corrette di tale file vengono scaricate. Ciò può risultare in un tempo di risposta migliore quando si accede a questo file durante una chiamata sync () .
Questo effetto di blocco può anche essere ridotto al minimo aumentando la frequenza delle sincronizzazioni nel daemon syncd . Modificare /sbin/rc.boot dove avvia il daemon syncd . Quindi riavviare il sistema per rendere effettivo il sistema. Per il sistema corrente, interrompere il daemon syncd e riavviarlo con il valore dei nuovi secondi.
Un terzo modo per ottimizzare questo comportamento consiste nell'attivare la scrittura casuale utilizzando il comando ioo (consultare Scrittura sequenziale e casuale dietro l'ottimizzazione delle prestazioni).
JFS2 Tunable di sincronizzazione
j2_syncPageCount: limita il numero di pagine modificate pianificate per essere scritte dalla sincronizzazione in un unico passaggio per un file. Quando questo parametro ottimizzabile è impostato, il file system scrive il numero specificato di pagine senza bloccare I/O nel resto del file. La chiamata di sincronizzazione viene iterata sull'operazione di scrittura fino a quando non vengono scritte tutte le pagine modificate.j2_syncPageLimit: sovrascrive il parametroj2_syncPageCountquando viene raggiunta una soglia. Utilizzare questo parametro per assicurarsi che l'operazione di sincronizzazione sia completa per un file. I regolabili sono mantenuti nel modo standard.
I parametri regolabili vengono manipolati utilizzando il comando ioo .
I parametri ottimizzabili j2_syncPageCount e j2_syncPageLimit vengono aggiunti all'elenco di valori controllati dal comando ioo .
–o per visualizzare o modificare il valore e per visualizzare l'opzione di aiuto utilizzare l'indicatore –h .# ioo –h j2_syncPageCountImposta il numero massimo di pagine modificate di un file scritto su disco dalla chiamata di sistema di sincronizzazione in una singola operazione.Valori: Valore predefinito: 0 Intervallo: 0 - 65536
Tipo: dinamico
Unità: pagine da 4 KB
Ottimizzazione: quando si esegue un'applicazione che utilizza la cache del file system ed esegue un numero elevato di scritture casuali, è necessario regolare questa impostazione per evitare lunghi ritardi dell'applicazione durante le operazioni di sincronizzazione. I valori devono essere compresi tra 256 e 1024. Il valore predefinito è zero che determina il normale comportamento di sincronizzazione della scrittura di tutte le pagine sporche in una singola chiamata. Se vengono impostati valori bassi per i valori regolabili, si hanno tempi di sincronizzazione più lunghi e ritardi più brevi nel tempo di risposta dell'applicazione. Se sono impostati valori maggiori, i ritardi del tempo di risposta sono più lunghi e i tempi di sincronizzazione sono più brevi.
# ioo –h j2_syncPageLimitImposta il numero massimo di volte in cui la chiamata di sistema di sincronizzazione utilizza j2_syncPageCount, per limitare le pagine scritte per migliorare le prestazioni dell'operazione di sincronizzazione.Valori: Valore predefinito: 256 Intervallo: 16-65536
Tipo: dinamico
Unità: Numerico
Ottimizzazione: è impostato quando j2_syncPageCount è impostato e deve essere aumentato, se l'effetto della modifica j2_syncPageCount non è sufficiente. I valori accettabili sono compresi tra 250 e 8000. j2_syncPageLimit non ha effetto se j2_syncPageCount è 0.
Questo parametro regolabile deve essere impostato quando j2_syncPageCount è impostato e deve essere incrementato, in modo che l'effetto della modificaj2_syncPageCount non riduca il tempo di risposta dell'applicazione.
I valori devono essere compresi tra 1 e 8000. Il valore ottimale per questi parametri regolabili dipende dalla dimensione della memoria e dalla larghezza di banda I/O. Un punto di partenza neutrale è quello di impostare entrambi i parametri regolabili su 256.
Periodo di sincronizzazione e simultaneità JFS2
La sincronizzazione del file system è gestita dal daemon di sincronizzazione (syncd). Utilizzare i parametri regolabili JFS2 per consentire al file system di gestire la sincronizzazione senza utilizzare syncd.
Il gestore di sincronizzazione JFS2 estende il processo di sincronizzazione in modo che tutti i dati memorizzati nella cache non vengano scritti sul disco contemporaneamente. La sincronizzazione viene eseguita su un singolo file system alla volta. Ogni file system è pianificato per avviare la successiva operazione di sincronizzazione dopo la chiusura dell'operazione precedente. È anche possibile aumentare il numero di thread che gestiscono l'operazione di sincronizzazione quando è necessario elaborare più file system.
Utilizzare i seguenti parametri regolabili per la sincronizzazione del file system JFS2 :
- j2_syncByVFS:
- Specifica l'utilizzo del gestore di sincronizzazione JFS2 e imposta l'intervallo tra le operazioni di sincronizzazione per ciascun filesystem.
- j2_syncConcurrency:
- Imposta il numero di thread che gestiscono la sincronizzazione del file system. Questo valore indica il numero di file system su cui l'operazione di sincronizzazione deve essere eseguita contemporaneamente. Solo un thread di sincronizzazione esegue l'operazione di sincronizzazione su un singolo filesystem.
Il comando ioo gestisce i parametri regolabili I/O. Per ulteriori informazioni, fare riferimento alla documentazione del comando ioo .
# ioo –h j2_syncByVFS
Scopo: Specifica il numero di secondi di attesa tra chiamate di sistema per sincronizzare un filesystem JFS2 . Questo valore sostituisce il valore specificato dal comando syncd .
Valori: Valore predefinito: 0, Intervallo: 0-86400.
Tipo: dinamico.
Unità: secondi.
Ottimizzazione: questo valore indica il numero di secondi tra le iterazioni del processo di sincronizzazione. Il gestore di sincronizzazione JFS2 fino al tempo specificato dal parametro regolabile j2_syncByVFS prima di avviare chiamate alla sottoroutine syncvfs per i file system JFS2 . Il valore 0 indica che deve essere utilizzata la normale elaborazione syncd. Un valore diverso da zero sovrascrive l'ora specificata nel comando syncd e fa sì che venga utilizzato il gestore di sincronizzazione file JFS2-specific .
# ioo –h j2_syncConcurrency
Scopo: Imposta il numero di thread da utilizzare per operazioni di sincronizzazione JFS2 .
Valori: Valore predefinito: 1, Intervallo: 1-128.
Tipo: dinamico.
Unità: numerica.
Ottimizzazione: il daemon di sincronizzazione avvia le operazioni di sincronia simultaneamente per il numero di file system impostato dal parametro regolabile j2_syncConcurrency . Questo valore è valido solo quando il parametro regolabile j2_syncByVFS è diverso da zero.