Fio est l'abréviation de Flexible IO, un générateur de charge de travail IO polyvalent. En 2005, Jens Axboe, l'épine dorsale et l'auteur de la pile IO dans le noyau Linux, était fatigué d'écrire constamment des programmes de test ponctuels pour évaluer ou vérifier les modifications apportées au sous-système Linux IO. En conséquence, fio est né pour rendre le travail beaucoup plus facile. Il était suffisamment flexible pour permettre des configurations de charge de travail détaillées et contenait les rapports nécessaires pour donner un sens aux données à la fin. Jens a continué à travailler sur fio lorsqu'il a rejoint Oracle et, plus tard, Fusion-io.
Fio est l'abréviation de Flexible IO, un générateur de charge de travail IO polyvalent. En 2005, Jens Axboe, l'épine dorsale et l'auteur de la pile IO dans le noyau Linux, était fatigué d'écrire constamment des programmes de test ponctuels pour évaluer ou vérifier les modifications apportées au sous-système Linux IO. En conséquence, fio est né pour rendre le travail beaucoup plus facile. Il était suffisamment flexible pour permettre des configurations de charge de travail détaillées et contenait les rapports nécessaires pour donner un sens aux données à la fin. Jens a continué à travailler sur fio lorsqu'il a rejoint Oracle et, plus tard, Fusion-io. Aujourd'hui, la communauté d'utilisateurs fio est active et engagée dans le développement, et par conséquent, ils développent continuellement fio et implémentent de nouvelles fonctionnalités. Plus de 100 personnes ont contribué à fio, et beaucoup l'ont fait plusieurs fois. Grâce à cet engagement, une nouvelle version de fio est publiée environ toutes les 4 à 6 semaines, et fio est largement utilisé comme référence standard de l'industrie, outil de test de stress et à des fins de vérification des entrées-sorties.
Principal ensemble de fonctionnalités et capacités
Les deux principales caractéristiques d'un bon benchmark sont la capacité d'exécuter la charge de travail souhaitée et d'obtenir les unités de sortie souhaitées. Être flexible était (et continue d'être) l'objectif principal de fio. Il prend en charge des options de charge de travail introuvables dans d'autres benchmarks ainsi que des statistiques d'E/S rigoureusement détaillées. Tout type de mélange d'E/S aléatoires et séquentiels, ou de mélange lecture/écriture, est facile à définir. La conception interne de fio est également flexible. La définition d'une charge de travail est complètement distincte du moteur d'E/S (un terme utilisé par fio pour indiquer comment les E/S sont fournies au noyau). Par exemple, si vous souhaitez exécuter une charge de travail avec async natif sur Linux, puis comparer la même charge de travail sur Windows, remplacez simplement la ligne de moteur IO unique par la version native sur Windows. Ou, si vous voulez des statistiques de centiles de latence plus détaillées à la fin de la distribution, c'est aussi facile. Spécifiez simplement les centiles exacts qui vous intéressent et fio suivra cela pour vous.
Bien qu'initialement développés sur Linux, les zones de fio qui ne sont pas liées à des fonctionnalités spécifiques au système d'exploitation fonctionnent sur n'importe quelle plate-forme, de Windows à HP-UX en passant par Android. Il existe également des moteurs d'E/S natifs sur Linux, Windows, Solaris, etc. Il s'agit d'une fonctionnalité clé pour les environnements mixtes où vous souhaitez pouvoir exécuter (aussi près) des charges de travail identiques sur différents environnements d'exploitation. De plus, alors que fio est normalement exécuté directement sur la machine cible, il prend également en charge les connexions réseau. Vous pouvez exécuter un serveur principal sur la ou les machines cibles et exécuter l'interface de collecte de données sur une machine cliente. Cela facilite la gestion, surtout si fio est souvent utilisé sur plusieurs machines.
Fio est principalement une application CLI basée sur du texte, bien qu'il existe un support initial pour une interface graphique multiplateforme basée sur gtk (gfio). Au moment de cette publication, gfio est inclus dans la dernière version de fio, v2.1, et il devrait être assez stable. Il peut servir d'interface graphique pour toute charge de travail prise en charge par le client CLI. Il fournit également une prise en charge de base des options de travail et des charges de travail d'édition de l'interface graphique, bien que la prise en charge complète soit toujours en cours de développement car gfio est un travail en cours.
Fio prend également en charge trois types de formats de sortie différents. La sortie "classique" est la sortie par défaut qui vide les statistiques de charge de travail à la fin de la charge de travail. Il existe également un support pour un format CSV, bien que cela diminue lentement au profit d'un format de sortie basé sur JSON. Ce dernier est beaucoup plus flexible et a l'avantage d'être simple à analyser pour les personnes et les ordinateurs.
Fio a progressé rapidement grâce à la synergie de sa dynamique communauté d'utilisateurs et de développement. Il est plus facile à exécuter que les projets concurrents, suffisamment flexible pour accomplir les tâches des utilisateurs et sa surcharge est suffisamment faible pour piloter tout type de système de stockage à pleine vitesse. Ajoutez à cela ses options et ses rapports plus riches que tout ce qui existe, et fio est un excellent outil.
Pourquoi StorageReview.com utilise FIO
Alors que nous avons commencé à augmenter à la fois la quantité et la profondeur de nos analyses de stockage d'entreprise, nous avions besoin d'un meilleur outil d'analyse comparative pour mesurer avec précision les performances des différents produits de stockage sur plusieurs systèmes d'exploitation. Les logiciels générateurs de charge de travail traditionnels tels que Iometer ou Vdbench offrent une compatibilité limitée avec leur système d'exploitation non natif, ou ils ont eu des difficultés à faire évoluer les charges pour les périphériques de stockage hautes performances tels que les accélérateurs d'applications PCIe ou le stockage en réseau hautes performances. Depuis le début de notre implémentation de FIO, il a résolu bon nombre de ces problèmes et est même allé plus loin en prenant en charge les scripts pendant de longues périodes de test. Cette fonctionnalité globale en fait notre référence synthétique de choix pour tous les avis d'entreprise.
Pour nos tests, nous utilisons FIO pour mesurer les performances d'un périphérique de stockage sur une période donnée. Pour la plupart des produits, cela comprend 6 heures de préconditionnement avant de passer à nos tests principaux. Pour les périphériques de stockage PCIe plus grands qui peuvent ne pas entrer en état stable pendant de nombreuses heures après les tests, nous préconditionnons deux fois plus longtemps à 12 heures avant le début de nos tests principaux. Notre processus de référence de stockage d'entreprise synthétique commence par une analyse des performances du disque au cours d'une phase de préconditionnement approfondie. Chacun des produits comparables est d'abord effacé de manière sécurisée à l'aide des outils du fournisseur, puis préconditionné dans un état stable avec la même charge de travail avec laquelle l'appareil sera testé sous une lourde charge de 16 threads avec une file d'attente exceptionnelle de 16 par thread. Pour compléter le processus, nous testons ensuite à intervalles définis dans plusieurs profils de profondeur de thread/file d'attente pour montrer les performances en cas d'utilisation légère et intensive.
Tests de préconditionnement et d'état stable primaire :
- Débit (agrégat IOPS lecture + écriture)
- Latence moyenne (latence de lecture + écriture moyennée ensemble)
- Latence maximale (latence maximale de lecture ou d'écriture)
- Écart-type de latence (écart-type de lecture + écriture moyenné ensemble)
Notre analyse de charge de travail synthétique d'entreprise comprend différents profils pour refléter certaines tâches du monde réel. Ces profils ont été développés pour faciliter la comparaison avec nos références passées ainsi qu'avec des valeurs largement publiées telles que la vitesse de lecture et d'écriture maximale de 4k et 8k 70/30, qui est couramment utilisée pour le matériel d'entreprise.
- 4k
- 100 % de lecture ou 100 % d'écriture
- 100% 4K
- fio –filename=/dev/sdx –direct=1 –rw=randrw –refill_buffers –norandommap –randrepeat=0 –ioengine=libaio –bs=4k –rwmixread=100 –iodepth=16 –numjobs=16 –runtime=60 –group_reporting –nom=4ktest
- 8k 70/30
- 70 % de lecture, 30 % d'écriture
- 100% 8K
- fio –filename=/dev/sdx –direct=1 –rw=randrw –refill_buffers –norandommap –randrepeat=0 –ioengine=libaio –bs=8k –rwmixread=70 –iodegree=16 –numjobs=16 –runtime=60 –group_reporting –nom=8k7030test
Actuellement, nous utilisons FIO version 2.0.7 (x64) dans CentOS 6.3 pour nos tests de performances Linux et FIO version 2.0.12.2 (x64) dans Windows Server 2008 R2 SP1 pour nos performances Windows.
Plateformes de test d'entreprise StorageReview
Les solutions de stockage sont testées avec le benchmark synthétique FIO dans le Laboratoire de test d'entreprise StorageReview utilisant des serveurs autonomes. Nous utilisons le HP ProLiant DL380/DL360 Gen9 pour afficher des performances réalistes, en changeant uniquement l'adaptateur de stockage ou l'interface réseau pour connecter notre DL380/DL360 à différents produits de stockage. Le DL380/DL360 a fait ses preuves pour offrir une grande compatibilité avec les appareils tiers, ce qui en fait une excellente plate-forme de référence pour cet environnement de test diversifié.
(Génération 1) Lenovo Think Server RD240
- 2 x Intel Xeon X5650 (2.66 GHz, cache de 12 Mo)
- Jeu de puces Intel 5500+ ICH10R
- Mémoire – 8 Go (2 x 4 Go) 1333 Mhz DDR3 enregistrés RDIMM
- Windows Server 2008 Standard Edition R2 SP1 64 bits et CentOS 6.2 64 bits
- HBA LSI 9211 SAS/SATA 6.0Gb/s
(Génération 2) Lenovo Think Server RD630
- 2 x Intel Xeon E5-2620 (2.0 GHz, 15 Mo de cache, 6 cœurs)
- Jeu de puces Intel C602
- Mémoire – 16 Go (2 x 8 Go) 1333 Mhz DDR3 enregistrés RDIMM
- Windows Server 2008 R2 SP1 64 bits, Windows Server 2012 Standard, CentOS 6.3 64 bits
- 100GB Micron RealSSD P400e Démarrage SSD
- LSI 9207-8i SAS/SATA 6.0Gb/s HBA (pour l'analyse comparative des SSD ou HDD)
(Génération 3) HP ProLiant DL380/DL360 Gen9
- Deux processeurs Intel E5-2667 v3 (3.2 GHz, 8 cœurs, 20 Mo de cache)
- 256 Go de RAM (16 Go x 16 DDR4, 128 Go par processeur)
- Windows Serveur 2012 R2, CentOS 7.0
- SSD de démarrage de 400 Go - Windows
- Disque dur de démarrage de 300 Go – Linux
- HBA LSI 9300-8e SAS/SATA 12.0Gb/s (Pour l'analyse comparative des SSD ou des HDD)
- Supermicro SuperChâssis 846BE1C-R1K28B SAS3 JBOD (pour connecter des SSD ou des HDD)