summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--3rd_party/collectd-ves-plugin/ves_plugin/ves_plugin.py2
-rw-r--r--docs/release/userguide/feature.userguide.rst91
-rw-r--r--mibs/Intel-Bios.txt67
-rw-r--r--mibs/Intel-Common-MIB.mib.txt113
-rw-r--r--mibs/Intel-Mcelog.txt115
-rw-r--r--mibs/Intel-Rdt.txt128
-rw-r--r--mibs/Intel-SA.txt10
-rw-r--r--src/collectd/collectd_sample_configs/dpdkevents.conf35
-rw-r--r--src/dpdk/Makefile3
9 files changed, 525 insertions, 39 deletions
diff --git a/3rd_party/collectd-ves-plugin/ves_plugin/ves_plugin.py b/3rd_party/collectd-ves-plugin/ves_plugin/ves_plugin.py
index a9715ad7..3e300893 100644
--- a/3rd_party/collectd-ves-plugin/ves_plugin/ves_plugin.py
+++ b/3rd_party/collectd-ves-plugin/ves_plugin/ves_plugin.py
@@ -277,7 +277,7 @@ class VESPlugin(object):
def event_send(self, event):
"""Send event to VES"""
- server_url = "http{}://{}:{}/{}eventListener/v1{}".format(
+ server_url = "http{}://{}:{}/{}eventListener/v3{}".format(
's' if self.__plugin_config['UseHttps'] else '', self.__plugin_config['Domain'],
int(self.__plugin_config['Port']), '{}/'.format(
'/{}'.format(self.__plugin_config['Path'])) if (len(self.__plugin_config['Path']) > 0) else '',
diff --git a/docs/release/userguide/feature.userguide.rst b/docs/release/userguide/feature.userguide.rst
index 2f4077bc..f5bb6a72 100644
--- a/docs/release/userguide/feature.userguide.rst
+++ b/docs/release/userguide/feature.userguide.rst
@@ -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 retrieve 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,7 @@ 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
+
**Plugins included in the Danube release:**
* Hugepages
@@ -82,20 +80,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,29 +116,37 @@ 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
+
+Below is the per plugin installation and configuration guide, if you only want
+to install some/particular plugins.
+
DPDK statistics plugin
^^^^^^^^^^^^^^^^^^^^^^
Repo: https://github.com/collectd/collectd
Branch: master
-Dependencies: DPDK (http://dpdk.org/)
+Dependencies: DPDK (http://dpdk.org/) Min_Version: 16.04
To build and install DPDK to /usr please see:
https://github.com/collectd/collectd/blob/master/docs/BUILD.dpdkstat.md
@@ -178,12 +186,18 @@ include:
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:: 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 persistent (i.e. it will not survive a
+ reboot).
+
+.. note:: 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.
DPDK events plugin
^^^^^^^^^^^^^^^^^^^^^^
@@ -200,7 +214,7 @@ Building and installing collectd:
.. code:: bash
- $ git clone https://github.com/maryamtahhan/collectd.git
+ $ git clone https://github.com/collectd/collectd.git
$ cd collectd
$ ./build.sh
$ ./configure --enable-syslog --enable-logfile --enable-debug
@@ -240,12 +254,13 @@ include:
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:: 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 persistent (i.e. it will not survive a
+ reboot).
.. code:: bash
diff --git a/mibs/Intel-Bios.txt b/mibs/Intel-Bios.txt
new file mode 100644
index 00000000..824cd09f
--- /dev/null
+++ b/mibs/Intel-Bios.txt
@@ -0,0 +1,67 @@
+INTEL-BIOS-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+ MODULE-IDENTITY, OBJECT-TYPE
+ FROM SNMPv2-SMI
+
+ hostAssist
+ FROM Intel-SA-MIB
+
+ DisplayString
+ FROM SNMPv2-TC;
+
+--*****************************************************************************
+--
+-- MODULE IDENTITY AND REVISION GROUP
+--
+--*****************************************************************************
+
+intelBios MODULE-IDENTITY
+ LAST-UPDATED "201610241700Z" -- coordinated universal time UTC format is YYMMDDHHmmZ
+ ORGANIZATION "Intel, Server Management Software"
+ CONTACT-INFO " "
+ DESCRIPTION "This SNMP MIB module retrieves System Management BIOS (SMBIOS)
+ information from DMI table using dmidecode.
+
+ Version: 1.0 10/24/2016
+
+ Intel copyright information 2016"
+ ::= { hostAssist 2 }
+
+-------------------------------------------------------------------------------
+-- BIOS scalars
+-------------------------------------------------------------------------------
+
+biosVendor OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..128))
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The textual string describes the bios vendor."
+ ::= { intelBios 1 }
+
+biosVersion OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..128))
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The textual string describes the bios version."
+ ::= { intelBios 2 }
+
+biosReleaseDate OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..128))
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The textual string describes the bios release date."
+ ::= { intelBios 3 }
+
+biosRevision OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..128))
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The textual string describes the bios revision."
+ ::= { intelBios 4 }
+
+END
diff --git a/mibs/Intel-Common-MIB.mib.txt b/mibs/Intel-Common-MIB.mib.txt
new file mode 100644
index 00000000..92c766ff
--- /dev/null
+++ b/mibs/Intel-Common-MIB.mib.txt
@@ -0,0 +1,113 @@
+Intel-Common-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+ enterprises FROM RFC1155-SMI;
+
+-- Categories
+
+intel OBJECT IDENTIFIER ::= { enterprises 343 }
+
+--
+-- Intel Private space divides into 3 branches at the top. They are
+-- identifiers, products, and experimental.
+--
+-- 'identifers' branch typically contains objects which are used as
+-- constants. For example, if a mib contained an object identifier
+-- "appliance-type", somewhere down under identifiers would be a list
+-- containing OIDs for "refrigerator", "toaster", etc. Currently
+-- there are 3 groups under identifiers; systems, objects and
+-- comm-methods.
+-- 'systems' contains objects for system type such as PCs, hubs, etc.
+-- 'objects' contains identifiers for component pieces.
+-- 'comm-methods' refers to the transmission medium used in
+-- proxy-to-agent conversation.
+--
+-- 'products' branch contains objects which are specifically Intel
+-- products. Under this branch go all MIBs for Intel products.
+--
+-- 'experimental' is for exactly what the name implies.
+--
+-- 'information-technology' encompasses the work of the Information
+-- Technology (IT) group within Intel.
+--
+-- For example, an identifier for a toaster would exist under
+-- 'identifiers.systems.toasters' while another identifier for an
+-- Intel specific toaster MIB would live under 'products.appliances'.
+--
+
+identifiers OBJECT IDENTIFIER ::= { intel 1 }
+products OBJECT IDENTIFIER ::= { intel 2 }
+experimental OBJECT IDENTIFIER ::= { intel 3 }
+information-technology OBJECT IDENTIFIER ::= { intel 4 }
+sysProducts OBJECT IDENTIFIER ::= { intel 5 }
+mib2ext OBJECT IDENTIFIER ::= { intel 6 }
+hw OBJECT IDENTIFIER ::= { intel 7 }
+wekiva OBJECT IDENTIFIER ::= { intel 111 }
+-- Groups under 'identifiers'
+
+systems OBJECT IDENTIFIER ::= { identifiers 1 }
+objects OBJECT IDENTIFIER ::= { identifiers 2 }
+comm-methods OBJECT IDENTIFIER ::= { identifiers 3 }
+
+pc-systems OBJECT IDENTIFIER ::= { systems 1 }
+proxy-systems OBJECT IDENTIFIER ::= { systems 2 }
+hub-systems OBJECT IDENTIFIER ::= { systems 3 }
+switch-systems OBJECT IDENTIFIER ::= { systems 4 }
+
+local-proxy-1 OBJECT IDENTIFIER ::= { comm-methods 1 }
+pc-novell-1 OBJECT IDENTIFIER ::= { comm-methods 2 }
+
+-- Identifiers for 'hub-systems'
+-- Note: These items match the definitions for moduleType
+-- in intelhub.mib.
+
+express10-100Stack OBJECT IDENTIFIER ::= { hub-systems 1 }
+express12TX OBJECT IDENTIFIER ::= { hub-systems 2 }
+express24TX OBJECT IDENTIFIER ::= { hub-systems 3 }
+expressReserved OBJECT IDENTIFIER ::= { hub-systems 4 }
+expressBridge OBJECT IDENTIFIER ::= { hub-systems 6 }
+express210-12 OBJECT IDENTIFIER ::= { hub-systems 7 }
+express210-24 OBJECT IDENTIFIER ::= { hub-systems 8 }
+express220-12 OBJECT IDENTIFIER ::= { hub-systems 9 }
+express220-24 OBJECT IDENTIFIER ::= { hub-systems 10 }
+express300Stack OBJECT IDENTIFIER ::= { hub-systems 11 }
+express320-16 OBJECT IDENTIFIER ::= { hub-systems 12 }
+express320-24 OBJECT IDENTIFIER ::= { hub-systems 13 }
+
+-- Groups under 'products'
+
+pc-products OBJECT IDENTIFIER ::= { products 1 }
+hub-products OBJECT IDENTIFIER ::= { products 2 }
+proxy OBJECT IDENTIFIER ::= { products 3 }
+print-products OBJECT IDENTIFIER ::= { products 4 }
+network-products OBJECT IDENTIFIER ::= { products 5 }
+snmp-agents OBJECT IDENTIFIER ::= { products 6 }
+nic-products OBJECT IDENTIFIER ::= { products 7 }
+server-management OBJECT IDENTIFIER ::= { products 10 }
+switch-products OBJECT IDENTIFIER ::= { products 11 }
+i2o OBJECT IDENTIFIER ::= { products 120 }
+-- Groups under 'hub-products'
+
+express110 OBJECT IDENTIFIER ::= { hub-products 1 }
+
+-- Groups under 'print-products'
+
+netport-1 OBJECT IDENTIFIER ::= { print-products 1 }
+netport-2 OBJECT IDENTIFIER ::= { print-products 2 }
+netport-express OBJECT IDENTIFIER ::= { print-products 3 }
+
+-- Groups under 'network-products'
+
+lanDesk OBJECT IDENTIFIER ::= { network-products 1 }
+ld-alarms OBJECT IDENTIFIER ::= { lanDesk 1 }
+internetServer-2 OBJECT IDENTIFIER ::= { network-products 2 }
+iS-alarms OBJECT IDENTIFIER ::= { internetServer-2 1 }
+
+-- Groups under 'experimental'
+
+-- <none>
+
+--
+
+END
+
diff --git a/mibs/Intel-Mcelog.txt b/mibs/Intel-Mcelog.txt
new file mode 100644
index 00000000..90f4398b
--- /dev/null
+++ b/mibs/Intel-Mcelog.txt
@@ -0,0 +1,115 @@
+INTEL-MCELOG-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+ MODULE-IDENTITY, OBJECT-TYPE, Integer32
+ FROM SNMPv2-SMI
+
+ hostAssist
+ FROM Intel-SA-MIB
+
+ DisplayString
+ FROM SNMPv2-TC;
+
+--*****************************************************************************
+--
+-- MODULE IDENTITY AND REVISION GROUP
+--
+--*****************************************************************************
+
+intelMcelog MODULE-IDENTITY
+ LAST-UPDATED "201610241700Z" -- coordinated universal time UTC format is YYMMDDHHmmZ
+ ORGANIZATION "Intel, Server Management Software"
+ CONTACT-INFO " "
+ DESCRIPTION "This SNMP MIB module logs and accounts machine memory, IO, and CPU
+ hardware errors on modern x86 Linux systems.
+
+ Version: 1.0 10/24/2016
+
+ Intel copyright information 2016"
+ ::= { hostAssist 3 }
+
+OneBasedIndex ::= Integer32(1..2147483647)
+
+-------------------------------------------------------------------------------
+-- Intel Mcelog Table
+-------------------------------------------------------------------------------
+
+memoryTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF MemoryTableEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "This Group defines the Intel RDT Groups Table."
+ ::= { intelMcelog 2 }
+
+memoryTableEntry OBJECT-TYPE
+ SYNTAX MemoryTableEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION "This Group defines the Mcelog Memory Table Entry."
+ INDEX { memoryGroupIndex }
+ ::= { memoryTable 1 }
+
+MemoryTableEntry ::= SEQUENCE {
+ memoryGroupIndex OneBasedIndex,
+ memoryGroupDescr DisplayString,
+ memoryCorrectedErrors Integer32,
+ memoryCorrectedTimedErrors Integer32,
+ memoryUncorrectedErrors Integer32,
+ memoryUncorrectedTimedErrors Integer32
+}
+
+memoryGroupIndex OBJECT-TYPE
+ SYNTAX OneBasedIndex
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This attribute defines the index of the Mcelog memory group."
+ ::= { memoryTableEntry 1 }
+
+memoryGroupDescr OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..255))
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "A textual string containing information about the socket and
+ DMI name (*TODO*)."
+ ::= { memoryTableEntry 2 }
+
+memoryCorrectedErrors OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This counter defines the total number of corrected errors."
+ ::= { memoryTableEntry 3 }
+
+memoryCorrectedTimedErrors OBJECT-TYPE
+ SYNTAX Integer32
+ UNITS "in 24h"
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This counter defines the number of corrected errors in
+ last 24 hours."
+ ::= { memoryTableEntry 4 }
+
+memoryUncorrectedErrors OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This counter defines the total number of uncorrected errors."
+ ::= { memoryTableEntry 5 }
+
+memoryUncorrectedTimedErrors OBJECT-TYPE
+ SYNTAX Integer32
+ UNITS "in 24h"
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This counter defines the number of uncorrected errors in
+ last 24 hours."
+ ::= { memoryTableEntry 6 }
+
+END
diff --git a/mibs/Intel-Rdt.txt b/mibs/Intel-Rdt.txt
new file mode 100644
index 00000000..8eb93d0a
--- /dev/null
+++ b/mibs/Intel-Rdt.txt
@@ -0,0 +1,128 @@
+INTEL-RDT-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+ MODULE-IDENTITY, OBJECT-TYPE, Integer32, Counter64
+ FROM SNMPv2-SMI
+
+ hostAssist
+ FROM Intel-SA-MIB
+
+ DisplayString
+ FROM SNMPv2-TC;
+
+--*****************************************************************************
+--
+-- MODULE IDENTITY AND REVISION GROUP
+--
+--*****************************************************************************
+
+intelRdt MODULE-IDENTITY
+ LAST-UPDATED "201610241700Z" -- coordinated universal time UTC format is YYMMDDHHmmZ
+ ORGANIZATION "Intel, Server Management Software"
+ CONTACT-INFO " "
+ DESCRIPTION "This SNMP MIB module supports the Intel RDT SNMP subagent for monitoring
+ information provided by monitoring features of Intel Resource Director
+ Technology (Intel(R) RDT) like Cache Monitoring Technology (CMT),
+ Memory Bandwidth Monitoring (MBM). These features provide information about
+ utilization of shared resources like last level cache occupancy, local
+ memory bandwidth usage, remote memory bandwidth usage, instructions per clock.
+
+ Version: 1.0 10/24/2016
+
+ Intel copyright information 2016"
+ ::= { hostAssist 1 }
+
+OneBasedIndex ::= Integer32(1..2147483647)
+
+-------------------------------------------------------------------------------
+-- Intel RDT Table
+-------------------------------------------------------------------------------
+
+rdtGroupNumber OBJECT-TYPE
+ SYNTAX Integer32
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "The number of network interfaces (regardless of their
+ current state) present on this system."
+ ::= { intelRdt 1 }
+
+rdtTable OBJECT-TYPE
+ SYNTAX SEQUENCE OF RdtTableEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION
+ "This Group defines the Intel RDT Groups Table."
+ ::= { intelRdt 2 }
+
+rdtTableEntry OBJECT-TYPE
+ SYNTAX RdtTableEntry
+ MAX-ACCESS not-accessible
+ STATUS current
+ DESCRIPTION "This Group defines the Intel RDT Groups Table Entry."
+ INDEX { rdtGroupIndex }
+ ::= { rdtTable 1 }
+
+RdtTableEntry ::= SEQUENCE {
+ rdtGroupIndex OneBasedIndex,
+ rdtGroupDescr DisplayString,
+ rdtLlc Counter64,
+ rdtIpc Counter64,
+ rdtMbmRemote Counter64,
+ rdtMbmLocal Counter64
+}
+
+rdtGroupIndex OBJECT-TYPE
+ SYNTAX OneBasedIndex
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This attribute defines the index of the Intel RDT group."
+ ::= { rdtTableEntry 1 }
+
+rdtGroupDescr OBJECT-TYPE
+ SYNTAX DisplayString (SIZE (0..255))
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "A textual string containing information about the groups of cores
+ on which to monitor supported events."
+ ::= { rdtTableEntry 2 }
+
+rdtLlc OBJECT-TYPE
+ SYNTAX Counter64
+ UNITS "bytes"
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This counter defines the last level cache occupancy."
+ ::= { rdtTableEntry 3 }
+
+rdtIpc OBJECT-TYPE
+ SYNTAX DisplayString
+ UNITS "ipc"
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This counter defines the instructions per clock."
+ ::= { rdtTableEntry 4 }
+
+rdtMbmRemote OBJECT-TYPE
+ SYNTAX Counter64
+ UNITS "bytes/sec"
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This counter defines the Remote (Socket) memory bandwidth usage."
+ ::= { rdtTableEntry 5 }
+
+rdtMbmLocal OBJECT-TYPE
+ SYNTAX Counter64
+ UNITS "bytes/sec"
+ MAX-ACCESS read-only
+ STATUS current
+ DESCRIPTION
+ "This counter defines the Local (Socket) memory bandwidth usage."
+ ::= { rdtTableEntry 6 }
+
+END
diff --git a/mibs/Intel-SA.txt b/mibs/Intel-SA.txt
new file mode 100644
index 00000000..6e7dd87b
--- /dev/null
+++ b/mibs/Intel-SA.txt
@@ -0,0 +1,10 @@
+Intel-SA-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+ server-management FROM Intel-Common-MIB;
+
+software OBJECT IDENTIFIER ::= { server-management 3 }
+baseboardGroup OBJECT IDENTIFIER ::= { software 5 }
+hostAssist OBJECT IDENTIFIER ::= { baseboardGroup 1 }
+
+END
diff --git a/src/collectd/collectd_sample_configs/dpdkevents.conf b/src/collectd/collectd_sample_configs/dpdkevents.conf
new file mode 100644
index 00000000..fdb6f3db
--- /dev/null
+++ b/src/collectd/collectd_sample_configs/dpdkevents.conf
@@ -0,0 +1,35 @@
+# Copyright 2017 OPNFV
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+<LoadPlugin dpdkevents>
+ Interval 1
+</LoadPlugin>
+
+<Plugin "dpdkevents">
+ <EAL>
+# Coremask "0x1"
+# MemoryChannels "4"
+# FilePrefix "rte"
+ </EAL>
+ <Event "link_status">
+ SendEventsOnUpdate false
+ EnabledPortMask 0xffff
+ SendNotification true
+ </Event>
+ <Event "keep_alive">
+ SendEventsOnUpdate false
+ LCoreMask "0xf"
+ KeepAliveShmName "/dpdk_keepalive_shm_name"
+ SendNotification true
+ </Event>
+</Plugin>
diff --git a/src/dpdk/Makefile b/src/dpdk/Makefile
index b8524322..a23a6290 100644
--- a/src/dpdk/Makefile
+++ b/src/dpdk/Makefile
@@ -44,6 +44,7 @@ INSTALL_TARGET = force_make
force_make: $(TAG_DONE_FLAG)
$(AT)cd $(WORK_DIR) && git pull $(DPDK_URL) $(DPDK_TAG)
$(AT)sed -i -e 's/CONFIG_RTE_BUILD_SHARED_LIB=./CONFIG_RTE_BUILD_SHARED_LIB=y/g' $(CONFIG_FILE_LINUXAPP)
+ $(AT)sed -i -e 's/CONFIG_RTE_EAL_PMD_PATH=.*/CONFIG_RTE_EAL_PMD_PATH=\"\/usr\/lib\/dpdk-pmd\/\"/g' $(CONFIG_FILE_LINUXAPP)
$(AT)sed -i -e 's/CONFIG_RTE_LIBRTE_KNI=./CONFIG_RTE_LIBRTE_KNI=n/g' $(CONFIG_FILE_LINUXAPP)
$(AT)cd $(WORK_DIR); make config T=$(DPDK_TARGET) -j; make -j
$(AT)cd `dirname $(CONFIG_FILE_LINUXAPP)` && git checkout `basename $(CONFIG_FILE_LINUXAPP)` && cd -
@@ -51,6 +52,8 @@ force_make: $(TAG_DONE_FLAG)
install: $(INSTALL_TARGET)
$(AT)cd $(WORK_DIR); sudo make -j install prefix=/usr; cd -
+ $(AT)sudo mkdir -p /usr/lib/dpdk-pmd
+ $(AT)find /usr/lib -type f -name 'librte_pmd*' | while read path; do sudo ln -fs $$path /usr/lib/dpdk-pmd/$$(echo $$path | grep -o 'librte_.*so'); done
$(AT)sudo cp -a $(WORK_DIR)/build/kmod $(INSTALL_DIR)/lib/modules/$(KERNEL_VERSION)
@echo "install done"