2012-06-28 3 views
6

Ho intenzione di creare file server di grandi dimensioni e ho bisogno di consigli sulla community in caso di overflow dello stack per la scelta del file system (linux).Il miglior sistema di file per servire file da 1 GB usando nginx, in scrittura moderata, legge le prestazioni?

Il file server offrirà file statici di dimensioni pari a 1-2 GB (per lo più diversi a ogni richiesta) tramite Nginx, con una scrittura moderata costante sui dischi (dischi S5/7200 RAID enormi). Il rapporto di scrittura/lettura è circa 1: 5-10, per ogni 1 byte scritto al secondo, 5-10 vengono letti. La cosa più importante per me è la performance in lettura, posso vivere con scritture più lente.

Quale file system Linux sarebbe la soluzione migliore per questa attività? E perché :) Grazie!

risposta

0

I file di grandi dimensioni tendono a non dipendere molto dal file system che si utilizza, i file system moderni (ad esempio, non FAT!) Fanno un ottimo lavoro nell'assegnarli in grossi blocchi contigui di memoria e quindi a ridurre la latenza di ricerca. Dove si tende a vedere le differenze tra loro sono in prestazioni di file piccoli, resistenza alla frammentazione in situazioni fuori spazio, concorrenza, ecc. La memorizzazione di file di grandi dimensioni è un problema relativamente facile, e dubito che vedrete differenze misurabili.

Ma come sempre: se davvero ti interessa, punto di riferimento. Non ci sono risposte semplici sulle prestazioni del filesystem.

+0

Quindi nessun vero :(Avete mai provato a cancellare file di grandi dimensioni su ext2-3 vs XFS vs JFS? Inoltre, uno sguardo al kernel-source sarebbe hai rivelato a voi, che i conducenti diversi fs spendono tempi diversi nelle sezioni critiche, anche essi tendono a comportarsi in modo radicalmente diverso sotto un'alta pressione IO. –

+0

L'eliminazione di un file di grandi dimensioni non era il caso d'uso. Se hai numeri, mostrali. Rimango fermo in quello che ho scritto. –

+0

numeri? "ci sono bugie, maledette bugie e poi benchmark" Devo ancora vedere un benchmark senza alcun obiettivo di marketing. Stavo parlando della mia esperienza e della fonte del kernel linux pubblicamente disponibile. Il punto che "dubito vedrete differenze misurabili" è tuttavia ridicolo. –

4

Per fornire i migliori risultati con il servizio di contenuti pesanti, c'è qualcos'altro da mettere a punto. Si prega di dare un'occhiata a Nginx core developer's comment di seguito:

  1. Spegnere sendfile, funziona male su tali carichi di lavoro sotto Linux causa della mancanza di capacità di controllare readahead (e quindi blocchi letti dal disco).

    sendfile off;

  2. Utilizzo grandi buffer di uscita

    output_buffers 1 512k

  3. Prova utilizzando aio per garantire una migliore simultaneità disco (e nota sotto Linux necessita directio pure), cioè qualcosa di simile

    aio on; directio 512;

Altre raccomandazioni:

  1. Controllare lo swap file system non viene utilizzato

  2. filesystem ext4 -, XFS. Buone per consentire data_writeback e noatime montaggio opzioni

5

ho raggiunto 80 MB/s di prestazioni "lettura casuale" per disco "reale" (mandrino). Ecco le mie scoperte.

Quindi, in primo luogo, decidere la quantità di traffico necessaria per spingere verso il basso gli utenti e la quantità di spazio di archiviazione necessaria per server.

È possibile saltare i suggerimenti di impostazione del disco indicati di seguito poiché si dispone già di una configurazione RAID5.

Prendiamo un esempio di un server dedicato con larghezza di banda di 1 Gbps con dischi da 3 * 2 TB. Mantieni il primo disco dedicato al sistema operativo e tmp. Per altri 2 dischi è possibile creare un raid software (per me, ha funzionato meglio rispetto al raid hardware on-board). Altrimenti, è necessario dividere i file in modo uguale su dischi indipendenti. L'idea è di mantenere il carico di lettura/scrittura di entrambi i dischi equamente. Il software raid-0 è la migliore opzione.

Nginx Conf Ci sono due modi per raggiungere alto livello di prestazioni utilizzando nginx.

  1. uso directio

    aio su;
    directio 512; output_buffers 1 8 m;

    "Questa opzione richiede di avere una buona quantità di ram" Sono necessari circa 12-16 GB di ram.

  2. userland io

    output_buffers 1 2m;

    "assicurarsi di aver impostato readahead per 4-6MB per il software RAID montare" blockdev --setra 4096/dev/md0 (o il montaggio del disco indipendente)

    Questa impostazione utilizza in modo ottimale cache del file system, e richiede molto meno ram. Sono necessari circa 8 GB di RAM.

Note comuni:

  • mantenere "sendfile off;"

si può anche utilizzare la larghezza di banda della valvola a farfalla per consentire 100s di connessioni su banda disponibile. Ogni connessione di download utilizzerà 4 MB di RAM attiva.

 limit_rate_after 2m; 
     limit_rate 100k; 

Entrambe suddetta soluzione si adatti facilmente a 1k + utente simultaneo su un server 3 disco. Supponendo di avere una larghezza di banda di 1 Gbps e ogni connessione è limitata a 1Mb/ps Esiste un'ulteriore configurazione necessaria per ottimizzare le scritture su disco senza influire molto sulle letture.

rendere tutti i caricamenti sul disco os principale su un supporto dire/tmpuploads. questo non garantirà disturbi intermittenti mentre si accendono letture pesanti. Quindi sposta il file da/tmpuploads usando il comando "dd" con oflag = direct. qualcosa come

dd if=/tmpuploads/<myfile> of=/raidmount/uploads/<myfile> oflag=direct bs=8196k