69d19ae9fb
Create a new section 'Connectivity' and move Networking guides and API docs to this new section. Signed-off-by: Anas Nashif <anas.nashif@intel.com>
85 lines
3.8 KiB
ReStructuredText
85 lines
3.8 KiB
ReStructuredText
.. _net_pkt_processing_stats:
|
|
|
|
Network Packet Processing Statistics
|
|
####################################
|
|
|
|
.. contents::
|
|
:local:
|
|
:depth: 2
|
|
|
|
This page describes how to get information about network packet processing
|
|
statistics inside network stack.
|
|
|
|
Network stack contains infrastructure to figure out how long the network packet
|
|
processing takes either in sending or receiving path. There are two Kconfig
|
|
options that control this. For transmit (TX) path the option is called
|
|
:kconfig:option:`CONFIG_NET_PKT_TXTIME_STATS` and for receive (RX) path the options is
|
|
called :kconfig:option:`CONFIG_NET_PKT_RXTIME_STATS`. Note that for TX, all kind of
|
|
network packet statistics is collected. For RX, only UDP, TCP or raw packet
|
|
type network packet statistics is collected.
|
|
|
|
After enabling these options, the :ref:`net stats <net_shell>` network shell
|
|
command will show this information:
|
|
|
|
.. code-block:: console
|
|
|
|
Avg TX net_pkt (11484) time 67 us
|
|
Avg RX net_pkt (11474) time 43 us
|
|
|
|
.. note::
|
|
|
|
The values above and below are from emulated qemu_x86 board and UDP traffic
|
|
|
|
The TX time tells how long it took for network packet from its creation to
|
|
when it was sent to the network. The RX time tells the time from its creation
|
|
to when it was passed to the application. The values are in microseconds. The
|
|
statistics will be collected per traffic class if there are more than one
|
|
transmit or receive queues defined in the system. These are controlled by
|
|
:kconfig:option:`CONFIG_NET_TC_TX_COUNT` and :kconfig:option:`CONFIG_NET_TC_RX_COUNT` options.
|
|
|
|
If you enable :kconfig:option:`CONFIG_NET_PKT_TXTIME_STATS_DETAIL` or
|
|
:kconfig:option:`CONFIG_NET_PKT_RXTIME_STATS_DETAIL` options, then additional
|
|
information for TX or RX network packets are collected when the network packet
|
|
traverses the IP stack.
|
|
|
|
After enabling these options, the :ref:`net stats <net_shell>` will show
|
|
this information:
|
|
|
|
.. code-block:: console
|
|
|
|
Avg TX net_pkt (18902) time 63 us [0->22->15->23=60 us]
|
|
Avg RX net_pkt (18892) time 42 us [0->9->6->11->13=39 us]
|
|
|
|
The numbers inside the brackets contain information how many microseconds it
|
|
took for a network packet to go from previous state to next.
|
|
|
|
In the TX example above, the values are averages over **18902** packets and
|
|
contain this information:
|
|
|
|
* Packet was created by application so the time is **0**.
|
|
* Packet is about to be placed to transmit queue. The time it took from network
|
|
packet creation to this state, is **22** microseconds in this example.
|
|
* The correct TX thread is invoked, and the packet is read from the transmit
|
|
queue. It took **15** microseconds from previous state.
|
|
* The network packet was just sent and the network stack is about to free the
|
|
network packet. It took **23** microseconds from previous state.
|
|
* In total it took on average **60** microseconds to get the network packet
|
|
sent. The value **63** tells also the same information, but is calculated
|
|
differently so there is slight difference because of rounding errors.
|
|
|
|
In the RX example above, the values are averages over **18892** packets and
|
|
contain this information:
|
|
|
|
* Packet was created network device driver so the time is **0**.
|
|
* Packet is about to be placed to receive queue. The time it took from network
|
|
packet creation to this state, is **9** microseconds in this example.
|
|
* The correct RX thread is invoked, and the packet is read from the receive
|
|
queue. It took **6** microseconds from previous state.
|
|
* The network packet is then processed and placed to correct socket queue.
|
|
It took **11** microseconds from previous state.
|
|
* The last value tells how long it took from there to the application. Here
|
|
the value is **13** microseconds.
|
|
* In total it took on average **39** microseconds to get the network packet
|
|
sent. The value **42** tells also the same information, but is calculated
|
|
differently so there is slight difference because of rounding errors.
|