]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
Intel RDT plugin: use `pqos_mon_start_cores()` if available. 4161/head
authorFlorian Forster <octo@collectd.org>
Fri, 24 Nov 2023 10:39:00 +0000 (11:39 +0100)
committerFlorian Forster <octo@collectd.org>
Fri, 24 Nov 2023 10:39:00 +0000 (11:39 +0100)
src/intel_rdt.c

index e5663ccfa0a039de9ec375081cec06b21978e037..fb2adf32595d87485824246d758157c8e527c503 100644 (file)
@@ -994,9 +994,13 @@ static void rdt_init_pids_monitoring() {
  */
 static void rdt_free_cgroups(void) {
   config_cores_cleanup(&g_rdt->cores);
+#if PQOS_VERSION >= 40600
+  /* no op: memory is freed by pqos_mon_stop(). */
+#else
   for (int i = 0; i < RDT_MAX_CORES; i++) {
     sfree(g_rdt->pcgroups[i]);
   }
+#endif
   g_rdt->cores.num_cgroups = 0;
 }
 
@@ -1098,12 +1102,16 @@ static int rdt_config_cgroups(oconfig_item_t *item) {
       }
     }
 
+#if PQOS_VERSION >= 40600
+    /* no op: memory will be allocated by pqos_mon_start_cores(). */
+#else
     g_rdt->pcgroups[i] = calloc(1, sizeof(*g_rdt->pcgroups[i]));
     if (g_rdt->pcgroups[i] == NULL) {
       rdt_free_cgroups();
       ERROR(RDT_PLUGIN ": Failed to allocate memory for monitoring data.");
       return -ENOMEM;
     }
+#endif
   }
 
   return 0;
@@ -1333,9 +1341,15 @@ static void rdt_init_cores_monitoring() {
   for (size_t i = 0; i < g_rdt->cores.num_cgroups; i++) {
     core_group_t *cg = g_rdt->cores.cgroups + i;
 
+#if PQOS_VERSION >= 40600
+    int mon_start_result =
+        pqos_mon_start_cores(cg->num_cores, cg->cores, g_rdt->events[i],
+                             (void *)cg->desc, &g_rdt->pcgroups[i]);
+#else
     int mon_start_result =
         pqos_mon_start(cg->num_cores, cg->cores, g_rdt->events[i],
                        (void *)cg->desc, g_rdt->pcgroups[i]);
+#endif
 
     if (mon_start_result != PQOS_RETVAL_OK)
       ERROR(RDT_PLUGIN
@@ -1380,6 +1394,7 @@ static int rdt_shutdown(void) {
 
   /* Stop monitoring cores */
   for (size_t i = 0; i < g_rdt->cores.num_cgroups; i++) {
+    /* In pqos 4.6.0 and later this frees memory */
     pqos_mon_stop(g_rdt->pcgroups[i]);
   }