[all-commits] [llvm/llvm-project] 39ed3c: [clang-scan-deps] Fix contention when updating `Tr...

Alexandre Ganea via All-commits all-commits at lists.llvm.org
Thu Apr 25 07:32:07 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 39ed3c68e51f1b04fe2890db9006ae1b176b1582
      https://github.com/llvm/llvm-project/commit/39ed3c68e51f1b04fe2890db9006ae1b176b1582
  Author: Alexandre Ganea <37383324+aganea at users.noreply.github.com>
  Date:   2024-04-25 (Thu, 25 Apr 2024)

  Changed paths:
    M clang/include/clang/Basic/FileManager.h
    M clang/lib/Basic/FileManager.cpp
    M clang/lib/Frontend/CompilerInstance.cpp
    M clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp

  Log Message:
  -----------
  [clang-scan-deps] Fix contention when updating `TrackingStatistic`s in hot code paths in `FileManager`. (#88427)

`FileManager::getDirectoryRef()` and `FileManager::getFileRef()` are hot code paths in `clang-scan-deps`. These functions are updating on every call a few atomics related to printing statistics, which causes contention on high core count machines.

![Screenshot 2024-04-10
214123](https://github.com/llvm/llvm-project/assets/37383324/5756b1bc-cab5-4612-8769-ee7e03a66479)

![Screenshot 2024-04-10
214246](https://github.com/llvm/llvm-project/assets/37383324/3d560e89-61c7-4fb9-9330-f9e660e8fc8b)

![Screenshot 2024-04-10
214315](https://github.com/llvm/llvm-project/assets/37383324/006341fc-49d4-4720-a348-7af435c21b17)

After this patch we make the variables local to the `FileManager`.

In our test case, this saves about 49 sec over 1 min 47 sec of `clang-scan-deps` run time (1 min 47 sec before, 58 sec after). These figures are after applying my suggestion in https://github.com/llvm/llvm-project/pull/88152#issuecomment-2049803229, that is:
```
static bool shouldCacheStatFailures(StringRef Filename) {
  return true;
}
```
Without the above, there's just too much OS noise from the high volume of `status()` calls with regular non-modules C++ code. Tested on Windows with clang-cl.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list