Fio è l'abbreviazione di IO flessibile, un versatile generatore di carichi di lavoro IO. Nel 2005, Jens Axboe, la spina dorsale e autore dello stack IO nel kernel Linux, era stanco di scrivere costantemente programmi di test una tantum per confrontare o verificare le modifiche al sottosistema IO di Linux. Di conseguenza, fio è nato per rendere il lavoro molto più semplice. Era sufficientemente flessibile da consentire configurazioni dettagliate del carico di lavoro e conteneva i report necessari per dare un senso ai dati al termine. Jens ha continuato a lavorare su fio quando è entrato in Oracle e, successivamente, in Fusion-io.
Fio è l'abbreviazione di IO flessibile, un versatile generatore di carichi di lavoro IO. Nel 2005, Jens Axboe, la spina dorsale e autore dello stack IO nel kernel Linux, era stanco di scrivere costantemente programmi di test una tantum per confrontare o verificare le modifiche al sottosistema IO di Linux. Di conseguenza, fio è nato per rendere il lavoro molto più semplice. Era sufficientemente flessibile da consentire configurazioni dettagliate del carico di lavoro e conteneva i report necessari per dare un senso ai dati al termine. Jens ha continuato a lavorare su fio quando è entrato in Oracle e, successivamente, in Fusion-io. Oggi, la comunità di utenti fio è attiva e impegnata nello sviluppo, e di conseguenza sviluppano continuamente fio e implementano nuove funzionalità. Hanno contribuito alla fio più di 100 persone, e molte lo hanno fatto più volte. Grazie a questo impegno, una nuova versione di fio viene rilasciata all'incirca ogni 4-6 settimane e fio è ampiamente utilizzato come benchmark standard del settore, strumento di stress test e per scopi di verifica IO.
Set di funzionalità e capacità principali
Le due caratteristiche principali di un buon benchmark sono la capacità di eseguire il carico di lavoro desiderato e di ottenere le unità di output desiderate. Essere flessibili è stato (e continua ad essere) il focus principale della fio. Supporta opzioni di carico di lavoro non presenti in altri benchmark insieme a statistiche IO rigorosamente dettagliate. Qualsiasi tipo di mix IO casuale e sequenziale, o mix di lettura/scrittura, è facile da definire. Anche il design interno di fio è flessibile. La definizione di un carico di lavoro è completamente separata dal motore IO (un termine utilizzato da fio per indicare il modo in cui l'IO viene consegnato al kernel). Ad esempio, se desideri eseguire un carico di lavoro con asincrono nativo su Linux e quindi confrontare lo stesso carico di lavoro su Windows, è sufficiente modificare la riga del motore IO singolo con la versione nativa su Windows. Oppure, se desideri statistiche sul percentile di latenza più dettagliate alla fine della distribuzione, anche questo è facile. Basta specificare i percentili esatti a cui sei interessato e fio lo seguirà per te.
Sebbene inizialmente sviluppate su Linux, le aree di fio che non sono legate a funzionalità specifiche del sistema operativo funzionano su qualsiasi piattaforma, da Windows a HP-UX fino ad Android. Esistono anche motori IO nativi su Linux, Windows, Solaris, ecc. Questa è una funzionalità chiave per ambienti misti in cui si desidera essere in grado di eseguire carichi di lavoro identici (il più vicino possibile) su ambienti operativi diversi. Inoltre, sebbene fio venga normalmente eseguito direttamente sul computer di destinazione, supporta anche le connessioni di rete. È possibile eseguire un backend server sui computer di destinazione ed eseguire il frontend di raccolta dati su un computer client. Ciò semplifica la gestione, soprattutto se fio viene spesso utilizzato su più macchine.
Fio è prevalentemente un'applicazione CLI basata su testo, sebbene esista il supporto iniziale per un frontend GUI multipiattaforma basato su GTK (gfio). Al momento di questa pubblicazione, gfio è incluso nell'ultima versione di fio, v2.1, e dovrebbe essere abbastanza stabile. È in grado di fungere da frontend GUI per qualsiasi carico di lavoro supportato dal client CLI. Fornisce inoltre supporto di base per le opzioni di lavoro e i carichi di lavoro di modifica della GUI, sebbene il supporto completo sia ancora in fase di sviluppo poiché gfio è un work in progress.
Fio supporta anche tre diversi tipi di formati di output. L'output "classico" è quello predefinito che scarica le statistiche del carico di lavoro alla fine del carico di lavoro. C'è anche il supporto per un formato CSV, anche se sta lentamente diminuendo a favore di un formato di output basato su JSON. Quest'ultimo è molto più flessibile e ha il vantaggio di essere semplice da analizzare per persone e computer.
Fio ha fatto rapidi progressi grazie alla sinergia della sua vivace comunità di utenti e di sviluppo. È più facile da eseguire rispetto ai progetti concorrenti, sufficientemente flessibile da svolgere le attività degli utenti e ha un sovraccarico sufficientemente basso da gestire qualsiasi tipo di sistema di storage alla massima velocità. Abbinalo alle sue opzioni e ai suoi report più ricchi di qualsiasi altra cosa disponibile e fio è uno strumento eccellente.
Perché StorageReview.com utilizza FIO
Poiché abbiamo iniziato ad aumentare sia la quantità che la profondità delle nostre revisioni dello storage aziendale, abbiamo avuto bisogno di uno strumento di benchmarking migliore per misurare con precisione le prestazioni di diversi prodotti di storage su più sistemi operativi. I tradizionali software di generazione del carico di lavoro come Iometer o Vdbench offrono una compatibilità limitata con il sistema operativo non nativo oppure hanno avuto difficoltà a scalare i carichi per dispositivi di storage ad alte prestazioni come acceleratori di applicazioni PCIe o storage di rete ad alte prestazioni. Da quando è iniziata la nostra implementazione di FIO, abbiamo risolto molti di questi problemi e siamo addirittura andati oltre, supportando lo scripting per lunghi periodi di test. Questa funzionalità complessiva lo rende il nostro punto di riferimento sintetico preferito per tutte le revisioni aziendali.
Per le nostre revisioni utilizziamo FIO per misurare le prestazioni di un dispositivo di archiviazione in un determinato periodo di tempo. Per la maggior parte dei prodotti, ciò include 6 ore di precondizionamento prima di passare ai test principali. Per i dispositivi di storage PCIe più grandi che potrebbero non entrare in stato stazionario per molte ore durante i test, eseguiamo il precondizionamento per un tempo doppio, ovvero 12 ore prima dell'inizio dei test principali. Il nostro processo sintetico di benchmarking dello storage aziendale inizia con un'analisi delle prestazioni dell'unità durante un'accurata fase di precondizionamento. Ciascuno dei prodotti comparabili viene prima cancellato in modo sicuro utilizzando gli strumenti del fornitore e quindi precondizionato allo stato stazionario con lo stesso carico di lavoro con cui il dispositivo verrà testato con un carico pesante di 16 thread con una coda in sospeso di 16 per thread. A completamento del processo, testiamo quindi a intervalli prestabiliti più profili di profondità thread/coda per mostrare le prestazioni in condizioni di utilizzo leggero e intenso.
Prove di precondizionamento e di stato stazionario primario:
- Throughput (aggregato IOPS di lettura+scrittura)
- Latenza media (latenza di lettura+scrittura mediata insieme)
- Latenza massima (latenza di picco in lettura o scrittura)
- Deviazione standard della latenza (deviazione standard di lettura e scrittura mediata insieme)
La nostra analisi sintetica del carico di lavoro aziendale include diversi profili per riflettere alcune attività del mondo reale. Questi profili sono stati sviluppati per facilitare il confronto con i nostri benchmark precedenti e con valori ampiamente pubblicati come la velocità massima di lettura e scrittura di 4K e 8K 70/30, comunemente utilizzata per l'hardware aziendale.
- 4k
- 100% di lettura o 100% di scrittura
- 100% 4k
- fio –filename=/dev/sdx –direct=1 –rw=randrw –refill_buffers –norandommap –randrepeat=0 –ioengine=libaio –bs=4k –rwmixread=100 –io Depth=16 –numjobs=16 –runtime=60 –group_reporting –nome=4ktest
- 8k70/30
- 70% leggi, 30% scrivi
- 100% 8k
- fio –filename=/dev/sdx –direct=1 –rw=randrw –refill_buffers –norandommap –randrepeat=0 –ioengine=libaio –bs=8k –rwmixread=70 –io Depth=16 –numjobs=16 –runtime=60 –group_reporting –nome=8k7030test
Attualmente utilizziamo FIO versione 2.0.7 (x64) in CentOS 6.3 per i nostri test delle prestazioni Linux e FIO versione 2.0.12.2 (x64) in Windows Server 2008 R2 SP1 per le nostre prestazioni Windows.
Piattaforme di test aziendali StorageReview
Le soluzioni di storage sono testate con il benchmark sintetico FIO in Laboratorio di test aziendale di StorageReview utilizzando server autonomi. Utilizziamo HP ProLiant DL380/DL360 Gen9 per mostrare prestazioni realistiche, modificando solo l'adattatore di archiviazione o l'interfaccia di rete per connettere il nostro DL380/DL360 a diversi prodotti di archiviazione. Il DL380/DL360 ha dimostrato di offrire un'ottima compatibilità con dispositivi di terze parti, rendendolo un'eccellente piattaforma di riferimento per questo diversificato ambiente di test.
(Generazione 1) Lenovo Think Server RD240
- 2 Intel Xeon X5650 (2.66 GHz, cache da 12 MB)
- Chipset Intel 5500+ ICH10R
- Memoria: RDIMM registrati DDR8 da 2 GB (4 x 1333 GB) a 3 MHz
- Windows Server 2008 Standard Edition R2 SP1 a 64 bit e CentOS 6.2 a 64 bit
- HBA LSI 9211 SAS/SATA da 6.0 Gb/s
(Generazione 2) Lenovo Think Server RD630
- 2 Intel Xeon E5-2620 (2.0 GHz, 15 MB di cache, 6 core)
- Chipset Intel C602
- Memoria: RDIMM registrati DDR16 da 2 GB (8 x 1333 GB) a 3 MHz
- Windows Server 2008 R2 SP1 a 64 bit, Windows Server 2012 Standard, CentOS 6.3 a 64 bit
- 100GB Micron RealSSD P400e Avvia SSD
- HBA LSI 9207-8i SAS/SATA 6.0Gb/s (per il benchmarking di SSD o HDD)
(Generazione 3) HP ProLiant DL380/DL360 Gen9
- Doppie CPU Intel E5-2667 v3 (3.2 GHz, 8 core, cache da 20 MB)
- 256 GB di RAM (16 GB x 16 DDR4, 128 GB per CPU)
- Windows Server 2012 R2, CentOS 7.0
- SSD di avvio da 400 GB – Windows
- Disco rigido di avvio da 300 GB – Linux
- HBA LSI 9300-8e SAS/SATA da 12.0 Gb/s (Per il benchmarking di SSD o HDD)
- Supermicro SuperChassis 846BE1C-R1K28B SAS3 JBOD (per collegare SSD o HDD)