Skip to content

Commit 3431040

Browse files
committed
Merge branch 'develop' into ckelly_develop
2 parents 83687db + 36cb99d commit 3431040

16 files changed

Lines changed: 1135 additions & 26 deletions

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# Performance Data Analysis
22
| Branch | Status |
33
| :--- | :--- |
4-
| master | [![Build Status](https://travis-ci.org/CODARcode/PerformanceAnalysis.svg?branch=master)](https://travis-ci.org/CODARcode/PerformanceAnalysis) [![codecov](https://codecov.io/gh/CODARcode/PerformanceAnalysis/branch/master/graph/badge.svg?token=B5VPVSZII4)](https://codecov.io/gh/CODARcode/PerformanceAnalysis) |
5-
| develop | [![Build Status](https://travis-ci.org/CODARcode/PerformanceAnalysis.svg?branch=release)](https://travis-ci.org/CODARcode/PerformanceAnalysis) [![codecov](https://codecov.io/gh/CODARcode/PerformanceAnalysis/branch/develop/graph/badge.svg?token=B5VPVSZII4)](https://codecov.io/gh/CODARcode/PerformanceAnalysis) |
4+
| master | [![Build Status](https://travis-ci.com/CODARcode/PerformanceAnalysis.svg?branch=master)](https://travis-ci.com/CODARcode/PerformanceAnalysis) [![codecov](https://codecov.io/gh/CODARcode/PerformanceAnalysis/branch/master/graph/badge.svg?token=B5VPVSZII4)](https://codecov.io/gh/CODARcode/PerformanceAnalysis) |
5+
| develop | [![Build Status](https://travis-ci.com/CODARcode/PerformanceAnalysis.svg?branch=release)](https://travis-ci.com/CODARcode/PerformanceAnalysis) [![codecov](https://codecov.io/gh/CODARcode/PerformanceAnalysis/branch/develop/graph/badge.svg?token=B5VPVSZII4)](https://codecov.io/gh/CODARcode/PerformanceAnalysis) |
66

77
This library is part of the [CHIMBUKO](https://github.com/CODARcode/Chimbuko) software framework and provides the C/C++ API to process [TAU](http://tau.uoregon.edu) performance traces which can be produced by multiple workflow components, processes, and threads. Its purpose is to detect events in the trace data that reveal useful information to developers of High Performance Computing applications.
88

app/pserver.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,5 +277,8 @@ int main (int argc, char ** argv){
277277
}
278278

279279
progressStream << "Pserver: finished" << std::endl;
280+
281+
delete param;
282+
280283
return 0;
281284
}

include/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
nobase_include_HEADERS = chimbuko/chimbuko.hpp chimbuko/ad/FuncAnomalyMetrics.hpp chimbuko/ad/ADOutlier.hpp chimbuko/ad/ADLocalAnomalyMetrics.hpp chimbuko/ad/ADNetClient.hpp chimbuko/ad/FuncStats.hpp chimbuko/ad/ADAnomalyProvenance.hpp chimbuko/ad/ADParser.hpp chimbuko/ad/ADProvenanceDBengine.hpp chimbuko/ad/ADNormalEventProvenance.hpp chimbuko/ad/ADLocalFuncStatistics.hpp chimbuko/ad/ADMetadataParser.hpp chimbuko/ad/AnomalyData.hpp chimbuko/ad/ADDefine.hpp chimbuko/ad/ADglobalFunctionIndexMap.hpp chimbuko/ad/ADProvenanceDBclient.hpp chimbuko/ad/ADcombinedPSdata.hpp chimbuko/ad/ADEvent.hpp chimbuko/ad/ADCounter.hpp chimbuko/ad/ADLocalCounterStatistics.hpp chimbuko/ad/ExecData.hpp chimbuko/ad/utils.hpp chimbuko/ad/ADio.hpp chimbuko/verbose.hpp chimbuko/pserver/PSProvenanceDBclient.hpp chimbuko/pserver/GlobalAnomalyStats.hpp chimbuko/pserver/AggregateFuncAnomalyMetrics.hpp chimbuko/pserver/PSglobalFunctionIndexMap.hpp chimbuko/pserver/AggregateFuncStats.hpp chimbuko/pserver/AggregateAnomalyData.hpp chimbuko/pserver/NetPayloadRecvCombinedADdata.hpp chimbuko/pserver/PSstatSender.hpp chimbuko/pserver/GlobalAnomalyMetrics.hpp chimbuko/pserver/GlobalCounterStats.hpp chimbuko/param/sstd_param.hpp chimbuko/param/hbos_param.hpp chimbuko/AD.hpp chimbuko/message.hpp chimbuko/net.hpp chimbuko/pserver.hpp chimbuko/param.hpp chimbuko/net/zmqme_net.hpp chimbuko/net/mpi_net.hpp chimbuko/net/zmq_net.hpp chimbuko/net/local_net.hpp chimbuko/util/RunStats.hpp chimbuko/util/ADIOS2parseUtils.hpp chimbuko/util/environment.hpp chimbuko/util/time.hpp chimbuko/util/map.hpp chimbuko/util/error.hpp chimbuko/util/string.hpp chimbuko/util/DispatchQueue.hpp chimbuko/util/PerfStats.hpp chimbuko/util/RunMetric.hpp chimbuko/util/memutils.hpp chimbuko/util/Anomalies.hpp chimbuko/util/barrier.hpp chimbuko/util/threadPool.hpp chimbuko/util/hash.hpp chimbuko/util/mtQueue.hpp chimbuko/util/serialize.hpp chimbuko/util/commandLineParser.hpp
1+
nobase_include_HEADERS = chimbuko/chimbuko.hpp chimbuko/ad/FuncAnomalyMetrics.hpp chimbuko/ad/ADOutlier.hpp chimbuko/ad/ADLocalAnomalyMetrics.hpp chimbuko/ad/ADNetClient.hpp chimbuko/ad/FuncStats.hpp chimbuko/ad/ADAnomalyProvenance.hpp chimbuko/ad/ADParser.hpp chimbuko/ad/ADProvenanceDBengine.hpp chimbuko/ad/ADNormalEventProvenance.hpp chimbuko/ad/ADLocalFuncStatistics.hpp chimbuko/ad/ADMetadataParser.hpp chimbuko/ad/AnomalyData.hpp chimbuko/ad/ADDefine.hpp chimbuko/ad/ADglobalFunctionIndexMap.hpp chimbuko/ad/ADProvenanceDBclient.hpp chimbuko/ad/ADcombinedPSdata.hpp chimbuko/ad/ADEvent.hpp chimbuko/ad/ADCounter.hpp chimbuko/ad/ADLocalCounterStatistics.hpp chimbuko/ad/ExecData.hpp chimbuko/ad/utils.hpp chimbuko/ad/ADio.hpp chimbuko/verbose.hpp chimbuko/pserver/PSProvenanceDBclient.hpp chimbuko/pserver/GlobalAnomalyStats.hpp chimbuko/pserver/AggregateFuncAnomalyMetrics.hpp chimbuko/pserver/PSglobalFunctionIndexMap.hpp chimbuko/pserver/AggregateFuncStats.hpp chimbuko/pserver/AggregateAnomalyData.hpp chimbuko/pserver/NetPayloadRecvCombinedADdata.hpp chimbuko/pserver/PSstatSender.hpp chimbuko/pserver/GlobalAnomalyMetrics.hpp chimbuko/pserver/GlobalCounterStats.hpp chimbuko/param/sstd_param.hpp chimbuko/param/hbos_param.hpp chimbuko/param/copod_param.hpp chimbuko/AD.hpp chimbuko/message.hpp chimbuko/net.hpp chimbuko/pserver.hpp chimbuko/param.hpp chimbuko/net/zmqme_net.hpp chimbuko/net/mpi_net.hpp chimbuko/net/zmq_net.hpp chimbuko/net/local_net.hpp chimbuko/util/RunStats.hpp chimbuko/util/ADIOS2parseUtils.hpp chimbuko/util/environment.hpp chimbuko/util/time.hpp chimbuko/util/map.hpp chimbuko/util/error.hpp chimbuko/util/string.hpp chimbuko/util/DispatchQueue.hpp chimbuko/util/PerfStats.hpp chimbuko/util/RunMetric.hpp chimbuko/util/memutils.hpp chimbuko/util/Anomalies.hpp chimbuko/util/barrier.hpp chimbuko/util/threadPool.hpp chimbuko/util/hash.hpp chimbuko/util/mtQueue.hpp chimbuko/util/serialize.hpp chimbuko/util/commandLineParser.hpp

include/chimbuko/ad/ADOutlier.hpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,5 +245,75 @@ namespace chimbuko {
245245

246246
};
247247

248+
/**
249+
* @brief COPOD anomaly detection algorithm
250+
*
251+
*/
252+
class ADOutlierCOPOD : public ADOutlier {
253+
public:
254+
255+
/**
256+
* @brief Construct a new ADOutlierHBOS object
257+
*
258+
*/
259+
ADOutlierCOPOD(OutlierStatistic stat = ExclusiveRuntime, double threshold = 0.99, bool use_global_threshold = true);
260+
261+
/**
262+
* @brief Destroy the ADOutlierHBOS object
263+
*
264+
*/
265+
~ADOutlierCOPOD();
266+
267+
/**
268+
* @brief Set the alpha value
269+
*
270+
* @param regularizer alpha value
271+
*/
272+
void set_alpha(double alpha) { m_alpha = alpha; }
273+
274+
/**
275+
* @brief run HBOS anomaly detection algorithm
276+
*
277+
* @param step step (or frame) number
278+
* @return data structure containing captured anomalies
279+
*/
280+
Anomalies run(int step=0) override;
281+
282+
protected:
283+
/**
284+
* @brief compute outliers (or anomalies) of the list of function calls
285+
*
286+
* @param[out] outliers Array of function calls that were tagged as outliers
287+
* @param func_id function id
288+
* @param data[in,out] a list of function calls to inspect
289+
* @return unsigned long the number of outliers (or anomalies)
290+
*/
291+
unsigned long compute_outliers(Anomalies &outliers,
292+
const unsigned long func_id, std::vector<CallListIterator_t>& data) override;
293+
294+
/**
295+
* @brief Scott's rule for bin_width estimation during histogram formation
296+
*/
297+
double _scott_binWidth(std::vector<double>& vals);
298+
299+
/**
300+
* @brief Assigns samples to corresponding bins in Histogram. Similar to numpy digitize in Python
301+
*/
302+
int np_digitize_get_bin_inds(const double& X, const std::vector<double>& bin_edges);
303+
304+
/**
305+
* @brief Computes Empirical CDF of input vector of function runtimes
306+
*/
307+
std::vector<double> empiricalCDF(const std::vector<double>& runtimes, const bool sorted=true);
308+
309+
private:
310+
double m_alpha; /**< Used to prevent log2 overflow */
311+
double m_threshold; /**< Threshold used to filter anomalies in HBOS*/
312+
bool m_use_global_threshold; /**< Flag to use global threshold*/
313+
//double m_threshold; /** sync with global threshold */
314+
OutlierStatistic m_statistic; /** Which statistic to use for outlier detection */
315+
316+
};
317+
248318

249319
} // end of AD namespace
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
#pragma once
2+
#include <chimbuko_config.h>
3+
#include "chimbuko/param.hpp"
4+
#include "chimbuko/param/hbos_param.hpp"
5+
#include "chimbuko/util/RunStats.hpp"
6+
#include <unordered_map>
7+
#include <nlohmann/json.hpp>
8+
#include <vector>
9+
#include <iostream>
10+
11+
namespace chimbuko {
12+
13+
14+
/**
15+
* @@brief Implementation of ParamInterface for COPOD based anomaly detection
16+
*/
17+
class CopodParam : public ParamInterface {
18+
public:
19+
CopodParam();
20+
~CopodParam();
21+
/**
22+
* @brief Clear all statistics
23+
*/
24+
void clear() override;
25+
26+
27+
const int find(const unsigned long& func_id);
28+
29+
/**
30+
* @brief Get the internal map between global function index and statistics
31+
*/
32+
const std::unordered_map<unsigned long, Histogram> & get_hbosstats() const{ return m_copodstats; }
33+
34+
/**
35+
* @brief Get the number of functions for which statistics are being collected
36+
*/
37+
size_t size() const override { return m_copodstats.size(); }
38+
39+
/**
40+
* @brief Convert internal Histogram to string format for IO
41+
* @return Histogram in string format
42+
*/
43+
std::string serialize() const override;
44+
45+
/**
46+
* @brief Update the internal Histogram with those included in the serialized input map
47+
* @param parameters The parameters in serialized format
48+
* @param return_update Controls return format
49+
* @return An empty string if return_update==False, otherwise the serialized updated parameters
50+
*/
51+
std::string update(const std::string& parameters, bool return_update=false) override;
52+
53+
/**
54+
* @brief Set the internal Histogram to match those included in the serialized input map. Overwrite performed only for those keys in input.
55+
* @param parameters The serialized input map
56+
*/
57+
void assign(const std::string& parameters) override;
58+
59+
void show(std::ostream& os) const override;
60+
61+
/**
62+
* @brief Set the internal Histogram to match those included in the input map. Overwrite performed only for those keys in input.
63+
* @param copodstats The input map between global function index and Histogram
64+
*/
65+
void assign(const std::unordered_map<unsigned long, Histogram>& copodstats);
66+
67+
/**
68+
* @brief Convert a Histogram mapping into a Cereal portable binary representration
69+
* @param copodstats The Histogram mapping
70+
* @return Histogram in string format
71+
*/
72+
static std::string serialize_cerealpb(const std::unordered_map<unsigned long, Histogram>& copodstats);
73+
74+
/**
75+
* @brief Get an element of the internal map
76+
* @param id The global function index
77+
*/
78+
Histogram& operator [](unsigned long id) { return m_copodstats[id]; }
79+
80+
/**
81+
* @brief Convert a Histogram Cereal portable binary representation string into a map
82+
* @param[in] parameters The parameter string
83+
* @param[out] copodstats The map between global function index and histogram statistics
84+
*/
85+
static void deserialize_cerealpb(const std::string& parameters,
86+
std::unordered_map<unsigned long, Histogram>& copodstats);
87+
88+
89+
/**
90+
* @brief Update the internal histogram with those included in the input map
91+
* @param[in] copodstats The map between global function index and histogram
92+
*/
93+
void update(const std::unordered_map<unsigned long, Histogram>& copodstats);
94+
95+
/**
96+
* @brief Update the internal Histogram with those included in another CopodParam instance.
97+
* @param[in] other The other CopodParam instance
98+
*/
99+
void update(const CopodParam& other) { update(other.m_copodstats); }
100+
101+
/**
102+
* @brief Update the internal histogram with those included in the input map. Input map is then updated to reflect new state.
103+
* @param[in,out] copodstats The map between global function index and statistics
104+
*/
105+
void update_and_return(std::unordered_map<unsigned long, Histogram>& copodstats);
106+
107+
/**
108+
* @brief Update the internal histogram with those included in another CopodParam instance. Other CopodParam is then updated to reflect new state.
109+
* @param[in,out] other The other CopodParam instance
110+
*/
111+
void update_and_return(CopodParam& other) { update_and_return(other.m_copodstats); }
112+
113+
114+
nlohmann::json get_algorithm_params(const unsigned long func_id) const override;
115+
116+
private:
117+
std::unordered_map<unsigned long, Histogram> m_copodstats; /**< Map of func_id and corresponding Histogram*/
118+
};
119+
120+
121+
} // end of chimbuko namespace

src/Makefile.am

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/3rdparty @PS_FLAGS@
22

33
lib_LTLIBRARIES = libchimbuko.la
4-
libchimbuko_la_SOURCES = chimbuko.cpp param.cpp util/ADIOS2parseUtils.cpp util/RunStats.cpp util/DispatchQueue.cpp util/Anomalies.cpp util/map.cpp util/string.cpp util/error.cpp util/memutils.cpp util/time.cpp util/PerfStats.cpp util/environment.cpp ad/ADOutlier.cpp ad/ADParser.cpp ad/ADio.cpp ad/utils.cpp ad/ADEvent.cpp ad/AnomalyData.cpp ad/FuncStats.cpp ad/ExecData.cpp ad/ADCounter.cpp ad/ADAnomalyProvenance.cpp ad/ADNetClient.cpp ad/ADLocalFuncStatistics.cpp ad/ADLocalCounterStatistics.cpp ad/ADProvenanceDBengine.cpp ad/ADProvenanceDBclient.cpp ad/ADMetadataParser.cpp ad/ADglobalFunctionIndexMap.cpp ad/ADNormalEventProvenance.cpp ad/ADcombinedPSdata.cpp ad/FuncAnomalyMetrics.cpp ad/ADLocalAnomalyMetrics.cpp pserver/PSstatSender.cpp pserver/PSglobalFunctionIndexMap.cpp pserver/PSProvenanceDBclient.cpp pserver/AggregateAnomalyData.cpp pserver/AggregateFuncStats.cpp pserver/NetPayloadRecvCombinedADdata.cpp pserver/AggregateFuncAnomalyMetrics.cpp pserver/GlobalAnomalyStats.cpp pserver/GlobalCounterStats.cpp pserver/GlobalAnomalyMetrics.cpp message.cpp net/zmq_net.cpp net/mpi_net.cpp net/zmqme_net.cpp net/local_net.cpp net.cpp param/hbos_param.cpp param/sstd_param.cpp
4+
libchimbuko_la_SOURCES = chimbuko.cpp param.cpp util/ADIOS2parseUtils.cpp util/RunStats.cpp util/DispatchQueue.cpp util/Anomalies.cpp util/map.cpp util/string.cpp util/error.cpp util/memutils.cpp util/time.cpp util/PerfStats.cpp util/environment.cpp ad/ADOutlier.cpp ad/ADParser.cpp ad/ADio.cpp ad/utils.cpp ad/ADEvent.cpp ad/AnomalyData.cpp ad/FuncStats.cpp ad/ExecData.cpp ad/ADCounter.cpp ad/ADAnomalyProvenance.cpp ad/ADNetClient.cpp ad/ADLocalFuncStatistics.cpp ad/ADLocalCounterStatistics.cpp ad/ADProvenanceDBengine.cpp ad/ADProvenanceDBclient.cpp ad/ADMetadataParser.cpp ad/ADglobalFunctionIndexMap.cpp ad/ADNormalEventProvenance.cpp ad/ADcombinedPSdata.cpp ad/FuncAnomalyMetrics.cpp ad/ADLocalAnomalyMetrics.cpp pserver/PSstatSender.cpp pserver/PSglobalFunctionIndexMap.cpp pserver/PSProvenanceDBclient.cpp pserver/AggregateAnomalyData.cpp pserver/AggregateFuncStats.cpp pserver/NetPayloadRecvCombinedADdata.cpp pserver/AggregateFuncAnomalyMetrics.cpp pserver/GlobalAnomalyStats.cpp pserver/GlobalCounterStats.cpp pserver/GlobalAnomalyMetrics.cpp message.cpp net/zmq_net.cpp net/mpi_net.cpp net/zmqme_net.cpp net/local_net.cpp net.cpp param/hbos_param.cpp param/copod_param.cpp param/sstd_param.cpp
55
libchimbuko_la_LDFLAGS = -version-info 3:0:0

0 commit comments

Comments
 (0)