Ускорение крайне медленной компиляции / компоновки MinGW-w64? - PullRequest
1 голос
/ 15 марта 2019

Как я могу ускорить MinGW-w64 чрезвычайно медленная компиляция / компоновка C ++?

Компиляция тривиальной программы "Hello World":

#include <iostream>
int main()
{
    std::cout << "hello world" << std::endl;
}

... занимает 3 минуты (!) В этом незагруженном окне Windows 10 ( i7-6700 , 32 ГБ ОЗУ, приличный SATA SSD):

> ptime.exe g++ main.cpp

ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net>

===  g++ main.cpp ===

Execution time: 180.488 s

Process Explorer показывает g++ дерево процессов, находящееся внизу в ld.exe, которое не использует сколько-нибудь заметный ЦП или ввод / вывод в течение продолжительности.

Запуск дерева процессов g++ через API Monitor показывает, что в ld.exe есть три необычно длинных системных вызова: два NtCreateFile() с и NtOpenFile(), каждый из которых работает на a.exe и принимает 60 секунд за штуку.

Замедление происходит только при использовании вывода по умолчанию a.exe; g++ -o foo.exe main.cpp занимает 2 секунды, вершины.

"Ну, тогда не используйте a.exe в качестве выходного имени!" на самом деле не является решением, так как это приводит к тому, что CMake требует определения функций компилятора годами.

Версии набора инструментов GCC:

>g++ --version
g++ (x86_64-posix-seh-rev0, Built by MinGW-W64 project) 8.1.0

>ld --version
GNU ld (GNU Binutils) 2.30

1 Ответ

1 голос
/ 15 марта 2019

Учитывая, что я не мог воспроизвести проблему в чистой виртуальной машине Windows 10, а зависимость от выходного имени файла привела меня на путь антивирусного / вредоносного вмешательства.

fltmc instances перечислены несколько возможных драйверов фильтра файловой системы; угадай-н-чек сузил его до двух из сажи : carbonblackk & ParityDriver.

Использование Regedit для их отключения путем установки Start в 0x4 («Отключено», 0x2 == Автоматически, 0x3 == Вручную) в этих двух ключах реестра с последующей перезагрузкой исправило медлительность:

  • HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ carbonblackk
  • HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ ParityDriver
...