Automatisation du générateur de trafic TRex

Comme je l’ai déjà abordé lors d’un précédent article, lorsque je souhaite utiliser un générateur de trafic en mode « stateless », je fais mon choix entre TRex et Ostinato. Lorsque l’objectif est de générer du trafic sans que la CPU du générateur ne représente un point de contention, TRex a ma préférence du fait qu’il s’appuie sur DPDK. Ostinato propose des APIs Python soumises à licence et cela fait 6 ans qu’une version « turbo » est en gestation, les priorités de son concepteur ayant été focalisées sur d’autres points. Il se pourrait qu’une version « Turbo Transmit » soit en préparation et que la sortie de cette version n’ait jamais été aussi proche.

Nous sommes dans une période d’automatisation durant laquelle aucun produit n’échappe à cette approche, et il en est de même pour les générateurs de trafic. TRex permet d’automatiser la génération de trafic à l’aide de scripts Python.

Ce lab s’appuie sur une de mes appliances générateur faisant tourner Linux Ubuntu 20.04. TRex est un produit qui évolue très régulièrement, non seulement pour l’améliorer, mais aussi pour tenir compte des évolutions de DPDK. L’installation de la dernière version de TRex est rapide avec les deux commandes : wget --no-cache --no-check-certificate https://trex-tgn.cisco.com/trex/release/latest et tar -xzvf latest. Pour pouvoir fonctionner, il est nécessaire de rajouter des dépendances et outils supplémentaires sur Ubuntu « Focal Fossa » avec la commande : sudo apt install python3-distutils build-essential. A la date d’écriture de cet article, c’est la version v2.84 de TRex qui est la dernière disponible.

La configuration du fichier qui mettra à disposition des interfaces pour DPDK est rapide en mode interactif : sudo ./dpdk_setup_ports.py -i. Le serveur peut se lancer, en mode « stateless » dans une session SSH avec la commande : sudo ./t-rex-64 -i -c 2.

Serveur TRex
Serveur TRex en mode « Stateless »

Pour un usage interactif, il convient de lancer une console dans une autre session : ./trex-console, de démarrer la génération d’un trafic : start -f stl/udp_1pkt_simple.py -m 1.488mpps et de passer sur la console semi-graphique : tui.

TRex Console tui
Console TRex

On notera que le générateur émet en bidirectionnel 1,49 Mpps de 64 octets en ne consommant que 37,31% des deux coeurs à 1 GHz mis à disposition pour le serveur TRex et DPDK.

Lorsqu’on télécharge l’archive TRex, elle contient une autre archive dédiée à l’automatisation : trex_client_v2.84.tar.gz qui, une fois décompressée, met à disposition des librairies et des exemples de scripts. Pour comprendre la façon dont ces scripts sont codés, il convient de lire la documentation sur les APIs et le « CookBook ». De nombreux exemples permettent de lancer les premiers tests en mode « stateless » et de se familiariser avec l’automatisation TRex, comme par exemple : python3 trex_client/interactive/trex/examples/stl/stl_imix.py ou python3 trex_client/interactive/trex/examples/stl/stl_simple_burst.py.

stl_imix
stl_imix
stl_simple_burst
stl_simple_burst

TRex ne supporte pas que l’automatisation en mode « stateless », mais aussi en mode « Advanced Stateful » dont les exemples sont dans le répertoire : trex_client/interactive/trex/examples/astf/.