Merge "dpdk stats: add known issues/limitations"
[barometer.git] / docs / release / userguide / feature.userguide.rst
index 2f4077b..ef36632 100644 (file)
@@ -38,26 +38,23 @@ Barometer has enabled the following collectd plugins:
   and free hugepages on a platform as well as what is available in terms of
   hugepages per socket.
 
-* *RDT plugin*: A read plugin that provides the last level cache utilitzation and
-  memory bandwidth utilization
-
 * *Open vSwitch events Plugin*: A read plugin that retrieves events from OVS.
 
+* *Open vSwitch stats Plugin*: A read plugin that retrieves flow and interface
+  stats from OVS.
+
 * *mcelog plugin*: A read plugin that uses mcelog client protocol to check for
   memory Machine Check Exceptions and sends the stats for reported exceptions
 
+* *RDT plugin*: A read plugin that provides the last level cache utilization and
+  memory bandwidth utilization
+
 All the plugins above are available on the collectd master, except for the
 ceilometer plugin as it's a python based plugin and only C plugins are accepted
 by the collectd community. The ceilometer plugin lives in the OpenStack
 repositories.
 
-Other plugins under development or existing as a pull request into collectd master:
-
-* *dpdkevents*:  A read plugin that retrieves DPDK link status and DPDK
-  forwarding cores liveliness status (DPDK Keep Alive).
-
-* *Open vSwitch stats Plugin*: A read plugin that retrieve flow and interface
-  stats from OVS.
+Other plugins existing as a pull request into collectd master:
 
 * *SNMP Agent*: A write plugin that will act as a AgentX subagent that receives
   and handles queries from SNMP master agent and returns the data collected
@@ -70,6 +67,10 @@ Other plugins under development or existing as a pull request into collectd mast
   fanspeed, current, flow, power etc. Also, the plugin monitors Intelligent
   Platform Management Interface (IPMI) System Event Log (SEL) and sends the
 
+* *virt*: A read plugin that uses virtualization API *libvirt* to gather
+  statistics about virtualized guests on a system directly from the hypervisor,
+  without a need to install collectd instance on the guest.
+
 **Plugins included in the Danube release:**
 
 * Hugepages
@@ -82,20 +83,22 @@ collectd capabilities and usage
 .. Describe the specific capabilities and usage for <XYZ> feature.
 .. Provide enough information that a user will be able to operate the feature on a deployed scenario.
 
-**NOTE** Plugins included in the OPNFV D release will be built-in to the fuel
-plugin and available in the /opt/opnfv directory on the fuel master. You don't
-need to clone the barometer/collectd repos to use these, but you can configure
-them as shown in the examples below. Please note, the collectd plugins in OPNFV
-are configured with reasonable defaults, but can be overriden.
+.. note:: Plugins included in the OPNFV D release will be built-in to the fuel
+ plugin and available in the /opt/opnfv directory on the fuel master. You don't
+ need to clone the barometer/collectd repos to use these, but you can configure
+ them as shown in the examples below.
+
+ The collectd plugins in OPNFV are configured with reasonable defaults, but can
+ be overridden.
 
 Building all Barometer upstreamed plugins from scratch
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 The plugins that have been merged to the collectd master branch can all be
 built and configured through the barometer repository.
 
-**NOTE: sudo permissions are required to install collectd.**
-
-**NOTE: These are instructions for Ubuntu 16.04.**
+.. note::
+ * sudo permissions are required to install collectd.
+ * These are instructions for Ubuntu 16.04
 
 To build and install these dependencies, clone the barometer repo:
 
@@ -116,30 +119,40 @@ To install collectd as a service and install all it's dependencies:
     $ cd barometer/src && sudo make && sudo make install
 
 This will install collectd as a service and the base install directory
-is /opt/collectd.
+will be /opt/collectd.
 
 Sample configuration files can be found in '/opt/collectd/etc/collectd.conf.d'
 
-**Note**: Exec plugin requires non-root user to execute scripts. By default,
-`collectd_exec` user is used. Barometer scripts do *not* create this user. It
-needs to be manually added or exec plugin configuration has to be changed to use
-other, existing user before starting collectd service.
+.. note::
+  - If you plan on using the Exec plugin, the plugin requires non-root
+    user to execute scripts. By default, `collectd_exec` user is used. Barometer
+    scripts do *not* create this user. It needs to be manually added or exec plugin
+    configuration has to be changed to use other, existing user before starting
+    collectd service.
 
