gccwindows-updatecodesourcery

gcc compilation time increased due to a windows update


My team is using arm-none-eabi-gcc.exe (Sourcery CodeBench Lite 2012.09-63) 4.7.2 to compile C++ from within Visual Studio 2013.

My colleagues recently upgraded their machines.

Old PCs:

  1. Windows 7 x64
  2. 16GB DDR3
  3. Intel 3770K
  4. SSD

New PCs:

  1. Windows 10 x64
  2. 16GB DDR4
  3. Intel 7700k
  4. SSD

The compile time for the exact same set of 96 files is:

Old: 60 secs
New: 104 secs

Compilation became slower despite faster CPU and faster memory.

I've observed this on several colleagues' computers.

At this point, you'd think it's a hardware issue except for the following: I had the new PC configuration since Sep-2017 and all of a sudden, without any hardware changes, I noticed that in Oct/Nov-2017 my compilation speed drastically slowed.

Therefore, I think it's a windows update that caused this issue.

QUESTION

How can I definitively deduce the cause for this slowdown?

CLARIFICATION #1

I don't mean that my compilation slows DURING a Windows Update. I mean that some windows update that occurred in the past causes my compilation to slow down.

UPDATE #1

I am using a blank .cpp file and compiling it 100 times and I'm still seeing the exact same time differences between Windows 7 PC and Windows 10.

I'm 99% sure it's a "bug" in gcc for windows. I installed gcc from the ARM website and I see the same issue.

However, when I use cl.exe to compile a blank file 100 times, it only takes 5 secs the same as gcc on Windows 7 and on older Windows 10 (Oct/Nov-ish)

My test script is:

set GCC_EXE="C:\Program Files (x86)\GNU Tools ARM Embedded\7 2017-q4-major\bin\arm-none-eabi-gcc.exe"
set startTime=%time%
echo off
%GCC_EXE% -c "empty.cpp" -o ".\empty.obj"
%GCC_EXE% -c "empty.cpp" -o ".\empty.obj"
%GCC_EXE% -c "empty.cpp" -o ".\empty.obj"
...

Solution

  • Windows Defender scans the GCC binaries repeatedly during the build.

    Disabling "Real time protection" solves the problem.

    Also, adding the folder, where the executable resides, to Exclusion list works.