Инструкция по профилированию PostgreSQL с помощью perf и FlameGraph

«Пост-Грэс-Кью-Эл» свободная объектно-реляционная СУБД. Обмениваемся вопросами и ответами о её работе.
Ответить
AntonS
Сообщения: 86
Зарегистрирован: Пт июн 03, 2022 8:51 am

Инструкция по профилированию PostgreSQL с помощью perf и FlameGraph

Сообщение AntonS »

Профилирование исследует состояние процессов Linux, что требует сборки PostgreSQL с debuginfo и perf с libunwind.

Установка PostgreSQL 15 из исходного кода на Astra Linux

Предварительно, СУБД PostgreSQL 15 может быть установлена из исходного кода на Astra Linux Common Edition например по инструкции, с тем отличием что в параметры configure добавляется:

Код: Выделить всё

./configure --enable-debug
Установка perf

Утилита perf может быть установлена из исходного кода ядра Linux

Показать версию ядра системы

Код: Выделить всё

uname -a
Скопировать и распакововать исходный код ядра Linux

Код: Выделить всё

cd /opt
curl -o linux-source.tar.gz https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.15.70.tar.gz
tar xvf linux-source.tar.gz
Установка зависимостей и сборка perf

Код: Выделить всё

apt install libdwarf-dev libdw-dev binutils-dev libcap-dev libelf-dev libnuma-dev libperf-dev python2 python2-dev python-setuptools libssl-dev libunwind-dev libdwarf-dev libunwindw zlib1g-dev liblzma-dev libaio-dev
cd /opt/linux-5.15.70/tools/perf
make
Сборка выводит доступный функционал perf, включая libunwind:

Код: Выделить всё

Auto-detecting system features:
...                         dwarf: [ on  ]
...            dwarf_getlocations: [ on  ]
...                         glibc: [ on  ]
...                        libbfd: [ on  ]
...                libbfd-buildid: [ on  ]
...                        libcap: [ on  ]
...                        libelf: [ on  ]
...                       libnuma: [ on  ]
...        numa_num_possible_cpus: [ on  ]
...                       libperl: [ OFF ]
...                     libpython: [ OFF ]
...                     libcrypto: [ on  ]
...                     libunwind: [ on  ]
...            libdw-dwarf-unwind: [ on  ]
...                          zlib: [ on  ]
...                          lzma: [ on  ]
...                     get_cpuid: [ on  ]
...                           bpf: [ on  ]
...                        libaio: [ on  ]
...                       libzstd: [ OFF ]
...        disassembler-four-args: [ OFF ]
Далее установка и проверка запуска

Код: Выделить всё

make install
perf top


FlameGraph

Копирование скриптов

Код: Выделить всё

cd /home/student
git clone https://github.com/brendangregg/FlameGraph
Шпаргалка для perf
Автор: Михаил Жилин

Код: Выделить всё

perf record -F 99 -a -g --call-graph=dwarf sleep 2
perf script --header --fields comm,pid,tid,time,event,ip,sym,dso > out.perf
Получение flamegraph

Код: Выделить всё

/home/student/FlameGraph/stackcollapse-perf.pl out.perf | /home/student/FlameGraph/flamegraph.pl > flamegraph.svg
Ответить