Оптимизация по превышении заданного количества сэмплов. Вызов BOLT.
- Задать функцию, которая для данного объектного файла подготовит вызов BOLT:
(
invoke_bolt(objfile, fdata_file) -> outfile
)- Сформировать уникальное имя для оптимизированного объектного файла (outfile)
- Вызов BOLT:
llvm-bolt objfile -data=fdata_file -o outfile -dyno-stats
- Вернуть outfile
- После обновления записей в БД:
- Найти объектные файлы, для которых суммарное количество сэмплов во всех perf файлах превышает заданный порог (например, N=100).
- Исключить некоторые случаи:
- perf map файлы (например, проверять расширение и пропускать файлы
.map
) - Специальные объекты:
[vdso]
,[kernel.kallsyms]
(пропускать всё, что начинается не с/
)
- perf map файлы (например, проверять расширение и пропускать файлы
- Отсортировать по количеству сэмплов по убыванию, выбрать заданное количество таких объектных файлов (M=1 для начала).
- Для каждого полученного объектного файла objfile:
- Подготовить профиль:
prepare_fdata(objfile) -> fdata_file
- Вызвать BOLT:
invoke_bolt(objfile, fdata_file) -> outfile
- Подготовить профиль: