Несколько лет назад я работал в лаборатории сборки в Microsoft, которая занималась большим количеством управляемого кода. Подчеркну, это было много лет назад, до того, как управляемая MPGO стала государственной. Но тогда они использовали старые данные профиля (обычно за день до этого, но иногда и до недели) для «частичной оптимизации» набора внутренних двоичных файлов. Я не могу говорить о цифрах, но мы бы не стали этого делать, если бы в этом не было какой-то выгоды. Эти «частично оптимизированные» двоичные файлы будут использоваться только для автоматического дымового тестирования и только для внутреннего использования. Когда-либо будут выпущены только полностью оптимизированные двоичные файлы (данные профиля которых были собраны из одной сборки).
Я не эксперт, но, насколько я понимаю, данные руководства MPGO используют сигнатуры методов (например, используемые символами отладки) и смещения файлов, которые не являются стабильными между сборками. Тогда возникает вопрос: какой процент достаточно стабилен, чтобы иметь какую-то пользу?
Допустим, имя метода изменилось для метода, который часто используется. Тогда, конечно, «горячие» страницы в старом бинарнике (из-за этого метода) не будут найдены в новом бинарнике, а страница, которая часто используется, вероятно, будет помещена в «конец» оптимизированного бинарника. с кодом, который никогда не используется. С другой стороны медали: какой % методов переименовывается из одной ежедневной сборки? (Или даже чаще с CI?) Думаю, менее 1%.
Позвольте мне вернуться к внутренним сборкам. Конечно, сбор новых данных профиля производительности занял некоторое время, поэтому чувствительные ко времени внутренние функции (которые необходимо запускать сразу после сборки) будут выполняться с использованием частично оптимизированной версии сборки, потому что эта сборка завершится за несколько часов до полностью оптимизированной версии сборки. . Позвольте мне объяснить, почему это заняло так много времени. IIRC мы использовали «проходы» профиля, где сначала запускаются сценарии основной библиотеки, эти двоичные файлы оптимизируются, а оптимизированное ядро используется в более поздних «сквозных» сценариях (например, веб-служба на стороне сервера или графический интерфейс на стороне клиента). сценарии). Таким образом, основные библиотеки будут профилированы и оптимизированы несколько раз. Как вы можете догадаться, все это требует времени, поэтому «полностью проанализированный/оптимизированный» билд занял ДОЛГОЕ время.
Я надеюсь, что это было полезно.
P.S. Этот вопрос напомнил мне о проблемах перебазирования 32-разрядной DLL.
person
yzorg
schedule
07.06.2012