| .. _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:`CONFIG_NET_PKT_TXTIME_STATS` and for receive (RX) path the options is |
| called :kconfig:`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:`CONFIG_NET_TC_TX_COUNT` and :kconfig:`CONFIG_NET_TC_RX_COUNT` options. |
| |
| If you enable :kconfig:`CONFIG_NET_PKT_TXTIME_STATS_DETAIL` or |
| :kconfig:`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. |