xref: /cloud-hypervisor/docs/heap-profiling.md (revision dab9f1cf301e7dc73949f286ff6b194f02049878)
1*dab9f1cfSRob Bradford# Heap profiling
2*dab9f1cfSRob Bradford
3*dab9f1cfSRob BradfordCloud Hypervisor supports generating a profile using
4*dab9f1cfSRob Bradford[dhat](https://docs.rs/dhat/latest/dhat/) of the heap allocations made during
5*dab9f1cfSRob Bradfordthe runtime of the process.
6*dab9f1cfSRob Bradford
7*dab9f1cfSRob Bradford## Building a suitable binary
8*dab9f1cfSRob Bradford
9*dab9f1cfSRob BradfordThis adds the symbol information to the release binary but does not otherwise
10*dab9f1cfSRob Bradfordaffect the performance.
11*dab9f1cfSRob Bradford
12*dab9f1cfSRob Bradford```
13*dab9f1cfSRob Bradford$ cargo build --profile profiling --features "dhat-heap"
14*dab9f1cfSRob Bradford```
15*dab9f1cfSRob Bradford
16*dab9f1cfSRob Bradford## Generating output
17*dab9f1cfSRob Bradford
18*dab9f1cfSRob BradfordCloud Hypervisor can then be run as usual. However it is necessary to run with `--seccomp false` as the profiling requires extra syscalls.
19*dab9f1cfSRob Bradford
20*dab9f1cfSRob Bradford```
21*dab9f1cfSRob Bradford$ target/profiling/cloud-hypervisor \
22*dab9f1cfSRob Bradford        --kernel ~/src/linux/vmlinux \
23*dab9f1cfSRob Bradford        --pmem file=~/workloads/focal.raw \
24*dab9f1cfSRob Bradford        --cpus boot=1 --memory size=1G \
25*dab9f1cfSRob Bradford        --cmdline "root=/dev/pmem0p1 console=ttyS0" \
26*dab9f1cfSRob Bradford        --serial tty --console off \
27*dab9f1cfSRob Bradford        --api-socket /tmp/api1 \
28*dab9f1cfSRob Bradford        --seccomp false
29*dab9f1cfSRob Bradford```
30*dab9f1cfSRob Bradford
31*dab9f1cfSRob BradfordWhen the VMM exits a message like the following will be shown:
32*dab9f1cfSRob Bradford
33*dab9f1cfSRob Bradford```
34*dab9f1cfSRob Bradforddhat: Total:     384,582 bytes in 3,512 blocks
35*dab9f1cfSRob Bradforddhat: At t-gmax: 133,885 bytes in 379 blocks
36*dab9f1cfSRob Bradforddhat: At t-end:  12,160 bytes in 20 blocks
37*dab9f1cfSRob Bradforddhat: The data has been saved to dhat-heap.json, and is viewable with dhat/dh_view.html
38*dab9f1cfSRob Bradford```
39*dab9f1cfSRob Bradford
40*dab9f1cfSRob BradfordThe JSON output can then be uploaded to [the dh_view tool](https://nnethercote.github.io/dh_view/dh_view.html) for analysis.
41*dab9f1cfSRob Bradford
42