Как профилировать статическую / глобальную инициализацию? - PullRequest
2 голосов
/ 01 июля 2019

Я пытаюсь профилировать время выполнения моего кода и время запуска.До сих пор я использовал perf и uftrace для поиска проблем во время выполнения, и я обнаружил много проблем во время выполнения, но я также хотел бы узнать больше об инициализации и знать, где я теряю время.Я пытался использовать LD_DEBUG=statistics для получения дополнительной информации о динамически загружаемых библиотеках, но я не заметил ничего необычного, и это имеет смысл, поскольку у меня все библиотеки статически связаны с исполняемым файлом.

Можно ли измерить, сколько времени потребуется для инициализации статики / глобалов и всего, что происходит до того, как поток достигнет main()?

1 Ответ

1 голос
/ 01 июля 2019

perf отлично работает для инициализации.

Я пробовал с этой программой:

struct BeforeInit {
    volatile int sink;

    BeforeInit() {
        for (int i = 0; i < 1000000000; i++) {
            sink = i;
        }
    }
};

BeforeInit global;

int main() {
    return 0;
}

perf record и perf report показывают служебные данные, в основном все в этой функции:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...