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:
parent
293c53d8b2
commit
24cd1b529f
@ -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]}
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -56,6 +56,7 @@ Programmer's Guide
|
||||
packet_framework
|
||||
vhost_lib
|
||||
metrics_lib
|
||||
telemetry_lib
|
||||
bpf_lib
|
||||
ipsec_lib
|
||||
graph_lib
|
||||
|
58
doc/guides/prog_guide/telemetry_lib.rst
Normal file
58
doc/guides/prog_guide/telemetry_lib.rst
Normal 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.
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user