mirror of
https://github.com/haskell/ghcide.git
synced 2024-09-11 05:36:09 +03:00
67 lines
2.2 KiB
Markdown
67 lines
2.2 KiB
Markdown
|
# Using opentelemetry
|
||
|
|
||
|
`ghcide` has support for opentelemetry-based tracing. This allows for tracing
|
||
|
the execution of the process, seeing when Shake rules fire and for how long they
|
||
|
run, when LSP messages are received, and (currently WIP) measuring the memory
|
||
|
occupancy of different objects in memory.
|
||
|
|
||
|
## Capture opentlemetry data
|
||
|
|
||
|
Capturing of opentelemetry data can be enabled by first building ghcide with eventlog support:
|
||
|
|
||
|
```sh
|
||
|
stack build --ghc-options -eventlog
|
||
|
```
|
||
|
|
||
|
Then, you can run `ghcide`, giving it a file to dump eventlog information into.
|
||
|
|
||
|
```sh
|
||
|
ghcide +RTS -l -ol ghcide.eventlog -RTS
|
||
|
```
|
||
|
|
||
|
You can also optionally enable reporting detailed memory data with `--ot-memory-profiling`
|
||
|
|
||
|
```sh
|
||
|
ghcide --ot-memory-profiling +RTS -A4G -l -ol ghcide.eventlog -RTS
|
||
|
```
|
||
|
|
||
|
*Note:* This option, while functional, is extremely slow. You will notice this because the memory graph in the output will have datapoints spaced apart by a couple of minutes. The nursery must be big enough (-A1G or larger) or the measurements will self-abort.
|
||
|
|
||
|
## Viewing with tracy
|
||
|
|
||
|
After installing `opentelemetry-extra` and `tracy`, you can view the opentelementry output:
|
||
|
|
||
|
```sh
|
||
|
eventlog-to-tracy ghcide.eventlog
|
||
|
```
|
||
|
|
||
|
If everything has been set up correctly, this should open a tracy window with the tracing data you captured
|
||
|
|
||
|
### Installing opentelemetry-extra
|
||
|
|
||
|
This package includes a number of binaries for converting between the eventlog output and the formats that various opentelemetry viewers (like tracy) can display:
|
||
|
|
||
|
```sh
|
||
|
cabal install openetelemetry-extra
|
||
|
```
|
||
|
|
||
|
|
||
|
|
||
|
### Building tracy
|
||
|
|
||
|
1. Install the dependencies: `pkg-config` and `glfw, freetype, capstone, GTK3`, along
|
||
|
with their header files (`<pkgname>-dev` on most distros. On Arch the header
|
||
|
files are included with the normal packages).
|
||
|
2. Download tracy from https://github.com/wolfpld/tracy
|
||
|
3. `cd` into the directory containing the source you downloaded
|
||
|
4. Build the `import-chrome` and `Tracy` libraries:
|
||
|
```sh
|
||
|
make -C profiler/build/unix release
|
||
|
make -C import-chrome/build/unix release
|
||
|
```
|
||
|
5. Copy the binaries to your `$PATH`:
|
||
|
```sh
|
||
|
cp profiler/build/unix/Tracy-release ~/.local/bin/Tracy
|
||
|
cp import-chrome/build/unix/import-chrome-release ~/.local/bin/import-chrome
|
||
|
```
|