Merge pull request #2891 from elfiesmelfie/feat_intel_rdt
authorMatthias Runge <mrunge@matthias-runge.de>
Thu, 4 Apr 2019 05:58:51 +0000 (07:58 +0200)
committerGitHub <noreply@github.com>
Thu, 4 Apr 2019 05:58:51 +0000 (07:58 +0200)
Intel RDT plugin: add support for groups of PIDs.

1  2 
Makefile.am
src/collectd.conf.in
src/collectd.conf.pod

diff --combined Makefile.am
@@@ -159,7 -159,8 +159,8 @@@ check_PROGRAMS = 
        test_utils_time \
        test_utils_vl_lookup \
        test_libcollectd_network_parse \
-       test_utils_config_cores
+       test_utils_config_cores \
+       test_utils_proc_pids
  
  
  TESTS = $(check_PROGRAMS)
@@@ -376,6 -377,11 +377,11 @@@ test_utils_config_cores_SOURCES = 
        src/testing.h
  test_utils_config_cores_LDADD = libplugin_mock.la
  
+ test_utils_proc_pids_SOURCES = \
+       src/utils/proc_pids/proc_pids_test.c \
+       src/testing.h
+ test_utils_proc_pids_LDADD = libplugin_mock.la
  libavltree_la_SOURCES = \
        src/utils/avltree/avltree.c \
        src/utils/avltree/avltree.h
@@@ -1065,11 -1071,25 +1071,25 @@@ if BUILD_PLUGIN_INTEL_RD
  pkglib_LTLIBRARIES += intel_rdt.la
  intel_rdt_la_SOURCES = \
        src/intel_rdt.c \
+       src/utils/proc_pids/proc_pids.c \
+       src/utils/proc_pids/proc_pids.h \
        src/utils/config_cores/config_cores.h \
        src/utils/config_cores/config_cores.c
  intel_rdt_la_CFLAGS = $(AM_CFLAGS) $(BUILD_WITH_LIBPQOS_CPPFLAGS)
  intel_rdt_la_LDFLAGS = $(PLUGIN_LDFLAGS) $(BUILD_WITH_LIBPQOS_LDFLAGS)
  intel_rdt_la_LIBADD = $(BUILD_WITH_LIBPQOS_LIBS)
+ test_plugin_intel_rdt_SOURCES = \
+       src/intel_rdt_test.c \
+       src/utils/config_cores/config_cores.c \
+       src/utils/proc_pids/proc_pids.c \
+       src/daemon/configfile.c \
+       src/daemon/types_list.c
+ test_plugin_intel_rdt_CPPFLAGS = $(AM_CPPFLAGS)
+ test_plugin_intel_rdt_LDFLAGS = $(PLUGIN_LDFLAGS)
+ test_plugin_intel_rdt_LDADD = liboconfig.la libplugin_mock.la
+ check_PROGRAMS += test_plugin_intel_rdt
+ TESTS += test_plugin_intel_rdt
  endif
  
  if BUILD_PLUGIN_INTERFACE
@@@ -1939,13 -1959,12 +1959,13 @@@ virt_la_CFLAGS = $(AM_CFLAGS) 
  virt_la_LDFLAGS = $(PLUGIN_LDFLAGS)
  virt_la_LIBADD = libignorelist.la $(BUILD_WITH_LIBVIRT_LIBS) $(BUILD_WITH_LIBXML2_LIBS)
  
 -test_plugin_virt_SOURCES = src/virt_test.c
 +test_plugin_virt_SOURCES = src/virt_test.c src/daemon/configfile.c \
 +      src/daemon/types_list.c
  test_plugin_virt_CPPFLAGS = $(AM_CPPFLAGS) \
        $(BUILD_WITH_LIBVIRT_CPPFLAGS) $(BUILD_WITH_LIBXML2_CFLAGS)
  test_plugin_virt_LDFLAGS = $(PLUGIN_LDFLAGS) \
        $(BUILD_WITH_LIBVIRT_LDFLAGS) $(BUILD_WITH_LIBXML2_LDFLAGS)
 -test_plugin_virt_LDADD = libplugin_mock.la \
 +test_plugin_virt_LDADD = liboconfig.la libplugin_mock.la \
        $(BUILD_WITH_LIBVIRT_LIBS) $(BUILD_WITH_LIBXML2_LIBS)
  check_PROGRAMS += test_plugin_virt
  TESTS += test_plugin_virt
diff --combined src/collectd.conf.in
  
  #<Plugin "intel_rdt">
  #  Cores "0-2"
+ #  Processes "sshd"
  #</Plugin>
  
  #<Plugin interface>
  #     InterfaceFormat name
  #     PluginInstanceFormat name
  #     Instances 1
 -#     ExtraStats "cpu_util disk disk_err domain_state fs_info job_stats_background pcpu perf vcpupin"
 +#     ExtraStats "cpu_util disk disk_err domain_state fs_info job_stats_background pcpu perf vcpupin disk_physical disk_allocation disk_capacity"
  #     PersistentNotification false
  #</Plugin>
  
diff --combined src/collectd.conf.pod
@@@ -3498,6 -3498,7 +3498,7 @@@ B<Synopsis:
  
    <Plugin "intel_rdt">
      Cores "0-2" "3,4,6" "8-10,15"
+     Processes "sshd,qemu-system-x86" "bash"
    </Plugin>
  
  B<Options:>
@@@ -3513,11 -3514,10 +3514,10 @@@ recommended to set interval higher tha
  
  =item B<Cores> I<cores groups>
  
