The analyze command is a front-end to various tools that let us analyze package installations. Each analyzer is a module for a different kind of analysis that can be done on a package installation, including (but not limited to) binary, log, or text analysis. Thus, the analyze command group allows you to take an existing package install, choose an analyzer, and extract some output for the package using it.
For all analyzers, we write to an
analyzers folder in
~/.spack, or the
value that you specify in your spack config at
For example, here we see the results of running an analysis on zlib:
$ tree ~/.spack/analyzers/ └── linux-ubuntu20.04-skylake └── gcc-9.3.0 └── zlib-1.2.11-sl7m27mzkbejtkrajigj3a3m37ygv4u2 ├── environment_variables │ └── spack-analyzer-environment-variables.json ├── install_files │ └── spack-analyzer-install-files.json └── libabigail └── spack-analyzer-libabigail-libz.so.1.2.11.xml
This means that you can always find analyzer output in this folder, and it
is organized with the same logic as the package install it was run for.
If you want to customize this top level folder, simply provide the
spack analyze run. The nested organization will be maintained
within your custom root.
If you aren’t familiar with Spack’s analyzers, you can quickly list those that are available:
$ spack analyze list-analyzers install_files : install file listing read from install_manifest.json environment_variables : environment variables parsed from spack-build-env.txt config_args : config args loaded from spack-configure-args.txt libabigail : Application Binary Interface (ABI) features for objects
In the above, the first three are fairly simple - parsing metadata files from a package install directory to save
Analyzing a Package¶
The analyze command, akin to install, will accept a package spec to perform an analysis for. The package must be installed. Let’s walk through an example with zlib. We first ask to analyze it. However, since we have more than one install, we are asked to disambiguate:
$ spack analyze run zlib ==> Error: zlib matches multiple packages. Matching packages: fz2bs56 email@example.comfirstname.lastname@example.org arch=linux-ubuntu18.04-skylake sl7m27m email@example.comfirstname.lastname@example.org arch=linux-ubuntu20.04-skylake Use a more specific spec.
We can then specify the spec version that we want to analyze:
$ spack analyze run zlib/fz2bs56
If you don’t provide any specific analyzer names, by default all analyzers
(shown in the
list-analyzers subcommand list) will be run. If an analyzer does not
have any result, it will be skipped. For example, here is a result running for
$ ls ~/.spack/analyzers/linux-ubuntu20.04-skylake/gcc-9.3.0/zlib-1.2.11-sl7m27mzkbejtkrajigj3a3m37ygv4u2/ spack-analyzer-environment-variables.json spack-analyzer-install-files.json spack-analyzer-libabigail-libz.so.1.2.11.xml
If you want to run a specific analyzer, ask for it with –analyzer. Here we run spack analyze on libabigail (already installed) _using_ libabigail1
$ spack analyze run --analyzer abigail libabigail
Monitoring An Analysis¶
For any kind of analysis, you can use a spack monitor “Spackmon” as a server to upload the same run metadata to. You can follow the instructions in the spack monitor documentation to first create a server along with a username and token for yourself. You can then use this guide to interact with the server.
You should first export our spack monitor token and username to the environment:
$ export SPACKMON_TOKEN=50445263afd8f67e59bd79bff597836ee6c05438 $ export SPACKMON_USER=spacky
By default, the host for your server is expected to be at
with a prefix of
ms1, and if this is the case, you can simply add the
--monitor flag to the install command:
$ spack analyze run --monitor wget
If you need to customize the host or the prefix, you can do that as well:
$ spack analyze run --monitor --monitor-prefix monitor --monitor-host https://monitor-service.io wget
If your server doesn’t have authentication, you can skip it:
$ spack analyze run --monitor --monitor-disable-auth wget
Regardless of your choice, when you run analyze on an installed package (whether
it was installed with
--monitor or not, you’ll see the results generating as they did
before, and a message that the monitor server was pinged:
$ spack analyze --monitor wget ... ==> Sending result for wget bin/wget to monitor.