-Please note if you are using any Open vSwitch plugins you need to run:
+  - If you don't want to use one of the Barometer plugins, simply remove the
+    sample config file from '/opt/collectd/etc/collectd.conf.d'
 
+  - If you are using any Open vSwitch plugins you need to run:
 
 .. code:: bash
 
     $ sudo ovs-vsctl set-manager ptcp:6640
 
-DPDK statistics plugin
-^^^^^^^^^^^^^^^^^^^^^^
+
+Below is the per plugin installation and configuration guide, if you only want
+to install some/particular plugins.
+
+DPDK plugins
+^^^^^^^^^^^^^
 Repo: https://github.com/collectd/collectd
 
 Branch: master
 
 Dependencies: DPDK (http://dpdk.org/)
 
+.. note:: DPDK statistics plugin requires DPDK version 16.04 or later
+
 To build and install DPDK to /usr please see:
 https://github.com/collectd/collectd/blob/master/docs/BUILD.dpdkstat.md
 
@@ -154,9 +167,21 @@ Building and installing collectd:
     $ make
     $ sudo make install
 
+.. note:: If DPDK was installed in a non standard location you will need to
+    specify paths to the header files and libraries using *LIBDPDK_CPPFLAGS* and
+    *LIBDPDK_LDFLAGS*. You will also need to add the DPDK library symbols to the
+    shared library path using *ldconfig*. Note that this update to the shared
+    library path is not persistant (i.e. it will not survive a reboot).
+
+Example of specifying custom paths to DPDK headers and libraries:
+
+.. code:: bash
+
+    $ ./configure LIBDPDK_CPPFLAGS="path to DPDK header files" LIBDPDK_LDFLAGS="path to DPDK libraries"
 
 This will install collectd to /opt/collectd
 The collectd configuration file can be found at /opt/collectd/etc
+
 To configure the dpdkstats plugin you need to modify the configuration file to
 include:
 
@@ -175,40 +200,7 @@ include:
         PortName "interface2"
     </Plugin>
 
-For more information on the plugin parameters, please see:
-https://github.com/collectd/collectd/blob/master/src/collectd.conf.pod
-
-Please also note that if you are not building and installing DPDK system-wide
-you will need to specify the specific paths to the header files and libraries
-using LIBDPDK_CPPFLAGS and LIBDPDK_LDFLAGS. You will also need to add the DPDK
-library symbols to the shared library path using ldconfig. Note that this
-update to the shared library path is not persistant (i.e. it will not survive a
-reboot).
-
-DPDK events plugin
-^^^^^^^^^^^^^^^^^^^^^^
-Repo: https://github.com/collectd/collectd
-
-Branch: master
-
-Dependencies: DPDK (http://dpdk.org/)
-
-To build and install DPDK to /usr please see:
-https://github.com/collectd/collectd/blob/master/docs/BUILD.dpdkstat.md
-
-Building and installing collectd:
-
-.. code:: bash
-
-    $ git clone https://github.com/maryamtahhan/collectd.git
-    $ cd collectd
-    $ ./build.sh
-    $ ./configure --enable-syslog --enable-logfile --enable-debug
-    $ make
-    $ sudo make install
 
-This will install collectd to /opt/collectd
-The collectd configuration file can be found at /opt/collectd/etc
 To configure the dpdkevents plugin you need to modify the configuration file to
 include:
 
@@ -238,18 +230,66 @@ include:
         </Event>
     </Plugin>
 
+.. note:: Currently, the DPDK library doesn’t support API to de-initialize
+ the DPDK resources allocated on the initialization. It means, the collectd
+ plugin will not be able to release the allocated DPDK resources
+ (locks/memory/pci bindings etc.) correctly on collectd shutdown or reinitialize
+ the DPDK library if primary DPDK process is restarted. The only way to release
+ those resources is to terminate the process itself. For this reason, the plugin
+ forks off a separate collectd process. This child process becomes a secondary
+ DPDK process which can be run on specific CPU cores configured by user through
+ collectd configuration file (“Coremask” EAL configuration option, the
+ hexadecimal bitmask of the cores to run on).
+
 For more information on the plugin parameters, please see:
 https://github.com/collectd/collectd/blob/master/src/collectd.conf.pod
-Please also note that if you are not building and installing DPDK system-wide
-you will need to specify the specific paths to the header files and libraries
-using LIBDPDK_CPPFLAGS and LIBDPDK_LDFLAGS. You will also need to add the DPDK
-library symbols to the shared library path using ldconfig. Note that this
-update to the shared library path is not persistant (i.e. it will not survive a
-reboot).
+
+.. note:: dpdkstat plugin initialization time depends on read interval. It
+ requires 5 read cycles to set up internal buffers and states. During that time
+ no statistics are submitted. Also if plugin is running and the number of DPDK
+ ports is increased, internal buffers are resized. That requires 3 read cycles
+ and no port statistics are submitted in that time.
+
+The Address-Space Layout Randomization (ASLR) security feature in Linux should be
+disabled, in order for the same hugepage memory mappings to be present in all
+DPDK multi-process applications.
+
+To disable ASLR:
 
 .. code:: bash
 
-    $ ./configure LIBDPDK_CPPFLAGS="path to DPDK header files" LIBDPDK_LDFLAGS="path to DPDK libraries"
+    $ sudo echo 0 > /proc/sys/kernel/randomize_va_space
+
+To fully enable ASLR:
+
+.. code:: bash
+
+    $ sudo echo 2 > /proc/sys/kernel/randomize_va_space
+
+.. warning:: Disabling Address-Space Layout Randomization (ASLR) may have security
+    implications. It is recommended to be disabled only when absolutely necessary,
+    and only when all implications of this change have been understood.
+
+For more information on multi-process support, please see:
+http://dpdk.org/doc/guides/prog_guide/multi_proc_support.html
+
+**DPDK stats plugin limitations:**
+
+1. The DPDK primary process application should use the same version of DPDK
+   that collectd DPDK plugin is using;
+
+2. L2 statistics are only supported;
+
+3. The plugin has been tested on Intel NIC’s only.
+
+**DPDK stats known issues:**
+
+* DPDK port visibility
+
+  When network port controlled by Linux is bound to DPDK driver, the port
+  will not be available in the OS. It affects the SNMP write plugin as those
+  ports will not be present in standard IF-MIB. Thus addition work is
+  required to be done to support DPDK ports and statistics.
 
 Hugepages Plugin
 ^^^^^^^^^^^^^^^^^
@@ -649,13 +689,9 @@ To inject corrected memory errors:
 
 Open vSwitch Plugins
 ^^^^^^^^^^^^^^^^^^^^^
-OvS Events Repo: https://github.com/collectd/collectd
-
-OvS Stats Repo: https://github.com/maryamtahhan/collectd
-
-OvS Events Branch: master
+OvS Plugins Repo: https://github.com/collectd/collectd
 
-OvS Stats Branch:feat_ovs_stats
+OvS Plugins Branch: master
 
 OvS Events MIBs: The SNMP OVS interface link status is provided by standard
 IF-MIB (http://www.net-snmp.org/docs/mibs/IF-MIB.txt)
@@ -686,16 +722,12 @@ Clone and install the collectd ovs plugin:
 
     $ git clone $REPO
     $ cd collectd
-    $ git checkout $BRANCH
+    $ git checkout master
     $ ./build.sh
     $ ./configure --enable-syslog --enable-logfile --enable-debug
     $ make
     $ sudo make install
 
-where $REPO is one of the repos listed at the top of this section.
-
-Where $BRANCH is master or feat_ovs_stats.
-
 This will install collectd to /opt/collectd. The collectd configuration file
 can be found at /opt/collectd/etc. To configure the OVS events plugin you
 need to modify the configuration file to include:
@@ -730,8 +762,6 @@ to include:
 
 For more information on the plugin parameters, please see:
 https://github.com/collectd/collectd/blob/master/src/collectd.conf.pod
-and
-https://github.com/maryamtahhan/collectd/blob/feat_ovs_stats/src/collectd.conf.pod
 
 SNMP Agent Plugin
 ^^^^^^^^^^^^^^^^^
@@ -848,6 +878,142 @@ https://github.com/maryamtahhan/collectd/blob/feat_snmp/src/collectd.conf.pod
 For more details on AgentX subagent, please see:
 http://www.net-snmp.org/tutorial/tutorial-5/toolkit/demon/
 
+virt plugin
+^^^^^^^^^^^^
+Repo: https://github.com/maryamtahhan/collectd
+
+Branch: feat_libvirt_upstream
+
+Dependencies: libvirt (https://libvirt.org/), libxml2
+
+On Ubuntu, install the dependencies:
+
+.. code:: bash
+
+    $ sudo apt-get install libxml2-dev
+
+Install libvirt:
+
+libvirt version in package manager might be quite old and offer only limited
+functionality. Hence, building and installing libvirt from sources is recommended.
+Detailed instructions can bet found at:
+https://libvirt.org/compiling.html
+
+Certain metrics provided by the plugin have a requirement on a minimal version of
+the libvirt API. *File system information* statistics require a *Guest Agent (GA)*
+to be installed and configured in a VM. User must make sure that installed GA
+version supports retrieving file system information. Number of *Performance monitoring events*
+metrics depends on running libvirt daemon version.
+
+.. note:: Please keep in mind that RDT metrics (part of *Performance monitoring
+    events*) have to be supported by hardware. For more details on hardware support,
+    please see:
+    https://github.com/01org/intel-cmt-cat
+
+    Additionally perf metrics **cannot** be collected if *Intel RDT* plugin is enabled.
+
+libvirt version can be checked with following commands:
+
+.. code:: bash
+
+    $ virsh --version
+    $ libvirtd --version
+
+.. table:: Extended statistics requirements
+
+    +-------------------------------+--------------------------+-------------+
+    | Statistic                     | Min. libvirt API version | Requires GA |
+    +===============================+==========================+=============+
+    | Domain reason                 | 0.9.2                    | No          |
+    +-------------------------------+--------------------------+-------------+
+    | Disk errors                   | 0.9.10                   | No          |
+    +-------------------------------+--------------------------+-------------+
+    | Job statistics                | 1.2.9                    | No          |
+    +-------------------------------+--------------------------+-------------+
+    | File system information       | 1.2.11                   | Yes         |
+    +-------------------------------+--------------------------+-------------+
+    | Performance monitoring events | 1.3.3                    | No          |
+    +-------------------------------+--------------------------+-------------+
+
+Start libvirt daemon:
+
+.. code:: bash
+
+    $ systemctl start libvirtd
+
+Create domain (VM) XML configuration file. For more information on domain XML
+format and examples, please see:
+https://libvirt.org/formatdomain.html
+
+.. note:: Installing additional hypervisor dependencies might be required before
+    deploying virtual machine.
+
+Create domain, based on created XML file:
+
+.. code:: bash
+
+    $ virsh define DOMAIN_CFG_FILE.xml
+
+Start domain:
+
+.. code:: bash
+
+    $ virsh start DOMAIN_NAME
+
+Check if domain is running:
+
+.. code:: bash
+
+    $ virsh list
+
+Check list of available *Performance monitoring events* and their settings:
+
+.. code:: bash
+
+    $ virsh perf DOMAIN_NAME
+
+Enable or disable *Performance monitoring events* for domain:
+
+.. code:: bash
+
+    $ virsh perf DOMAIN_NAME [--enable | --disable] EVENT_NAME --live
+
+Clone and install the collectd virt plugin:
+
+.. code:: bash
+
+    $ git clone $REPO
+    $ cd collectd
+    $ git checkout $BRANCH
+    $ ./build.sh
+    $ ./configure --enable-syslog --enable-logfile --enable-debug
+    $ make
+    $ sudo make install
+
+Where ``$REPO`` and ``$BRANCH`` are equal to information provided above.
+
+This will install collectd to ``/opt/collectd``. The collectd configuration file
+``collectd.conf`` can be found at ``/opt/collectd/etc``. To load the virt plugin
+user needs to modify the configuration file to include:
+
+.. code:: bash
+
+    LoadPlugin virt
+
+Additionally, user can specify plugin configuration parameters in this file,
+such as connection URI, domain name and much more. By default extended virt plugin
+statistics are disabled. They can be enabled with ``ExtraStats`` option.
+
+.. code:: bash
+
+    <Plugin virt>
+       RefreshInterval 60
+       ExtraStats "cpu_util disk disk_err domain_state fs_info job_stats_background pcpu perf vcpupin"
+    </Plugin>
+
+For more information on the plugin parameters, please see:
+https://github.com/maryamtahhan/collectd/blob/feat_libvirt_upstream/src/collectd.conf.pod
+
 Installing collectd as a service
 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 **NOTE**: In an OPNFV installation, collectd is installed and configured as a