- All events are reported on a per core basis. Monitoring of the events can be
- configured for group of cores (aggregated statistics). This field defines groups
- of cores on which to monitor supported events. The field is represented as list
- of strings with core group values. Each string represents a list of cores in a
- group. Allowed formats are:
+ Monitoring of the events can be configured for group of cores
+ (aggregated statistics). This field defines groups of cores on which to monitor
+ supported events. The field is represented as list of strings with core group
+ values. Each string represents a list of cores in a group. Allowed formats are:
      0,1,2,3
      0-10,20-18
      1,3,5-8,10,0x10-12
  If an empty string is provided as value for this field default cores
  configuration is applied - a separate group is created for each core.
  
+ =item B<Processes> I<process names groups>
+ Monitoring of the events can be configured for group of processes
+ (aggregated statistics). This field defines groups of processes on which to
+ monitor supported events. The field is represented as list of strings with
+ process names group values. Each string represents a list of processes in a
+ group. Allowed format is:
+     sshd,bash,qemu
  =back
  
  B<Note:> By default global interval is used to retrieve statistics on monitored
@@@ -9252,51 -9261,13 +9261,51 @@@ surrounded by I</.../> and collectd wa
  
  The default is to collect statistics for all domains and all their devices.
  
 -Example:
 +B<Note:> B<BlockDevice> and B<InterfaceDevice> options are related to
 +corresponding B<*Format> options. Specifically, B<BlockDevice> filtering depends
 +on B<BlockDeviceFormat> setting - if user wants to filter block devices by
 +'target' name then B<BlockDeviceFormat> option has to be set to 'target' and
 +B<BlockDevice> option must be set to a valid block device target
 +name("/:hdb/"). Mixing formats and filter values from different worlds (i.e.,
 +using 'target' name as B<BlockDevice> value with B<BlockDeviceFormat> set to
 +'source') may lead to unexpected results (all devices filtered out or all
 +visible, depending on the value of B<IgnoreSelected> option).
 +Similarly, option B<InterfaceDevice> is related to B<InterfaceFormat> setting
 +(i.e., when user wants to use MAC address as a filter then B<InterfaceFormat>
 +has to be set to 'address' - using wrong type here may filter out all of the
 +interfaces).
 +
 +B<Example 1:>
 +
 +Ignore all I<hdb> devices on any domain, but other block devices (eg. I<hda>)
 +will be collected:
  
   BlockDevice "/:hdb/"
   IgnoreSelected "true"
 + BlockDeviceFormat "target"
  
 -Ignore all I<hdb> devices on any domain, but other block devices (eg. I<hda>)
 -will be collected.
 +B<Example 2:>
 +
 +Collect metrics only for block device on 'baremetal0' domain when its
 +'source' matches given path:
 +
 + BlockDevice "baremetal0:/var/lib/libvirt/images/baremetal0.qcow2"
 + BlockDeviceFormat source
 +
 +As you can see it is possible to filter devices/interfaces using
 +various formats - for block devices 'target' or 'source' name can be
 +used.  Interfaces can be filtered using 'name', 'address' or 'number'.
 +
 +B<Example 3:>
 +
 +Collect metrics only for domains 'baremetal0' and 'baremetal1' and
 +ignore any other domain:
 +
 + Domain "baremetal0"
 + Domain "baremetal1"
 +
 +It is possible to filter multiple block devices/domains/interfaces by
 +adding multiple filtering entries in separate lines.
  
  =item B<BlockDeviceFormat> B<target>|B<source>
  
@@@ -9327,11 -9298,6 +9336,11 @@@ to C<sda>
  Setting C<BlockDeviceFormat source> will cause the I<type instance> to be set
  to C<var_lib_libvirt_images_image1.qcow2>.
  
 +B<Note:> this option determines also what field will be used for
 +filtering over block devices (filter value in B<BlockDevice>
 +will be applied to target or source). More info about filtering
 +block devices can be found in the description of B<BlockDevice>.
 +
  =item B<BlockDeviceFormatBasename> B<false>|B<true>
  
  The B<BlockDeviceFormatBasename> controls whether the full path or the
@@@ -9382,11 -9348,6 +9391,11 @@@ interface path might change between reb
  
  B<number> means use the interface's number in guest.
  
 +B<Note:> this option determines also what field will be used for
 +filtering over interface device (filter value in B<InterfaceDevice>
 +will be applied to name, address or number).  More info about filtering
 +interfaces can be found in the description of B<InterfaceDevice>.
 +
  =item B<PluginInstanceFormat> B<name|uuid|metadata|none>
  
  When the virt plugin logs data, it sets the plugin_instance of the collected
@@@ -9469,18 -9430,6 +9478,18 @@@ B<Note>: I<perf> metrics can't be colle
  
  =item B<vcpupin>: report pinning of domain VCPUs to host physical CPUs.
  
 +=item B<disk_physical>: report 'disk_physical' statistic for disk device.
 +B<Note>: This statistic is only reported for disk devices with 'source'
 +property available.
 +
 +=item B<disk_allocation>: report 'disk_allocation' statistic for disk device.
 +B<Note>: This statistic is only reported for disk devices with 'source'
 +property available.
 +
 +=item B<disk_capacity>: report 'disk_capacity' statistic for disk device.
 +B<Note>: This statistic is only reported for disk devices with 'source'
 +property available.
 +
  =back
  
  =item B<PersistentNotification> B<true>|B<false>