From 8fbdfac802c74077fc3fa8cc991328eb57e60bab Mon Sep 17 00:00:00 2001 From: =?utf8?q?Genevi=C3=A8ve=20Bastien?= Date: Tue, 17 May 2016 16:22:37 -0400 Subject: [PATCH] lttng: Add Lttng Execution Graph analysis benchmarks MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This benchmarks the build time and memory usage of the kernel execution graph analysis on some lttng kernel traces. The graph is used to calculate the critical path Change-Id: I7e787f4120f084c1acd5a8fdad835bfdb7e71559 Signed-off-by: Geneviève Bastien Reviewed-by: Francis Giraldeau Reviewed-on: https://git.eclipse.org/r/72973 Reviewed-by: Hudson CI --- .../META-INF/MANIFEST.MF | 1 + .../KernelExecutionGraphBenchmark.java | 135 ++++++++++++++++++ .../alltests/perf/RunAllPerfTests.java | 1 + 3 files changed, 137 insertions(+) create mode 100644 lttng/org.eclipse.tracecompass.lttng2.kernel.core.tests/perf/org/eclipse/tracecompass/lttng2/kernel/core/tests/perf/analysis/execgraph/KernelExecutionGraphBenchmark.java diff --git a/lttng/org.eclipse.tracecompass.lttng2.kernel.core.tests/META-INF/MANIFEST.MF b/lttng/org.eclipse.tracecompass.lttng2.kernel.core.tests/META-INF/MANIFEST.MF index 0d39bb82c5..3a4a0275ca 100644 --- a/lttng/org.eclipse.tracecompass.lttng2.kernel.core.tests/META-INF/MANIFEST.MF +++ b/lttng/org.eclipse.tracecompass.lttng2.kernel.core.tests/META-INF/MANIFEST.MF @@ -30,6 +30,7 @@ Export-Package: org.eclipse.tracecompass.lttng2.kernel.core.tests, org.eclipse.tracecompass.lttng2.kernel.core.tests.analysis.vm, org.eclipse.tracecompass.lttng2.kernel.core.tests.event.matchandsync;x-internal:=true, org.eclipse.tracecompass.lttng2.kernel.core.tests.perf.analysis, + org.eclipse.tracecompass.lttng2.kernel.core.tests.perf.analysis.execgraph, org.eclipse.tracecompass.lttng2.kernel.core.tests.perf.analysis.kernel, org.eclipse.tracecompass.lttng2.kernel.core.tests.perf.analysis.syscall, org.eclipse.tracecompass.lttng2.kernel.core.tests.perf.analysis.tid, diff --git a/lttng/org.eclipse.tracecompass.lttng2.kernel.core.tests/perf/org/eclipse/tracecompass/lttng2/kernel/core/tests/perf/analysis/execgraph/KernelExecutionGraphBenchmark.java b/lttng/org.eclipse.tracecompass.lttng2.kernel.core.tests/perf/org/eclipse/tracecompass/lttng2/kernel/core/tests/perf/analysis/execgraph/KernelExecutionGraphBenchmark.java new file mode 100644 index 0000000000..93b2edab65 --- /dev/null +++ b/lttng/org.eclipse.tracecompass.lttng2.kernel.core.tests/perf/org/eclipse/tracecompass/lttng2/kernel/core/tests/perf/analysis/execgraph/KernelExecutionGraphBenchmark.java @@ -0,0 +1,135 @@ +/******************************************************************************* + * Copyright (c) 2016 École Polytechnique de Montréal + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v1.0 which + * accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + *******************************************************************************/ + +package org.eclipse.tracecompass.lttng2.kernel.core.tests.perf.analysis.execgraph; + +import static org.junit.Assert.fail; + +import java.io.File; +import java.util.EnumSet; + +import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.test.performance.Dimension; +import org.eclipse.test.performance.Performance; +import org.eclipse.test.performance.PerformanceMeter; +import org.eclipse.tracecompass.internal.lttng2.kernel.core.analysis.graph.building.LttngKernelExecutionGraph; +import org.eclipse.tracecompass.lttng2.kernel.core.trace.LttngKernelTrace; +import org.eclipse.tracecompass.testtraces.ctf.CtfTestTrace; +import org.eclipse.tracecompass.tmf.core.analysis.IAnalysisModule; +import org.eclipse.tracecompass.tmf.core.exceptions.TmfAnalysisException; +import org.eclipse.tracecompass.tmf.core.exceptions.TmfTraceException; +import org.eclipse.tracecompass.tmf.core.tests.shared.TmfTestHelper; +import org.eclipse.tracecompass.tmf.core.trace.TmfTraceManager; +import org.eclipse.tracecompass.tmf.ctf.core.event.CtfTmfEvent; +import org.eclipse.tracecompass.tmf.ctf.core.tests.shared.CtfTmfTestTraceUtils; +import org.junit.Test; + +/** + * Benchmarks the kernel execution graph + * + * @author Geneviève Bastien + */ +public class KernelExecutionGraphBenchmark { + + /** + * Test test ID for kernel analysis benchmarks + */ + public static final String TEST_ID = "org.eclipse.tracecompass#Kernel Execution Graph#"; + private static final String TEST_BUILD = "Building Graph (%s)"; + private static final String TEST_MEMORY = "Memory Usage (%s)"; + + private static final int LOOP_COUNT = 25; + + private interface RunMethod { + void execute(PerformanceMeter pm, IAnalysisModule module); + } + + private RunMethod cpu = (pm, module) -> { + pm.start(); + TmfTestHelper.executeAnalysis(module); + pm.stop(); + }; + + private RunMethod memory = (pm, module) -> { + System.gc(); + pm.start(); + TmfTestHelper.executeAnalysis(module); + System.gc(); + pm.stop(); + }; + + private static final EnumSet fTraceSet = EnumSet.of( + CtfTestTrace.TRACE2, + CtfTestTrace.MANY_THREADS, + CtfTestTrace.DJANGO_HTTPD); + + /** + * Run all benchmarks + */ + @Test + public void runAllBenchmarks() { + for (CtfTestTrace trace : fTraceSet) { + + runOneBenchmark(trace, + String.format(TEST_BUILD, trace.toString()), + cpu, + Dimension.CPU_TIME); + + runOneBenchmark(trace, + String.format(TEST_MEMORY, trace.toString()), + memory, + Dimension.USED_JAVA_HEAP); + } + } + + private static void runOneBenchmark(@NonNull CtfTestTrace testTrace, String testName, RunMethod method, Dimension dimension) { + Performance perf = Performance.getDefault(); + PerformanceMeter pm = perf.createPerformanceMeter(TEST_ID + testName); + perf.tagAsSummary(pm, "Execution graph " + testName, dimension); + + for (int i = 0; i < LOOP_COUNT; i++) { + LttngKernelTrace trace = null; + IAnalysisModule module = null; + + String path = CtfTmfTestTraceUtils.getTrace(testTrace).getPath(); + + try { + trace = new LttngKernelTrace(); + module = new LttngKernelExecutionGraph(); + module.setId("test"); + trace.initTrace(null, path, CtfTmfEvent.class); + module.setTrace(trace); + + method.execute(pm, module); + + /* + * Delete the supplementary files, so that the next iteration + * rebuilds the state system. + */ + File suppDir = new File(TmfTraceManager.getSupplementaryFileDir(trace)); + for (File file : suppDir.listFiles()) { + file.delete(); + } + + } catch (TmfAnalysisException | TmfTraceException e) { + fail(e.getMessage()); + } finally { + if (module != null) { + module.dispose(); + } + if (trace != null) { + trace.dispose(); + } + } + } + pm.commit(); + CtfTmfTestTraceUtils.dispose(testTrace); + } + +} diff --git a/releng/org.eclipse.tracecompass.alltests/src/org/eclipse/tracecompass/alltests/perf/RunAllPerfTests.java b/releng/org.eclipse.tracecompass.alltests/src/org/eclipse/tracecompass/alltests/perf/RunAllPerfTests.java index 91823f19b0..7b45acec5f 100644 --- a/releng/org.eclipse.tracecompass.alltests/src/org/eclipse/tracecompass/alltests/perf/RunAllPerfTests.java +++ b/releng/org.eclipse.tracecompass.alltests/src/org/eclipse/tracecompass/alltests/perf/RunAllPerfTests.java @@ -23,6 +23,7 @@ import org.junit.runners.Suite; org.eclipse.tracecompass.ctf.core.tests.perf.trace.TraceReadBenchmark.class, org.eclipse.tracecompass.ctf.core.tests.perf.trace.TraceSeekBenchmark.class, + org.eclipse.tracecompass.lttng2.kernel.core.tests.perf.analysis.execgraph.KernelExecutionGraphBenchmark.class, org.eclipse.tracecompass.lttng2.kernel.core.tests.perf.analysis.kernel.KernelAnalysisBenchmark.class, org.eclipse.tracecompass.lttng2.kernel.core.tests.perf.analysis.kernel.KernelAnalysisUsageBenchmark.class, org.eclipse.tracecompass.lttng2.kernel.core.tests.perf.analysis.syscall.SystemCallAnalysisBenchmark.class, -- 2.34.1