[technique] CR 20170605 DPDK / packet-journey

Laurent GUERBY laurent at guerby.net
Jeu 8 Juin 15:08:13 CEST 2017


Bonjour,

Ce lundi 20170605 avec eZag et mherrb nous avons fait fonctionner
pktgen (~ 10 Gbit/s TX et ~ 30 Gbit/s RX petit paquet 64 byte, ~ 40
millions PPS) et packet-journey (ping seulement pour le moment) sur la
machine h8 équipée de 4 cartes 2x10G :). L'atelier via jitsi a duré de
9h30 a vers 20h30 avec une pause repas.

Matthieu avait deja contribué une correction :

https://github.com/Gandi/packet-journey/pull/36

Et j'ai ajouté un petit bug fix lors de la session du lundi :

https://github.com/Gandi/packet-journey/pull/38
(pullé le lendemain de la contribution :)

packet-journey a aussi fonctionné sur une machine avec des cartes
gigabit pilote igb chez Matthieu, et sur la carte gigabit de h8 (igb
aussi). Avec un pilote e1000e ce n'etait pas ok, a creuser.

packet-journey sur carte 10G pilote ixgbe ne fonctionne
qu'avec certaines versions de DPDK, sur certaines version DPDK
a l'allumage de la carte nous avons "RX mbuf alloc failed " :

PKTJ_CRTL1: processed 1 netlink msg in buffer
KNI: ----   kni_config_network_interface
KNI: Configure network interface of 0 up
PMD: ixgbe_set_rx_function(): Vector rx enabled, please make sure RX
burst size no less than 4 (port=0).
PMD: ixgbe_alloc_rx_queue_mbufs(): RX mbuf alloc failed queue_id=0
PMD: ixgbe_dev_rx_queue_start(): Could not alloc mbuf for queue:0
PMD: ixgbe_dev_start(): Unable to start rxtx queues
PMD: ixgbe_dev_start(): failure in ixgbe_dev_start(): -1
KNI: Failed to start port 0
KNI: finished kni_config_network_interface

Matthieu a trouvé comment compiler en debug mais ce n'est
pas tres probant pour trouver le probleme au milieu du coeur de DPDK,
nous poursuivrons probablement avec la bonne vieille methode "printf".

packet-journey n'a quasiment pas de fichier de configuration son
fonctionnement est simple : au demarrage il prend le controle
des cartes reseaux indiquées et fait apparaitre au kernel
linux des interfaces "KNI" appellées dpdk0 dpdk1 ..., une par carte.
Il suffit de mettre des IP et des routes avec les outils classiques
(iproute2, bird, ...) sur ces interfaces dpdkN et le routage est
automatiquement fait par packet-journey quand il sait faire (paquet a
forwarder d'une interface DPDK a une autre, le gros du boulot du
routeur) sinon il fait passer au kernel linux (partie ICMP & cie et
destination IP mise sur dpdkN pour BGP et ssh par exemple).

In fine :

root at h8:~/guerby/packet-journey# cat ttnn.conf
; pktj
[pktj]
callback-setup 	= /root/guerby/packet-journey/up.sh
rule_ipv4	= /dev/null
rule_ipv6	= /dev/null
promiscuous = 1
; Port configuration
[port 0]
eal queues	= 0,2 ; queue,lcore
kni			= 3,0 ; lcore,kthread
root at h8:~/guerby/packet-journey# cat up.sh
#!/bin/bash
C=88
while [ $# -ge 2 ]; do
link1=$1
mac1=$2
shift
shift
echo link $link1 mac $mac1
ip link set $link1 address $mac1
ip link set $link1 up
ip addr add 192.168.$C.1/24 dev $link1
ip -6 addr add 2a03:7220:1:${C}::1/64 dev $link1
C=$((C+1))
done
root at h8:~/guerby/packet-journey# ./build/app/build/pktj -l 0-5 -n 2
--log-level=9 -- --configfile /root/guerby/packet-journey/ttnn.conf
...
root at h8:~# ip a
14: dpdk0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
state UNKNOWN group default qlen 1000
    link/ether a0:36:9f:0e:36:aa brd ff:ff:ff:ff:ff:ff
    inet 192.168.88.1/24 scope global dpdk0
       valid_lft forever preferred_lft forever
    inet6 2a03:7220:1:88::1/64 scope global tentative 
       valid_lft forever preferred_lft forever
    inet6 fe80::a236:9fff:fe0e:36aa/64 scope link tentative 
       valid_lft forever preferred_lft forever

Le pad de travail https://pad.tetaneutral.net/p/dpdk
avec en haut choix de la date du prochain atelier.

Sincèrement,

Laurent

PS: listes des tickets contribués au long du projet DPDK
tetaneutral.net :
https://chiliproject.tetaneutral.net/projects/tetaneutral/wiki/DPDK#Atelier-Issues





Plus d'informations sur la liste de diffusion technique