Network Filesystem non riesce durante le velocità I / O elevate

Sono un utente su un cluster che utilizza NFS per le nostre esigenze di archiviazione dati. Recentemente, ho eseguito una pipeline che ha un elevato livello di I / O durante alcune operazioni.

Il programma che pensiamo sta provocando il problema è chiamato Bowtie, un allineatore nelle tubazioni bioinformatiche. In breve abbiamo sequenze alfabetiche in file frammentati di 1 milione di righe per file confrontati ad un altro file contenente l'integer dictionary. (Si tratta di una sovrapplicazione dell'algorithm)

Questo dictionary è mappato dalla memory durante la procedura. Ho diritti di presentazione in coda a tre nodes sul cluster.

Nodi: Nodo1 Nodo2 Nodo3 Nodo4 Nodo5 Nodo6 Nodo7

Il mio diritto: Node1 Node2 Node3

Numero di processri disponibili: 128 processri o 128 slot di coda in esecuzione.

Per eseguire sul cluster, il file principale è suddiviso in Chunks di 1 milione di righe ciascuno e tutti i lavori vengono avviati utilizzando SGE.

Il dictionary a questo punto viene caricato in memory su ciascun nodo, vale a dire Node1 2 e 3

Per each lavoro attivo nello slot di coda, ho i seguenti gestori di file aperti

1 File di process contenente il codice per eseguire un file di codice contenente il codice di output del process 1 SGE generato file STDOUT 1 SGE generato file STDERR 1 File di output file Chunk 1

Significato che durante questo process ho 768 + 3 gestori di file aperti sull'archiviazione dati remota, anche se i primi quattro file sono costanti per each singolo script della pipeline.

Ogni volta che questo accade, il server NFS sull'archiviazione dei dati si blocca e il nostro integer cluster scende perché l'archiviazione diventa non rispondente.

Il nostro personale IT ha suggerito che questo potrebbe essere dovuto ad elevati I / O durante questo process e forse NFS è stato solo per piccoli cluster non quelli di grandi size.

Di conseguenza, abbiamo lavorato attorno ad una soluzione in cui stiamo progettando di eseguire questo process su uno dei nodes stessi. Ma allora il punto di avere un cluster a nostra disposizione è negato perché scriveremo sul disco del nodo e non la memorizzazione dei dati condivisa in tutti i cluster.

Non riesco a credere che NFS è stato costruito per i cluster di piccole size e non è mai stato implementato con successo su grandi soluzioni di scala aziendale. Può essere un altro motivo per cui NFS improvvisamente abbandona la connessione di networking?

Sono certo che il process è questione è la causa del block del cluster, ma non sono convinto che la velocità di lettura / scrittura che richiede è la causa del fallimento. Qualcuno di voi ha vissuto un simile problema in precedenza? È una migrazione completa del protocollo l'unica soluzione che abbiamo?

  • Le istantanee VMWare a lungo in esecuzione sono male ... ma cosa su VMDK su un'istantanea ZFS \ LVM?
  • È ansible impostare dynamicmente il valore upload_store per la modifica di upload di nginx?
  • La cache del disco rigido per i parametri di performance?
  • Utilizzo di un NAS di fascia alta come vSphere / HyperV Storage
  • HP Smart arrays P812i e custodia di stoccaggio D2700 BAD PERFORMANCE
  • Come viene fatturato lo storage Amazon S3?
  • Raccomandazione per una piccola infrastruttura VM ridondata?
  • Possono essere utilizzate diverse velocità e size dell'azionamento in una configuration hardware RAID che non influenza le performance?
  • One Solution collect form web for “Network Filesystem non riesce durante le velocità I / O elevate”

    Alcuni suggerimenti appresi nel corso degli anni.

    1. Ridurre al minimo il carico sul server NFS:

    set Opzioni di esportzione NFS: async,insecure,no_subtree_check

    set Opzioni di assembly NFS soft,noatime,nodesratime,nolock,vers=3

    anche impostato: noatime,nodesratime su dati / tmp / graffi mounts. Assicurarsi che la crittografia NFS sia spenta per ridurre il carico. Arrestare il process di block NFS.

    1. Provare a abilitare i frame JUMBO per la networking su tutti gli host (se supportti dall'apparecchiatura netta) – impostare MTU a 9k o giù di lì.

    2. Assicurarsi che sia utilizzato lo storage raid10 (evitare raid5 / 6 a tutti i costi) per scrivere IO random. Qualsiasi SSD?

    3. Ingrandire il numero di maniglie FS aperte (il valore predefinito è 2K su alcuni sisthemes), impostarlo a 1M o così.

    4. Qualsiasi possibilità di copiare il database di mapping con i dati di input alla memory locale del nodo di graffio e di combinare / ordinare i file di risultato sam come un passo separato?

    5. Aumenta la dimensione del pezzo trasformato (quindi viene trattato per alless 30 minuti o più.

    6. Se ansible, divide i lavori in un livello più alto ansible (prova a mappare / ordinare 10 genomi separati / campioni su 10 diversi nodes in parallelo, anziché cercare di mappare each genoma in serie utilizzando 10 host). Tentativo di checkpointing, una volta completati tutti i processi.

    7. Modificare una sorgente di programma, in modo che legge i dati in un più grande pezzo – come 1M invece di 4k.

    8. Prestare attenzione alla contesa di interconnessione CPU / RAM (esp sui sisthemes di socket AMD 4-8), a volte eseguendo thread da 12 a 24 su 48 box core è più veloce di 48 thread. Provate diversi livelli di utilizzo. Assicurarsi che NUMA sia acceso e configurato per i sisthemes multi-CPU. Ricompilare con NUMA abilitato.

    PS: Gestire un cluster efficiente è simile alla pianificazione / gestione di un cantiere con lavoratori 1k + …

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.