Измерение времени сборки для выявления узких мест - PullRequest
2 голосов
/ 09 сентября 2011

Я работаю над улучшением сборки для нескольких проектов. Я значительно улучшил время сборки, и сейчас я нахожусь в точке, где я думаю, что узкие места более тонкие.

Сборка использует make-файлы в стиле GNU. Я генерирую серию файлов зависимостей (.d) и включаю их в make-файл, иначе ничего сложного не происходит (например, нет предварительно скомпилированных заголовков или других механизмов кэширования).

Сборка занимает около 95 секунд на 32-ядерном Sparc Ultra, работающем с 16 потоками параллельно. Время простоя составляет около 80% во время сборки, а время ядра колеблется между 8-10%. Я поместил код в / tmp, но большинство файлов поддержки компилятора смонтированы по NFS, и я считаю, что это может создавать узкое место в производительности.

Какие существуют инструменты для измерения и отслеживания подобных проблем?

1 Ответ

1 голос
/ 09 сентября 2011

Исходя из моего собственного опыта, компиляция кода C / C ++ требует чтения большого количества заголовочных файлов препроцессором C.Я сталкивался с ситуациями, когда для создания полной единицы перевода потребовалось более 50% времени выполнения g ++.

Как вы упомянули, что при компиляции он простаивает на 80%, тогда он должен ожидать ввода-вывода.iostat и DTrace будет хорошей отправной точкой.

...