-
Notifications
You must be signed in to change notification settings - Fork 26
/
INSTALL
160 lines (139 loc) · 7.39 KB
/
INSTALL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
Installing STAT
__________________________________________________________
Table of Contents
Dependent Packages
Installation
__________________________________________________________
Dependent Packages
STAT has several dependencies
Table 1. STAT Dependent Packages
Package What It Does
Package Web Page
Graphlib version 3.0 or greater Graph creation, merging, and
export
https://github.com/LLNL/graphlib/
Launchmon Scalable daemon co-location
https://github.com/LLNL/LaunchMON
Libdwarf Debug information parsing (Required by StackWalker)
https://www.prevanders.net/dwarf.html
MRNet version 3.0 or greater Scalable multicast and reduction
network
https://github.com/dyninst/mrnet
StackWalker Lightweight stack trace sampling
https://github.com/dyninst/dyninst
In addition, STAT requires Python and the STAT GUI requires
PyGTK, both of which are commonly preinstalled with many Linux
operating systems. STAT can be built with Python 2.X and PyGTK
2.X. However, starting with STAT version 4.0.1, STAT can
optionally be built with Python 3.X. The use of Python 3.X also
requires PyGTK version 3.X and requires you to manually install
the xdot python package. STAT also requires SWIG to generate
Python wrappers for STAT's core functionality. The Pygments
Python module can optionally be installed to allow the STAT GUI
to perform syntax highlighting of source code. Another GUI
requirement is the Graphviz package to render the DOT format
graph files.
STAT can also be optionally built with the Fast Global File
Status (FGFS) library. This library helps STAT identify when a
file (target binary) resides on a shared file system that may
become a bottleneck if all STAT daemons try to access that file
at the same time. If so, STAT will access the file from the
STAT frontend and distribute its contents to the daemons via
the MRNet communication tree. The two necessary components of
FGFS can be downloaded from
https://github.com/LLNL/MountPointAttributes and
https://github.com/LLNL/FastGlobalFileStatus
__________________________________________________________
Installation
STAT and its dependencies can also be built via the Spack
package management tool, available at
https://github.com/spack/spack. Running spack install stat
should build STAT and all of its dependencies, including those
require for the STAT GUI. Note that three Spack variants exist.
The first is +examples, to enable building example MPI code
that STAT can be tested against. This is disabled by default to
avoid requiring an MPI library, but enabling it will trigger a
build of MPI. The second is +dysect to enable building of the
DySectAPI. The third is +fgfs to build with
FastGlobalFileStatus and target binary broadcast support. FGFS
is crucial to scalability, particularly when debugging
applications that load several large dynamic libraries.
For STAT 4.0.1 and beyond, the spack build of STAT requires
Python 3 and will require the activation of the py-xdot package
./bin/spack activate py-xdot. For versions up to and including
STAT 4.0.0, the spack build of STAT requires Python 2 and
requires the activation of the py-pygtk and py-enum34 packages
./bin/spack activate py-pygtk and ./bin/spack activate
py-enum34.
When building STAT itself, first run configure. You will need
to use the --with-package options to specify the install prefix
for mrnet, graphlib, launchmon, libdwarf, and dyninst. These
options will add the necessary include and library search paths
to the compile options. Refer to configure --help for exact
options. You may also wish to specify the maximum number of
communication processes to launch per node with the option
--with-procspernode=number, generally set to the number of
cores per node.
STAT creates wrapper scripts for the stat-cl and stat-gui
commands. These wrappers set appropriate paths for the
launchmon and mrnet_commnode executables, based on the
--with-launchmon and --with-mrnet configure options, thus it is
important to specify both of these even if they share a prefix.
STAT will try to build the GUI by default. Building and running
the STAT GUI requires SWIG and pygtk. If you need to modify
your PYTHONPATH envirnment variable to search for side
installed site-packages, you can do this by specifying
STAT_PYTHONPATH=path during configure. This will add the
appropriate directory to the $PYTHONPATH environment variable
within the stat-gui script. To disable the building of the GUI,
use the --enable-gui=no configure option.
On BlueGene systems, be sure to configure --with-bluegene. This
will enable the BGL macro for BlueGene specific compilation. It
is important to note that on BlueGene systems, you may need to
use an alternate hostname for the front-end node in order to
get MRNet to bind to the appropriate network interface that can
communicate with the I/O nodes. By default, STAT will append
"-io" to the hostname. Alternatively, you can specify the
hostname with the STAT_FE_HOSTNAME environment variable.
To compile on Cray systems runnig alps, you no longer need to
specify --with-cray-alps. An example configure line for Cray:
./configure --with-launchmon=/tmp/work/lee218/install \
--with-mrnet=/tmp/work/lee218/install \
--with-graphlib==/tmp/work/lee218/install \
--with-stackwalker=/tmp/work/lee218/install \
--with-libdwarf=/tmp/work/lee218/install \
--prefix=/tmp/work/lee218/install \
MPICC=cc MPICXX=CC MPIF77=ftn --enable-shared LD=/usr/bin/ld
Note that specifying LD=/usr/bin/ld may be required on Cray
systems to avoid using the compute node linker. It is also
worth noting that Cray includes a build of STAT as part of
their system software stack. It is typically installed in
/opt/cray/stat and can be loaded via modules.
After running configure you just need to run:
make
make install
Note that STAT hardcodes the paths to its daemon and filter
shared object, assuming that they are in $prefix/bin and
$prefix/lib respectively, thus testing should be done in the
install prefix after running make install and the installation
directory should not be moved. The path to these components
can, however, be overridden with the --daemon and --filter
arguments. Further, the STAT_PREFIX environment variable can be
defined to override the hardcoded paths in STAT. STAT will
also, by default, add rpaths to dependent libraries. This
behavior can be disabled by specifying --with-rpath=no.
However, when doing so, you must be sure to set LD_LIBRARY_PATH
to point to the directories containing the dependent libraries.
STAT can also be configured to use GDB as a backend instead of
Dyninst. To specify the path to gdb, use the --with-gdb flag.
If CUDA kernal traces are desired, the path should point to a
working cuda-gdb executable. Note that STAT currently still
requires Dyninst as a dependence even when using the GDB
backend.
Dyninst 12 removed the local_var.h header file that STAT uses
to gather python traces. If this feature is needed, you will
either need to use Dyninst version 11 or lower, or copy the
local_var.h file from
https://raw.githubusercontent.com/dyninst/dyninst/5c7e0ee327399
cfae50d77f977ff6655c2ca3ae4/stackwalk/h/local_var.h to your
Dyninst 12+ installation's include directory