File: dev-profiling.md

package info (click to toggle)
golang-github-bep-golibsass 0.7.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 2,808 kB
  • sloc: cpp: 30,398; ansic: 848; sh: 662; makefile: 340; perl: 56
file content (73 lines) | stat: -rw-r--r-- 1,725 bytes parent folder | download | duplicates (9)
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
# Profiling LibSass

## Linux perf and pprof

On Linux, you can record the profile with `perf` and inspect it with `pprof`.

### Install required tools

Pre-requisites:

1. Linux `perf`, commonly found in the `linux-tools-generic` package.
2. [go], for installing `pprof`.
3. [bazel], for installing `perf_to_profile`.

[go]: https://golang.org
[bazel]: https://bazel.build

First, install `pprof` with:

```bash
go get -u github.com/google/pprof
```

Then, build and install `perf_to_profile`:

```bash
git clone https://github.com/google/perf_data_converter
cd perf_data_converter
bazel build -c opt src:perf_to_profile
sudo cp bazel-bin/src/perf_to_profile /usr/local/bin/
```

Finally, in your libsass repository, clone and build `sassc`:

```bash
git clone https://github.com/sass/sassc.git
make sassc
```

### Record perf data

```bash
sudo perf record sassc/bin/sassc input.scss > /dev/null && sudo chown $USER:$USER perf.data
```

This will create a `perf.data` file that you can vizualize with `pprof`.

### Inspect perf data

A web server with various visualization options:

```bash
pprof -http=localhost:3232 sassc/bin/sassc perf.data
```

Simple text output:

```bash
pprof -text sassc/bin/sassc perf.data
```

Example output:

```
      flat  flat%   sum%        cum   cum%
  24651348  6.97%  6.97%   24651348  6.97%  [[kernel.kallsyms]]
  20746241  5.87% 12.84%   20746241  5.87%  Sass::SharedPtr::decRefCount
  18401663  5.20% 18.04%   20420896  5.78%  __libc_malloc
  15205959  4.30% 22.34%   15205959  4.30%  [libc-2.27.so]
  12974307  3.67% 26.01%   14070189  3.98%  _int_malloc
  10958857  3.10% 29.11%   10958857  3.10%  Sass::SharedPtr::incRefCount
   9837672  2.78% 31.89%   18433250  5.21%  cfree
```