266. Sample Application Tests: Timer Example¶
This example shows how timer can be used in a RTE application. This program print some messages from different lcores regularly, demonstrating how to use timers.
If using vfio the kernel must be >= 3.6+ and VT-d must be enabled in bios.When using vfio, use the following commands to load the vfio driver and bind it to the device under test:
modprobe vfio
modprobe vfio-pci
usertools/dpdk-devbind.py --bind=vfio-pci device_bus_id
In the timer example there are two timers.
Timer 0 is periodical, running on the master lcore, reloaded automatically every second.
Timer 1 is single one, being loaded manually by every second/3 , once manually load will switch to next lcore.
Build DPDK and example:
cd dpdk
CC=gcc meson --werror -Denable_kmods=True -Dlibdir=lib --default-library=static x86_64-native-linuxapp-gcc
ninja -C x86_64-native-linuxapp-gcc -j 50
meson configure -Dexamples=timer x86_64-native-linuxapp-gcc
ninja -C x86_64-native-linuxapp-gcc
Usage of application:
./examples/dpdk-timer [EAL options]
Where the EAL options are:
EAL option list:
-c COREMASK: hexadecimal bitmask of cores we are running on
-m MB : memory to allocate (default = size of hugemem)
-n NUM : force number of memory channels (don't detect)
-r NUM : force number of memory ranks (don't detect)
--huge-file: base filename for hugetlbfs entries
debug options:
--no-huge : use malloc instead of hugetlbfs
--no-pci : disable pci
--no-hpet : disable hpet
--no-shconf: no shared config (mmap'd files)
266.1. Prerequisites¶
To find out the mapping of lcores (processor) to core id and socket (physical id), the command below can be used:
$ grep "processor\|physical id\|core id\|^$" /proc/cpuinfo
The number of logical core will be used as parameter to the timer example.
266.2. Test Case: timer callbacks running on targeted cores¶
To run the example in linuxapp environment:
./examples/dpdk-timer -c ffffff
Timer0, every second, on master lcore, reloaded automatically. The check output as below by every second on master lcore:
timer0_cb() on lcore 0
Timer1, every second/3, on next lcore, reloaded manually. The check output as below by every second/3 on master lcore:
timer1_cb() on lcore 1
timer1_cb() on lcore 2
timer1_cb() on lcore 3
timer1_cb() on lcore 4
...
...
...
timer1_cb() on lcore 23
Verify the timer0_cb
and timer1_cb
care called properly
on the target cores.