Table of Contents
Se stai gestendo array di storage enterprise, file system basati su cloud, o configurazioni locali del disco, capire come misurare, interpretare e ottimizzare le prestazioni del file system può significare la differenza tra un funzionamento fluido e costosi ambienti di bottleha. Questa guida completa esplora le metriche essenziali, metodi di calcolo, strumenti di benchmarking.
Capire le prestazioni del sistema di file: Perché si Matters
Le prestazioni del sistema di file hanno un grande impatto sulle prestazioni del sistema complessivo, soprattutto per le azioni che leggono o scrivono ai repository. Nel panorama di calcolo intensivo dei dati di oggi, le applicazioni che vanno da database e ambienti virtualizzati a carichi di lavoro di apprendimento automatico e sistemi di gestione dei contenuti pongono requisiti esigenti sull'infrastruttura di archiviazione.
Le prestazioni di storage sono uno dei fattori più importanti nella progettazione di infrastrutture IT moderne, ma è anche uno dei più comunemente fraintesi. Quando le organizzazioni valutano i sistemi di storage, spesso si concentrano su metriche come IOPS, throughput o latenza senza comprendere pienamente come queste misure si riferiscono ai carichi di lavoro reali.
Benchmarking è fondamentale quando si valutano le prestazioni, ma è particolarmente difficile per i file e i sistemi di archiviazione. Le interazioni complesse tra dispositivi I/O, cache, demone del kernel e altri componenti del sistema operativo risultano in comportamenti piuttosto difficili da analizzare.
Metrics core Performance: La Fondazione di analisi
L'analisi delle prestazioni del file system efficace si basa sulla comprensione di diverse metriche chiave che ogni rivelano diversi aspetti del comportamento di storage, che lavorano insieme per fornire un quadro completo di come un sistema di archiviazione esegue in varie condizioni.
IOPS (Operazioni di input/output per secondo)
IOPS rappresenta il numero di operazioni di lettura e scrittura che un dispositivo o un sistema di archiviazione può eseguire in un secondo. Poiché riflette il numero di operazioni che possono essere completate al secondo, IOPS è una metrica importante per determinare la reattività e l'efficienza delle soluzioni di storage, in particolare negli ambienti sensibili ad alte prestazioni o latenza.
IOPS è un indicatore critico delle prestazioni di lettura, in particolare quando sono comuni molte richieste di dati casuali, tipiche nelle operazioni di database, negli ambienti virtualizzati e nei server web. Ad esempio, un database che elabora migliaia di query di transazioni al secondo richiede che gli IOPS elevati mantengano i tempi di risposta accettabili, mentre un'applicazione di streaming video potrebbe dare priorità al throughput sui numeri IOPS grezzi.
I valori IOPS possono variare in modo significativo a seconda della tecnologia di archiviazione, della capacità del disco, della velocità del disco, della profondità della coda, delle dimensioni del blocco e delle caratteristiche del carico di lavoro. Questa variabilità rende essenziale comprendere il contesto in cui sono prese le misure IOPS. Un fornitore di storage potrebbe pubblicizzare i numeri IOPS impressionanti raggiunti in condizioni di laboratorio ideali con grandi profondità di coda, ma le prestazioni delle applicazioni reali possono differire sostanzialmente.
I valori IOPS degli SSD possono variare da decine di migliaia a centinaia di migliaia, mentre i valori IOPS per gli HDD variano da poche centinaia a poche migliaia. Questa differenza drammatica spiega perché lo storage a stato solido è diventato la scelta preferita per applicazioni critiche alle prestazioni, nonostante il suo costo più elevato per gigabyte rispetto alle tradizionali unità disco rotante.
Potenza e larghezza di banda
Il volume di dati che un sistema di archiviazione può fornire in un determinato periodo di tempo, è generalmente misurato in megabyte al secondo (MB/s) o gigabyte al secondo (GB/s).
Il throughput è tipicamente il migliore metrico di archiviazione quando si misurano i dati che devono essere trasmessi rapidamente, come immagini e file video. Applicazioni come codifica media, grandi backup di file, data analytics pipelines e carichi di lavoro di calcolo scientifici che elaborano i set di dati di massa beneficiano di un elevato throughput piuttosto che di elevati IOPS.
Se si moltiplica la figura IOPS con la dimensione (media) richiesta I/O, si ottiene la larghezza di banda o la produttività. Per darvi un esempio: se emettiamo un carico di lavoro di 1000 IOPS con una dimensione di richiesta di 4 Kilobyte, otterremo un throughput di 1000 x 4 KB = 4000 KB. Questo è circa ~4 Megabytes al secondo. Questa relazione matematica tra IOPS, dimensione del blocco e attraverso caratteristiche fondamentali è la comprensione.
Per riassumere la differenza tra throughput e IOPS, IOPS è un conteggio delle operazioni di lettura/scrittura al secondo, ma il throughput è la misura effettiva di bit di lettura/scrittura al secondo che vengono trasferiti su una rete. Entrambe le metriche sono necessarie per caratterizzare pienamente le prestazioni di storage, come nessuno solo racconta la storia completa.
Latenza: il tempo di risposta critico Metric
Latenza è il momento in cui si richiede la richiesta I/O da completare. Iniziamo la nostra misura dal momento in cui la richiesta viene rilasciata allo strato di archiviazione e si fermano a misurare quando o otteniamo i dati richiesti, o o otteniamo la conferma che i dati vengono memorizzati sul disco. Latenza è tipicamente misurata in millisecondi (ms) per lo storage tradizionale o microsecondi (μs) per dispositivi a stato solido ad alte prestazioni.
Latenza è la singola metrica più importante da concentrarsi su quando si tratta di prestazioni di storage, in molte circostanze. Questo perché la latenza colpisce direttamente l'esperienza utente e la reattività dell'applicazione. Anche se un sistema di archiviazione può raggiungere alti IOPS o numeri di throughput, la latenza eccessiva causerà applicazioni di sentirsi lento e non rispondente.
La metrica IOPS non ha senso senza una dichiarazione sulla latenza. È necessario capire quanto tempo ogni operazione I/O richiede perché la latenza detta la reattività delle singole operazioni I/O. Un sistema di archiviazione che pubblicizza 10.000 IOPS potrebbe sembrare impressionante, ma se queste operazioni completano la latenza di 50m, il sistema si esibirà male per applicazioni sensibili alla latenza come database di elaborazione delle transazioni online.
La bassa latenza è fondamentale per le applicazioni che richiedono tempi di risposta rapidi, come database o sistemi transazionali. Piattaforme di trading finanziario, sistemi di checkout e-commerce e applicazioni di analisi in tempo reale dipendono tutti da una latenza costantemente bassa per funzionare correttamente.
L'interrelazione dei Metrics Performance
I professionisti IT dovrebbero misurare la latenza oltre a IOPS e il throughput per una rappresentazione più accurata di ciò che sta accadendo nella vostra infrastruttura di archiviazione.Queste tre metriche sono interconnesse e le modifiche in uno spesso interessano gli altri.
Tuttavia, combinare e valutare tutte e tre le misure può fornire un migliore calibro di prestazioni, soprattutto se altri fattori sono anche presi in considerazione, come la profondità della coda, dimensione del blocco dati o prestazioni del carico di lavoro. Questo approccio olistico alla misurazione delle prestazioni assicura di comprendere non solo le capacità di picco, ma anche come il sistema si comporta in condizioni operative realistiche.
A seconda dell'applicazione, il giusto equilibrio tra IOPS, latenza e scala di throughput può essere necessario. Ad esempio, i trasferimenti di grandi dimensioni dei file potrebbero trarre vantaggio da un elevato rendimento, mentre le operazioni di database spesso privilegiano la bassa latenza e gli IOPS elevati.
Calcoli e formule essenziali di performance
Oltre a raccogliere metriche di performance raw, capire come calcolare e interpretare i valori derivati fornisce approfondimenti sul comportamento e sull'efficienza del file system, i quali aiutano a identificare i colli di bottiglia, prevedere i requisiti di capacità e convalidare i sistemi che stanno eseguendo come previsto.
Calcolo medio della distanza
La latenza media è uno dei calcoli più semplici ma informativi nell'analisi delle prestazioni. Per calcolare la la latenza media, sommare i tempi di risposta di tutte le singole operazioni I/O durante un periodo di misura e dividere per il numero totale di operazioni. Ad esempio, se si misurano 1.000 operazioni di lettura con un tempo di risposta combinato di 15.000 millisecondi, la latenza media è di 15ms per operazione.
Tuttavia, la latenza media da sola può essere fuorviante perché non rivela la distribuzione dei tempi di risposta. Un sistema con una latenza media di 10m potrebbe avere la maggior parte delle operazioni che completano in 5ms con punte occasionali a 100ms, o potrebbe avere una distribuzione più coerente intorno 10ms. Per questo motivo, gli analisti di prestazioni spesso esaminano le latenza per centoile (come 95th o 99th percentile) per capire il comportamento peggiore degli utenti.
Analisi del rapporto di lettura/scrittura
Il rapporto lettura/scrittura caratterizza l'equilibrio delle operazioni di lettura e scrittura in un carico di lavoro. Questo rapporto influisce significativamente sulle prestazioni perché molti sistemi di storage presentano caratteristiche asimmetriche delle prestazioni, possono essere più veloci a leggere che a scrivere, o viceversa.
Ad esempio, un server web che serve principalmente contenuti statici potrebbe avere un rapporto di lettura/scrittura 95:5, mentre un database che gestisce aggiornamenti frequenti potrebbe mostrare un rapporto 60:40. Capire il rapporto lettura/scrittura del carico di lavoro aiuta a selezionare le tecnologie di memorizzazione appropriate e configurare strategie di cache.
Calcolo del tasso di incastro della cache
La velocità di rilevamento Cache misura l'efficacia dei meccanismi di caching nella riduzione dell'i/o di archiviazione. Calcolalo dividendo il numero di richieste servite dalla cache per il numero totale di richieste, moltiplicando per 100 per esprimere come percentuale. Un tasso di successo della cache del 90% significa che il 90% delle richieste di dati sono state soddisfatte dalla cache senza accedere al dispositivo di archiviazione sottostante.
Le alte percentuali di successo della cache migliorano notevolmente le prestazioni di archiviazione percepite perché l'accesso ai dati dalla cache basata su RAM è ordini di grandezza più veloci della lettura dal disco. Ad esempio, un successo della cache potrebbe completare in microsecondi mentre una mancanza di cache che richiede l'accesso al disco richiede millisecondi, una differenza di 1.000x o più.
Depth Queue e il suo impatto
La profondità di queue si riferisce al numero di operazioni I/O in attesa di essere elaborate dal sistema di archiviazione. Sebbene non sia strettamente un calcolo, la profondità della coda di comprensione è essenziale per interpretare le metriche di prestazione. La maggior parte di quelle alte figure IOPS 80K-100K sono ottenute tramite benchmarking con profondità di coda molto elevate (16-32).
Se la tua memoria mostra costantemente le profondità della coda superiori a 4-8, suggerisce che il sistema non può continuare con le richieste I/O in arrivo, portando ad una maggiore latenza. Il monitoraggio della media e delle profondità della coda di picco aiuta a identificare quando lo storage diventa un collo di bottiglia e quando potrebbe essere il momento di aggiornare o ottimizzare la configurazione.
Calcolo di un'efficace produttività
Efficace contabilità di throughput per i dati reali trasferiti in condizioni reali, tra cui overhead da metadati di file system, protocolli di rete e altri fattori. Mentre il throughput teorico potrebbe essere calcolato semplicemente come IOPS × dimensione del blocco, il throughput efficace è tipicamente inferiore a causa di questi overheads.
Per esempio, il trasferimento di un file da 10 GB in 100 secondi produce un'efficace produttività di 100MB/s. Confrontando un'efficace produttività ai massimi teorici aiuta a identificare dove la sovraccarica sta consumando le prestazioni. Le grandi discrepanze potrebbero indicare strozzature di rete, configurazioni di file system inefficienti o modelli di applicazione suboptimale I/O che potrebbero essere ottimizzati.
Strumenti e metodologie di Benchmarking del sistema di file
Il corretto benchmarking è essenziale per comprendere le caratteristiche delle prestazioni del file system, confrontando diverse soluzioni di storage e convalidando che i sistemi soddisfano i requisiti di prestazione. Tuttavia, nessun singolo benchmark misura adeguatamente le prestazioni del file system. Alcuni benchmark comunemente accettabili e ampiamente utilizzati e le tecniche di benchmarking possono facilmente nascondere i overheads, i overheads ingiustamente over-emphasize, o possono in generale enfatizzare o de-emphasize molte delle proprietà del file system.
Strumenti di Benchmarking industriale
Fio (Flexible I/O Tester) è diventato lo standard de facto per il benchmarking dello storage grazie alla sua flessibilità, alla sua serie completa di funzionalità e alla capacità di simulare diversi modelli di carico di lavoro. Fio può testare vari motori I/O, dimensioni dei blocchi, rapporti di lettura/scrittura, profondità della coda e modelli di accesso, rendendolo adatto per caratterizzare il comportamento di storage in condizioni che corrispondono strettamente alle applicazioni reali.
Vdbench, originariamente sviluppato da Sun Microsystems, eccelle nella generazione di carichi di lavoro complessi e multi-threaded ed è particolarmente popolare nel test di storage enterprise. Può simulare host multipli che accede allo storage condiviso, rendendolo prezioso per testare ambienti SAN e NAS.
IOzone è uno strumento di riferimento per i filesystem. Il benchmark genera e misura una varietà di operazioni di file. Il test di benchmark I/O prestazioni per le seguenti operazioni: Leggi, scrivere, rileggere, riscrivere, leggere indietro, leggere strided, fread, fwrite, lettura casuale, pread ,mmap, aio read, aio write.
Benchmarks del sistema di file specializzato
Blogbench è un benchmark del filesystem portatile che cerca di riprodurre il carico di un server di file occupato nel mondo reale. Esso sottolinea il filesystem con più thread che eseguono letture casuali, scriva e riscrive per ottenere un'idea realistica della scalabilità e della convalutazione che un sistema può gestire.
Il benchmark fs mark si concentra sulla creazione di file e sulle prestazioni di cancellazione, che è fondamentale per applicazioni che spesso creano file temporanei o gestiscono grandi numeri di piccoli file. Misura il tasso in cui i file possono essere creati e la latenza di varie operazioni di file system, fornendo insight sulle prestazioni dei metadati che altri benchmark potrebbero trascurare.
Metodologia di Benchmark Migliori Pratiche
I benchmark del file system utili dovrebbero evidenziare le prestazioni di alto livello e di basso livello. Pertanto, si consiglia di utilizzare almeno un macrobenchmark o una traccia per mostrare una visione di alto livello delle prestazioni, insieme a diversi microbenchmark per evidenziare le viste più focalizzate. Questo approccio multistrato assicura di comprendere sia il comportamento generale del sistema che le caratteristiche specifiche delle prestazioni.
I micro-benchmark sono utili per isolare le prestazioni di parti del sistema perché i benchmark non hanno le complicazioni aggiuntive che derivano dall'esercizio di più operazioni contemporaneamente. Sebbene i micro-benchmarks forniscono le informazioni più fini, di solito non forniscono abbastanza informazioni sulle prestazioni generali di un sistema.
Non importa quale metodo viene utilizzato, è sempre importante capire altri potenziali colli di bottiglia nell'ambiente e assicurarsi che non stiano influenzando i risultati. Ad esempio, quando si misura le prestazioni di scrittura, è necessario assicurarsi che il disco sorgente può leggere i dati velocemente come le prestazioni di scrittura previste. Questa attenzione all'ambiente di test completo impedisce risultati ingannevoli causati da strozzature al di fuori del sistema di archiviazione in fase di test.
Segnalare il numero di run consente al lettore di determinare il rigore di benchmarking. Le prestazioni di storage possono variare a causa di effetti di cache, processi di sfondo e altri fattori, in modo che le prove multiple contribuiscano a stabilire la fiducia nei risultati e identificare eventuali anomalie.
Scegliere il Benchmark destro per il tuo carico di lavoro
Il miglior punto di riferimento da utilizzare è quello che più si adatta all'applicazione che si prevede di essere in esecuzione sull'infrastruttura che si sta testando. I benchmark generici forniscono dati comparativi utili, ma i test specifici per applicazioni forniscono le più rilevanti informazioni sulle prestazioni. Se possibile, catturare tracce del carico di lavoro di produzione reale e riprodurli in ambienti di test per vedere esattamente come le configurazioni di storage diverse si esibiranno.
Questo metodo è sempre il migliore perché misura le prestazioni per i carichi di lavoro reali che gli utenti stanno correndo sopra il servizio di archiviazione. Questo metodo spesso non è pratico perché richiede una replica dell'ambiente di produzione e gli utenti di generare un carico corretto sul sistema. Quando il test completo di applicazione non è fattibile, utilizzare benchmark sintetici che approssimano strettamente le caratteristiche del carico di lavoro in termini di dimensione del blocco, rapporto lettura / scrittura, sequenziali contro i livelli di accesso casuale e concorrenzialità.
Identificazione e diagnosi di collo di bottiglia
Identificare le prestazioni strozzature richiede analisi sistematiche delle metriche, comprensione dell'architettura di sistema, e spesso alcuni detective lavorano per tracciare problemi alle loro cause principali. I problemi di prestazioni del sistema di file possono provenire da più strati dello stack di archiviazione, tra cui i supporti di memorizzazione fisici, l'implementazione del file system, il programmatore di sistema operativo I/O, l'infrastruttura di rete e i modelli di applicazione I/O.
Limitazioni di Media di Stoccaggio
I dischi rigidi tradizionali (HDD) si affidano a piastre di filatura e a teste di lettura/scrittura in movimento, che limitano intrinsecamente i loro IOPS a causa della latenza meccanica. D'altra parte, Solid-State Drives (SSD) sfruttano la memoria flash senza parti in movimento, consentendo loro di raggiungere i IOPS notevolmente più elevati, spesso con ordini di magnitudo.
Se si osservano alti livelli di latenza, bassi IOPS o scarsa produttività nonostante le configurazioni ottimizzate, i dispositivi di archiviazione possono semplicemente mancare le capacità di prestazione richieste dal carico di lavoro.
File System e problemi di configurazione
La scelta e la configurazione del file system hanno un impatto significativo sulle prestazioni. Diversi sistemi di file ottimizzano per diversi casi di utilizzo, alcuni prescrivono la coerenza e l'integrità dei dati, mentre altri si concentrano sulle prestazioni raw.
Ad esempio, un file system configurato con piccole dimensioni di blocco si esibirà male per grandi carichi di lavoro sequenziali I/O a causa di un aumento della sovraccarico, mentre grandi dimensioni di blocchi di spazio di scarico e ridurre le prestazioni per i carichi di lavoro che coinvolgono molti piccoli file.
Rete e protocollo Overhead
Tuttavia, anche alcuni dischi locali possono avere lento I/O. Le informazioni su questa pagina possono essere utilizzate per uno scenario. Lo storage collegato alla rete introduce la latenza aggiuntiva e potenziali colli di bottiglia rispetto allo storage locale.
Quando si diagnosticano problemi di prestazioni di storage di rete, si esamina l'utilizzo della rete, la latenza tra server client e server di archiviazione e metriche specifiche del protocollo. Strumenti come iperf possono testare la larghezza di banda di rete raw, mentre gli analizzatori di protocollo possono rivelare inefficienze in come le applicazioni interagiscono con i file system di rete.
Applicazione I/O modelli
I modelli I/O applicativi inefficienti spesso causano problemi di prestazioni anche quando l'infrastruttura di archiviazione è adeguata. Le applicazioni che eseguono molte piccole operazioni I/O sincrone invece di richieste di batching, o che non riescono ad allineare I/O con i limiti del blocco del file system, possono raggiungere solo una frazione delle prestazioni di storage disponibili.
L'analisi dei modelli I/O dell'applicazione che utilizzano strumenti come strace, blktrace o profili specifici dell'applicazione può rivelare opportunità di ottimizzazione. Le questioni comuni includono le chiamate fsync() eccessive che forzano le scritture sincrone, leggendo interi file quando sono necessarie solo porzioni, o più volte l'apertura e la chiusura dei file invece di tenerli aperti.
Strategie complete di miglioramento delle prestazioni
Migliorare le prestazioni del file system richiede un approccio multi-faceted che affronta l'hardware, la configurazione del software e l'ottimizzazione del carico di lavoro. La strategia più efficace dipende dai vostri specifici colli di bottiglia, vincoli di bilancio e requisiti di prestazioni.
Aggiornamenti e Ottimizzazione hardware
L'aggiornamento a supporti di memorizzazione più veloci rappresenta il percorso più diretto per migliorare le prestazioni. La sostituzione di HDD tradizionali con SSD può aumentare IOPS di 10100x e ridurre la latenza da millisecondi a microsecondi. Per prestazioni ancora più elevate, gli SSD NVMe collegati tramite PCIe offrono una minore latenza e una maggiore produttività rispetto ai SSD basati su SATA eliminando il protocollo di archiviazione legacy.
Considerate le caratteristiche specifiche delle prestazioni necessarie per il vostro carico di lavoro quando si seleziona l'hardware di archiviazione. I SSD di livello consumer possono offrire velocità di lettura/scrittura sequenziali impressionanti ma prestazioni casuali di I/O o latenza inconsistente sotto carico sostenuto.
Le configurazioni RAID possono migliorare sia le prestazioni che l'affidabilità, anche se diversi livelli RAID offrono diversi tradeoff. La striscia RAID 0 massimizza le prestazioni ma non fornisce ridondanze, mentre RAID 10 offre prestazioni positive e ridondanza al costo dell'efficienza di archiviazione del 50%.
Selezione e configurazione del sistema di file
La scelta del file system appropriato per il carico di lavoro e la configurazione corretta può produrre miglioramenti sostanziali delle prestazioni senza modifiche hardware. I moderni file system come XFS, ext4, Btrfs e ZFS hanno ciascuno diversi punti di forza e casi di utilizzo ottimali. XFS eccelle nella gestione di file di grandi dimensioni e paralleli I/O, ext4 fornisce buone prestazioni all-around con stabilità matura, Btrfs offre funzionalità avanzate come snapshot e compressione dei file, mentre i dati ZFS combinano
I parametri di impostazione del sistema di file influiscono significativamente sulle prestazioni.
- Block size:[[] Le dimensioni dei blocchi più grandi migliorano le prestazioni di I/O sequenziali ma possono sprecare spazio per i piccoli file.
- Inode allocazione:[] Pre-alllocation inodi sufficienti impedisce il degrado delle prestazioni quando si crea molti file. Alcuni file system consentono di sintonizzare la densità inode al momento della creazione.
- Modalità di navigazione:[] La pubblicazione completa dei dati fornisce la massima sicurezza ma riduce le prestazioni.
- Opzioni di avvio:[[] Opzioni come noatime (non aggiornare i tempi di accesso) ridurre la sovraccarico di scrittura, mentre il supporto di scarto/TRIM aiuta a mantenere le prestazioni SSD nel tempo.
- Politiche di allocazione:[] L'allocazione basata su un'estensione riduce la frammentazione rispetto all'allocazione basata sul blocco, migliorando le prestazioni per i file di grandi dimensioni.
Implementazione di efficaci strategie di caching
Caching rappresenta una delle tecniche di ottimizzazione delle prestazioni più convenienti perché sfrutta la memoria veloce per ridurre l'accesso al deposito lento.
Casco della pagina di sistema operativo:[] Il sistema memorizza automaticamente i dati di file frequentemente accessibili in RAM. Assicurare la memoria sufficiente è disponibile per la cache di pagina evitando sovra impegno della memoria. Monitorare le percentuali di successo della cache per verificare che la cache sia effettivamente al servizio del carico di lavoro.
Caching a livello di applicazione:[ Molte applicazioni implementano i propri strati di caching. I sistemi di database, server web e sistemi di consegna dei contenuti beneficiano di cache di applicazioni configurate correttamente.
Cacche dei controller di memorizzazione:[ I controller RAID hardware e gli array di storage enterprise includono la memoria della cache che può migliorare notevolmente le prestazioni, soprattutto per i carichi di lavoro acuti. Le cache di scrittura a batteria o flash-backed consentono al controller di riconoscere le scritture immediatamente mentre destaging i dati al disco in modo asincrono, riducendo latenza di scrittura da millisecondi a microsecondi.
Tier di cache SSD:[] Le configurazioni di storage ibridi che utilizzano SSD come un livello di cache per array HDD più grandi forniscono un equilibrio economico tra prestazioni e capacità. Le tecnologie come bcache, dm-cache e soluzioni di tiering specifiche per i fornitori promuovono automaticamente i dati di accesso più veloce allo storage SSD mantenendo i dati meno accessibili su HDD più economici.
Ottimizzazione del programma I/O
Il programmatore I/O del sistema operativo determina l'ordine in cui le richieste I/O sono inviate ai dispositivi di archiviazione. Diversi programmatori ottimizzano per diversi scenari e selezionando il programmatore appropriato per il tipo di archiviazione e il carico di lavoro migliora le prestazioni.
Per gli HDD tradizionali, i programmatori come CFQ (Completamente Fair Queuing) o Deadline che riordinano le richieste per minimizzare il movimento della testa del disco migliorano il throughput e riducono la la latenza. Tuttavia, questi programmatori aggiungono una super-tenda non necessaria per gli SSD, che non hanno tempo di ricerca meccanica.
I moderni kernel Linux includono i programmatori BFQ (Budget Fair Queueing) e i programmatori di linee di mq progettati per HDD e SSD, che offrono buone prestazioni in diversi tipi di storage. Il programmatore Kyber mira specificamente ai dispositivi NVMe a bassa latenza.
Diffusione e Gestione dello Spazio
La frammentazione del file system avviene quando i file vengono memorizzati in blocchi non continui sparsi attraverso il dispositivo di archiviazione. La frammentazione riduce le prestazioni, in particolare per le operazioni di lettura sequenziali e su HDD dove aumenta il tempo di ricerca. Mentre i moderni file system impiegano strategie di allocazione che minimizzano la frammentazione, si verifica ancora nel tempo, soprattutto su sistemi fortemente utilizzati.
Per gli HDD tradizionali, la deframmentazione regolare può ripristinare le prestazioni riorganizzando i file in blocchi contigui. La maggior parte dei moderni file system includono strumenti di deframmentazione online che possono essere eseguiti mentre il sistema è in uso. Tuttavia, la deframmentazione è intensiva I/O e dovrebbe essere programmata durante i periodi di bassa usura per evitare i carichi di lavoro di produzione di impatto.
Per gli SSD, la deframmentazione tradizionale è inutile e potenzialmente dannosa perché causa ulteriori operazioni di scrittura che consumano la resistenza di scrittura limitata dell'unità. Invece, assicurano che il supporto TRIM/discard sia abilitato, che consente al file system di informare l'SSD sui blocchi eliminati, consentendo la raccolta di rifiuti dell'unità di mantenere le prestazioni.
I sistemi di file in genere sperimentano il degrado delle prestazioni quando l'utilizzo supera l'80-90% perché l'allocatore ha meno opzioni per posizionare i nuovi dati contiguamente.
Ottimizzazione del carico di lavoro e Tuning delle applicazioni
Spesso i miglioramenti più significativi delle prestazioni derivano dall'ottimizzazione di come le applicazioni interagiscono con lo storage piuttosto che l'aggiornamento dell'hardware.
- Le operazioni di Bacco I/O:[] Combinare più piccole richieste di I/O in operazioni più grandi per ridurre la testata e migliorare il throughput.
- Utilizzo I/O asincrono:[] L'asincrono I/O permette alle applicazioni di continuare a lavorare mentre le operazioni I/O complete in background, migliorando il parallelismo e l'utilizzo delle risorse.
- Allineare I/O con confini di blocco:[ Assicurare le operazioni di lettura e scrittura allineare con i confini del blocco del file system per evitare cicli di lettura-modify-scrittura che riducono le prestazioni.
- Minimizzare fsync() chiama:[] Le operazioni di scrittura sincrono esatte riducono le prestazioni.
- Implementa la lettura e la scrittura-dietro:[ Prefetching dati prima che sia necessario e buffering scrive possono nascondere latenza di archiviazione dalle applicazioni.
- Utilizzare I/O mappati dalla memoria in modo appropriato:[[ I file mappati con memoria possono semplificare il codice e migliorare le prestazioni per alcuni modelli di accesso, ma non possono essere ottimali per tutti gli scenari.
Ottimizzazione di storage di rete
Per lo storage collegato alla rete, l'ottimizzazione si estende oltre il sistema di archiviazione stesso per includere l'infrastruttura di rete e la configurazione del protocollo. Assicurare una larghezza di banda di rete adeguata tra client e server di archiviazione, un limite di connessione di rete 1Gbps fino a circa 125MB/s, indipendentemente dalle prestazioni di storage.
Ottimizzare i protocolli di sistema di file di rete con parametri di sintonia come dimensioni del buffer di lettura e scrittura, il numero di operazioni concorrenti e il comportamento di caching. Per NFS, parametri come dimensioni di trasferimento di controllo rsize e wsize, mentre opzioni come asincron versus sync influenzano le prestazioni e i tradeoff di sicurezza.
Considerare l'utilizzo di protocolli RDMA (Remote Direct Memory Access) come NFS su RDMA o iSER (ISCSI Extensions for RDMA) quando disponibile. RDMA bypassa lo stack di rete del sistema operativo, riducendo la overhead e la latenza della CPU aumentando il throughput per la memorizzazione di rete.
Monitoraggio e gestione delle prestazioni continue
L'ottimizzazione delle prestazioni non è un'attività a tempo pieno ma un processo continuo. L'implementazione di un monitoraggio completo garantisce di rilevare il degrado delle prestazioni prima che impatta gli utenti e fornisce i dati necessari per la pianificazione delle capacità e le decisioni di ottimizzazione.
Metrica di monitoraggio essenziale
Stabilire metriche di prestazione della linea di base durante il funzionamento normale in modo da poter identificare anomalie e degrado.
- IOPS:[]] Tracciare sia leggere che scrivere IOPS separatamente, insieme a valori di picco e medi.
- Throughput:[] Monitorare i tassi di trasferimento dei dati per identificare la saturazione della larghezza di banda.
- Latency:[] Tracciare la media, il 95esimo per centoile e la latenza del 99 per cento per capire sia le prestazioni tipiche che quelle peggiori.
- Di profondità:[] Monitorare le lunghezze della coda I/O per identificare quando l'archiviazione non può tenere il passo con la domanda.
- Utilizzazione:[] Tracciare la percentuale di storage occupato per identificare la saturazione.
- Cache tassi di successo:[] Monitorare l'efficacia del caching a vari strati.
- Clima degli errori:[ Tracciare errori I/O, timeout e ripetizioni che possono indicare problemi hardware.
- metriche di capacità:[ Monitorare lo spazio libero, l'uso inodo e le tendenze di crescita per la pianificazione delle capacità.
Strumenti di monitoraggio e piattaforme
Esistono numerosi strumenti per il monitoraggio delle prestazioni del file system e dello storage. Strumenti di sistema operativo integrati come iostat, vmstat e sar forniscono metriche di performance di base e sono disponibili sulla maggior parte dei sistemi. Questi strumenti di riga di comando sono utili per la risoluzione dei problemi, ma non hanno le capacità storiche di visualizzazione e di dati necessari per l'analisi della tendenza.
piattaforme di monitoraggio complete come Prometheus con Grafana, Nagios, Zabbix, o soluzioni commerciali forniscono una raccolta metrica centralizzata, archiviazione dati storici, dashboard di visualizzazione e capacità di avviso. Queste piattaforme consentono di correlare le prestazioni di storage con altre metriche di sistema, identificare le tendenze nel tempo e ricevere notifiche quando le prestazioni si degradano oltre le soglie accettabili.
Per gli ambienti cloud, i servizi di monitoraggio del provider cloud come AWS CloudWatch, Azure Monitor o Google Cloud Monitoring forniscono metriche specifiche per lo storage e l'integrazione con altri servizi cloud, queste piattaforme comprendono le caratteristiche specifiche dei servizi di archiviazione cloud e forniscono metriche e avvisi appropriati.
Stabilire le prestazioni Baseline e SLA
Stabilire basi di prestazioni durante il normale funzionamento per fornire punti di riferimento per il confronto. Le linee di base dovrebbero catturare le prestazioni tipiche durante periodi diversi — ore di lavoro rispetto alla notte, giorni feriali rispetto ai fine settimana, periodi di elaborazione di fine mese, e altri modelli ciclici.
Definire gli accordi di livello di servizio (SLA) o gli obiettivi di livello di servizio (SLO) che specificano le soglie di prestazione accettabili. Ad esempio, si potrebbe definire che il 95% delle operazioni di lettura deve completare entro 10ms, o che il throughput medio deve superare i 500MB/s durante le ore di lavoro.
Pianificazione delle capacità e analisi delle tendenze
Utilizzare dati storici sulle prestazioni per identificare le tendenze e il piano per le esigenze future della capacità. Analizzare i tassi di crescita per l'utilizzo di storage, IOPS e throughput per prevedere quando l'infrastruttura corrente diventerà insufficiente.
Un sistema di archiviazione potrebbe avere uno spazio libero adeguato ma insufficiente, o un throughput insufficiente per i carichi di lavoro in crescita. Al contrario, le prestazioni potrebbero essere sufficienti ma la capacità di avvicinarsi ai limiti. La pianificazione completa delle capacità affronta entrambe le dimensioni per garantire che i sistemi possano gestire i requisiti futuri.
Argomenti avanzati in Performance di File System
Considerazioni di prestazioni per diversi tipi di carico di lavoro
Le diverse applicazioni pongono richieste molto diverse sull'infrastruttura di archiviazione. Le banche dati transazionali, le piattaforme di analisi, gli ambienti virtualizzati e i carichi di lavoro di machine learning richiedono ogni tipo di prestazioni diverse.
Applicazioni transazionali come database richiedono tipicamente bassa latenza e elevati IOPS. Questi sistemi elaborano molte piccole operazioni di lettura e scrittura e dipendono dai tempi di risposta rapidi per mantenere le prestazioni dell'applicazione. I carichi di lavoro di analisi, d'altra parte, spesso prescrivono un elevato rendimento perché elaborano grandi set di dati sequenziali.
Gli ambienti virtualizzati presentano sfide uniche perché più macchine virtuali con caratteristiche di carico di lavoro diverse condividono lo stesso storage sottostante, creando carichi di lavoro misti che combinano I/O sequenziali e casuali, legge e scrive e variano le dimensioni dei blocchi. I sistemi di storage per la virtualizzazione devono gestire questa diversità in modo efficiente, spesso richiedendo hardware ad alte prestazioni e funzionalità di qualità-di-servizio sofisticate per impedire a una VM di monopolizzare le risorse.
Considerazioni sulle prestazioni di storage cloud
I servizi di storage cloud presentano diverse caratteristiche di performance e strategie di ottimizzazione rispetto allo storage tradizionale on-premises. I provider cloud offrono in genere più livelli di storage con diversi profili di performance e costi.
Ad esempio, AWS offre tipi di volume EBS che vanno da SSD generico (gp3) a IOPS SSD (io2) a HDD ottimizzato per il throughput (st1). Ogni tipo ha caratteristiche di prestazioni diverse, prezzi e casi di utilizzo ottimali.
Le prestazioni di storage cloud dipendono spesso da fattori che vanno oltre il servizio di storage stesso, tra cui il tipo di istanza, la larghezza di banda di rete e la posizione regionale. Assicurare che le istanze di calcolo abbiano una larghezza di banda di rete adeguata per utilizzare pienamente le prestazioni di storage, un tipo di istanza di piccole dimensioni potrebbe limitare il throughput indipendentemente dalle capacità di storage.
Tecnologie di stoccaggio emergenti
Le nuove tecnologie di storage continuano a spingere i confini delle prestazioni. NVMe over Fabrics (NVMe-oF) estende i vantaggi a bassa latenza di NVMe allo storage con connessione in rete, consentendo lo storage condiviso con prestazioni che si avvicinano ai SSD locali NVMe. Questa tecnologia è particolarmente rilevante per l'elaborazione ad alte prestazioni, database e altre applicazioni sensibili alla latenza che precedentemente richiedevano lo storage locale.
Tecnologie di memoria persistenti come Intel Optane sfocano la linea tra memoria e storage, offrendo storage byte-individabile con latencies misurati in nanosecondi anziché microsecondi o millisecondi.
I dispositivi di archiviazione computazionali che includono le capacità di elaborazione accanto ai supporti di memorizzazione consentono di scaricare alcune operazioni sul dispositivo di archiviazione stesso, riducendo il movimento dei dati e migliorando le prestazioni per specifici carichi di lavoro come query di database, compressione o crittografia.
Attuazione pratica: un approccio passo-passo
L'implementazione di un programma di ottimizzazione delle prestazioni del file system completo richiede una metodologia sistematica.
Passo 1: Stabilire la base delle prestazioni attuali
Iniziate misurando accuratamente le prestazioni attuali utilizzando strumenti di benchmarking appropriati e sistemi di monitoraggio. Raccogliete i dati in tempi sufficienti per catturare la variazione normale e identificare i modelli.
Fase 2: Identificare i requisiti di prestazione
Definire requisiti specifici di prestazioni in base alle esigenze di applicazione e alle aspettative degli utenti. Quantifica requisiti in termini di IOPS, throughput, latenza per centoiles, e altre metriche rilevanti. Distinguere tra le prestazioni minime accettabili e le prestazioni ottimali desiderate per guidare la priorità degli sforzi di ottimizzazione.
Passo 3: Analizzare i colli di bottiglia
Utilizzare il monitoraggio dettagliato e la profilazione per individuare i colli di bottiglia specifici, sia in hardware di archiviazione, configurazione del file system, infrastruttura di rete, o modelli I/O di applicazione.
Passo 4: Ottimizzazione dell'esecuzione
Indirizzo identificato strozzature sistematicamente, a partire da ottimizzazioni che forniscono il massimo miglioramento delle prestazioni per il minor costo e la complessità. L'implementazione cambia in modo incrementale piuttosto che apportare più modifiche simultanee, il che rende difficile determinare quali ottimizzazioni sono efficaci.
Passo 5: convalida e monitoraggio
Dopo aver implementato le ottimizzazioni, convalidare che i miglioramenti delle prestazioni soddisfano i requisiti attraverso test completi. Stabilire un monitoraggio continuo per garantire che le prestazioni rimangano accettabili nel tempo e per rilevare eventuali regressioni. Documentare tutte le modifiche e i loro impatti per costruire la conoscenza organizzativa su ciò che funziona nel vostro ambiente.
Passo 6: Iterate e raffinate
Come si evolvono i carichi di lavoro, possono emergere nuovi colli di bottiglia, o le ottimizzazioni in precedenza efficaci possono diventare meno rilevanti.
Conclusione: Costruire una cultura basata sulle prestazioni
La gestione efficace delle prestazioni del file system richiede più conoscenze e strumenti tecnici, richiede una cultura che valorizza le prestazioni come aspetto critico della progettazione e del funzionamento del sistema. Le organizzazioni che eccellono a prestazioni di storage condividono diverse caratteristiche: stabiliscono requisiti di prestazioni chiare, implementano un monitoraggio completo, analizzano sistematicamente i dati e ottimizzano continuamente le loro infrastrutture.
La complessità dei moderni sistemi di storage significa che nessuna singola tecnica metrica, utensile o di ottimizzazione fornisce una soluzione completa. Il successo richiede la comprensione delle interrelazioni tra IOPS, throughput e latenza; la selezione di metodologie di benchmarking appropriate; l'identificazione di colli di bottiglia con precisione; e l'implementazione di ottimizzazioni mirate che affrontano cause radice piuttosto che sintomi.
Poiché le tecnologie di storage continuano ad evolversi, con SSD più veloci, memoria persistente emergente, archiviazione computazionale e architetture cloud-native, i fondamenti dell'analisi delle prestazioni rimangono costanti. Misurare attentamente, comprendere i requisiti del carico di lavoro, identificare i colli di bottiglia sistematicamente, e ottimizzare in base ai dati piuttosto che alle ipotesi.
For additional resources on storage performance optimization, consider exploring the Storage Networking Industry Association (SNIA) for industry standards and best practices, the Linux kernel documentation for detailed information on I/O statistics and tuning, Fio documentation for comprehensive benchmarking guidance, and vendor-specific resources from your storage hardware and software providers. Continuous learning and staying current with evolving technologies and techniques w