doc: update telemetry guides

The existing documentation for Telemetry is updated, and further
documentation is added.

Signed-off-by: Ciara Power <ciara.power@intel.com>
Reviewed-by: Keith Wiles <keith.wiles@intel.com>
This commit is contained in:
Ciara Power 2020-04-30 17:01:37 +01:00 committed by Thomas Monjalon
parent 293c53d8b2
commit 24cd1b529f
6 changed files with 138 additions and 64 deletions

View File

@ -1,86 +1,80 @@
.. SPDX-License-Identifier: BSD-3-Clause
Copyright(c) 2018 Intel Corporation.
DPDK Telemetry API User Guide
==============================
This document describes how the Data Plane Development Kit(DPDK) Telemetry API
is used for querying port statistics from incoming traffic.
Introduction
------------
The ``librte_telemetry`` provides the functionality so that users may query
metrics from incoming port traffic and global stats(application stats).
The application which initializes packet forwarding will act as the server,
sending metrics to the requesting application which acts as the client.
Copyright(c) 2020 Intel Corporation.
In DPDK, applications are used to initialize the ``telemetry``. To view incoming
traffic on featured ports, the application should be run first (ie. after ports
are configured). Once the application is running, the service assurance agent
(for example the collectd plugin) should be run to begin querying the API.
DPDK Telemetry User Guide
=========================
A client connects their Service Assurance application to the DPDK application
via a UNIX socket. Once a connection is established, a client can send JSON
messages to the DPDK application requesting metrics via another UNIX client.
This request is then handled and parsed if valid. The response is then
formatted in JSON and sent back to the requesting client.
The Telemetry library provides users with the ability to query DPDK for
telemetry information, currently including information such as ethdev stats,
ethdev port list, and eal parameters.
Pre-requisites
~~~~~~~~~~~~~~
.. Note::
* Python >= 2.5
This library is experimental and the output format may change in the future.
* Jansson library for JSON serialization
Test Environment
----------------
Telemetry Interface
-------------------
``telemetry`` offers a range of selftests that a client can run within
the DPDK application.
The :doc:`../prog_guide/telemetry_lib` opens a socket with path
*<runtime_directory>/dpdk_telemetry.<version>*. The version represents the
telemetry version, the latest is v2. For example, a client would connect to a
socket with path */var/run/dpdk/\*/dpdk_telemetry.v2* (when the primary process
is run by a root user).
Selftests are disabled by default. They can be enabled by setting the 'selftest'
variable to 1 in rte_telemetry_initial_accept().
Note: this 'hardcoded' value is temporary.
Telemetry Initialization
------------------------
Configuration
-------------
The library is enabled by default, however an EAL flag to enable the library
exists, to provide backward compatibility for the previous telemetry library
interface.
Enable the telemetry API by modifying the following config option before
building DPDK::
.. code-block:: console
CONFIG_RTE_LIBRTE_TELEMETRY=y
--telemetry
Note: Meson will pick this up automatically if ``libjansson`` is available.
A flag exists to disable Telemetry also.
Running the Application
-----------------------
.. code-block:: console
The following steps demonstrate how to run the ``telemetry`` API to query all
statistics on all active ports, using the ``telemetry_client`` python script
to query.
Note: This guide assumes packet generation is applicable and the user is
testing with testpmd as a DPDK primary application to forward packets, although
any DPDK application is applicable.
--no-telemetry
#. Launch testpmd as the primary application with ``telemetry``.::
./app/testpmd --telemetry
Running Telemetry
-----------------
#. Launch the ``telemetry`` python script with a client filepath.::
The following steps show how to run an application with telemetry support,
and query information using the telemetry client python script.
python usertools/telemetry_client.py /var/run/some_client
#. Launch testpmd as the primary application with telemetry.
The client filepath is going to be used to setup our UNIX connection with the
DPDK primary application, in this case ``testpmd``
This will initialize a menu where a client can proceed to recursively query
statistics, request statistics once or unregister the file_path, thus exiting
the menu.
.. code-block:: console
#. Send traffic to any or all available ports from a traffic generator.
Select a query option(recursive or singular polling or global stats).
The metrics will then be displayed on the client terminal in JSON format.
./app/dpdk-testpmd
#. Once finished, unregister the client using the menu command.
#. Launch the telemetry client script.
.. code-block:: console
python usertools/dpdk-telemetry.py
#. When connected, the script displays the following, waiting for user input.
.. code-block:: console
Connecting to /var/run/dpdk/rte/dpdk_telemetry.v2
{"version": "DPDK 20.05.0-rc0", "pid": 60285, "max_output_len": 16384}
-->
#. The user can now input commands to send across the socket, and receive the
response.
.. code-block:: console
--> /
{"/": ["/", "/eal/app_params", "/eal/params", "/ethdev/list",
"/ethdev/link_status", "/ethdev/xstats", "/help", "/info"]}
--> /ethdev/list
{"/ethdev/list": [0, 1]}

