The purpose of this project is to provide a free application capable of:
Most of these features are based on various DPDK libs.
Packet-journey (pktj) is composed of multiple kind of threads:
For optimal performances, the forwarding threads must be alone on their cores. All other threads can be scheduled on the same lcore.
The forwarding threads are running the main_loop() function. It basically follows these steps:
pktj -l 0,1,2,3 -n 4 --socket-mem=4096 --log-level=4 -- \
--configfile /root/devel/router-dpdk/tests/integration/lab00/pktj.conf
with pktj.conf
containing:
; pktj
[pktj]
callback-setup = /root/devel/router-dpdk/tests/integration/lab00/up.sh
rule_ipv4 = /root/devel/router-dpdk/tests/integration/lab00/acl.txt
rule_ipv6 = /root/devel/router-dpdk/tests/integration/lab00/acl6.txt
promiscuous = 1
kni_rate_limit = 1000
aclavx2 = 1
; Port configuration
[port 0]
eal queues = 0,1 1,2 ; queue,lcore
kni = 3,0 ; lcore_tx,kthread
These settings will launch the following:
up.sh
after setting up the KNI.The script up.sh
configures the KNI IPv4, IPv6 and MAC addresses. It also
starts some processes (bgpd and zebra in our case).
#!/bin/sh
link1=$1
mac1=$2
ip link set $link1 up
ip link add link $link1 name $link1.2000 type vlan id 2000
ip link set $link1.2000 address $mac1
ip link set $link1.2000 up
ip addr add 1.2.3.5/24 dev $link1.2000
ip route add 1.2.4.0/24 via 1.2.3.4
ip addr add 2001:3::5/48 dev $link1.2000
ip route add 2001:4::/48 via 2001:3::4
# delay start because of quagga racy start
sleep 15s
/usr/lib/quagga/zebra &
/usr/lib/quagga/bgpd &
You can try this out using our QEMU test lab.
The test scenario is done between 2 physical machines having both a XL710 NIC and a E5-2630L CPU. The first host is running Packet-Journey; it receives traffic from the second host and sends it back.
For simulating real life conditions, the tests are done with 500k routes (something similar to a BGP full view) and 50 ACL (we use scalar implementation for ACL since the CPU don't have AVX2 instructions). We have also a percentage of the packets which are forwarded to the KNI instead of going through the fastpath.
The packets are generated using DPDK-PktGen which is configured for sending 64 Bytes UDP packets with a random source and destination IP. When Configured with 4 RX queues, Packet-Journey is able to forward 21773.47 mbits.
The graphs of the test scenario are in the doc. The easiest graphs to read are the ones from pktgen since it shows you the TX RX rates: PktGen report.