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