Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  evlist.c

  Sprache: C
 

// SPDX-License-Identifier: GPL-2.0
#include <string.h>
#include "../../../util/evlist.h"
#include "../../../util/evsel.h"
#include "topdown.h"
#include "evsel.h"

int arch_evlist__cmp(const struct evsel *lhs, const struct evsel *rhs)
{
 /*
 * Currently the following topdown events sequence are supported to
 * move and regroup correctly.
 *
 * a. all events in a group
 *    perf stat -e "{instructions,topdown-retiring,slots}" -C0 sleep 1
 *    WARNING: events were regrouped to match PMUs
 *     Performance counter stats for 'CPU(s) 0':
 *          15,066,240     slots
 *          1,899,760      instructions
 *          2,126,998      topdown-retiring
 * b. all events not in a group
 *    perf stat -e "instructions,topdown-retiring,slots" -C0 sleep 1
 *    WARNING: events were regrouped to match PMUs
 *     Performance counter stats for 'CPU(s) 0':
 *          2,045,561      instructions
 *          17,108,370     slots
 *          2,281,116      topdown-retiring
 * c. slots event in a group but topdown metrics events outside the group
 *    perf stat -e "{instructions,slots},topdown-retiring" -C0 sleep 1
 *    WARNING: events were regrouped to match PMUs
 *     Performance counter stats for 'CPU(s) 0':
 *         20,323,878      slots
 *          2,634,884      instructions
 *          3,028,656      topdown-retiring
 * d. slots event and topdown metrics events in two groups
 *    perf stat -e "{instructions,slots},{topdown-retiring}" -C0 sleep 1
 *    WARNING: events were regrouped to match PMUs
 *     Performance counter stats for 'CPU(s) 0':
 *         26,319,024      slots
 *          2,427,791      instructions
 *          2,683,508      topdown-retiring
 * e. slots event and metrics event are not in a group and not adjacent
 *    perf stat -e "{instructions,slots},cycles,topdown-retiring" -C0 sleep 1
 *    WARNING: events were regrouped to match PMUs
 *         68,433,522      slots
 *          8,856,102      topdown-retiring
 *          7,791,494      instructions
 *         11,469,513      cycles
 */

 if (topdown_sys_has_perf_metrics() &&
     (arch_evsel__must_be_in_group(lhs) || arch_evsel__must_be_in_group(rhs))) {
  /* Ensure the topdown slots comes first. */
  if (arch_is_topdown_slots(lhs))
   return -1;
  if (arch_is_topdown_slots(rhs))
   return 1;

  /*
 * Move topdown metrics events forward only when topdown metrics
 * events are not in same group with previous slots event. If
 * topdown metrics events are already in same group with slots
 * event, do nothing.
 */

  if (lhs->core.leader != rhs->core.leader) {
   bool lhs_topdown = arch_is_topdown_metrics(lhs);
   bool rhs_topdown = arch_is_topdown_metrics(rhs);

   if (lhs_topdown && !rhs_topdown)
    return -1;
   if (!lhs_topdown && rhs_topdown)
    return 1;
  }
 }

 /* Retire latency event should not be group leader*/
 if (lhs->retire_lat && !rhs->retire_lat)
  return 1;
 if (!lhs->retire_lat && rhs->retire_lat)
  return -1;

 /* Default ordering by insertion index. */
 return lhs->core.idx - rhs->core.idx;
}

int arch_evlist__add_required_events(struct list_head *list)
{
 struct evsel *pos, *metric_event = NULL;
 int idx = 0;

 if (!topdown_sys_has_perf_metrics())
  return 0;

 list_for_each_entry(pos, list, core.node) {
  if (arch_is_topdown_slots(pos)) {
   /* Slots event already present, nothing to do. */
   return 0;
  }
  if (metric_event == NULL && arch_is_topdown_metrics(pos))
   metric_event = pos;
  idx++;
 }
 if (metric_event == NULL) {
  /* No topdown metric events, nothing to do. */
  return 0;
 }
 return topdown_insert_slots_event(list, idx + 1, metric_event);
}

Messung V0.5 in Prozent
C=95 H=91 G=92

¤ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet am  2026-06-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Statistik
#Sources=277311
#Domains=752002