View File

@ -202,3 +202,11 @@ Other options
* ``mbuf-pool-ops-name``:
Pool ops name for mbuf to use.
* ``--telemetry``:
Enable telemetry (enabled by default).
* ``--no-telemetry``:
Disable telemetry.

View File

@ -95,8 +95,6 @@ For libraries the additional dependencies include:
* libarchive: for some unit tests using tar to get their resources.
* jansson: to compile and use the telemetry library.
* libelf: to compile and use the bpf library.
For poll-mode drivers, the additional dependencies for each driver can be

View File

@ -56,6 +56,7 @@ Programmer's Guide
packet_framework
vhost_lib
metrics_lib
telemetry_lib
bpf_lib
ipsec_lib
graph_lib

View File

@ -0,0 +1,58 @@
.. SPDX-License-Identifier: BSD-3-Clause
Copyright(c) 2020 Intel Corporation.
Telemetry Library
=================
The Telemetry library provides an interface to retrieve information from a
variety of DPDK libraries. The library provides this information via socket
connection, taking requests from a connected client and replying with the JSON
response containing the requested telemetry information.
Telemetry is enabled to run by default when running a DPDK application, and the
telemetry information from enabled libraries is made available. Libraries are
responsible for registering their own commands, and providing the callback
function that will format the library specific stats into the correct data
format, when requested.
Registering Commands
--------------------
Libraries and applications must register commands to make their information
available via the Telemetry library. This involves providing a string command
in the required format ("/library/command"), and the callback function that
will handle formatting the information when required. An example showing ethdev
commands being registered is shown below:
.. code-block:: c
rte_telemetry_register_cmd("/ethdev/list", handle_port_list);
rte_telemetry_register_cmd("/ethdev/xstats", handle_port_xstats);
Formatting JSON response
------------------------
The callback function provided by the library must format its telemetry
information in the required data format. The Telemetry library provides a data
utilities API to build up the response. For example, the ethdev library provides a
list of available ethdev ports in a formatted data response, constructed using the
following functions to build up the list:
.. code-block:: c
rte_tel_data_start_array(d, RTE_TEL_INT_VAL);
RTE_ETH_FOREACH_DEV(port_id)
rte_tel_data_add_array_int(d, port_id);
The data structure is then formatted into a JSON response before sending.
The resulting response shows the port list data provided above by the handler
function in ethdev, placed in a JSON reply by telemetry:
.. code-block:: console
{"/ethdev/list": [0, 1]}
For more information on the range of data functions available in the API,
please refer to the docs.

View File

@ -215,6 +215,21 @@ New Features
* Added IPsec inbound load-distribution support for ipsec-secgw application
using NIC load distribution feature(Flow Director).
* **Updated Telemetry Library.**
The updated Telemetry library has many improvements on the original version
to make it more accessible and scalable:
* It enables DPDK libraries and applications provide their own specific
telemetry information, rather than being limited to what could be reported
through the metrics library.
* It is no longer dependent on the external Jansson library, which allows
Telemetry be enabled by default.
* The socket handling has been simplified making it easier for clients to
connect and retrieve information.
* **Added rte_graph library.**
Graph architecture abstracts the data processing functions as a ``node`` and