dmpots wrote:

I looked into why this test (and TestGdbRemoteFork.py) is so slow. Turns out 
its nothing related to lldb itself, but the build step that occurs as part of 
the test.

These tests methods pretty much  all call to `build()` (directly or indirectly) 
https://github.com/llvm/llvm-project/blob/ca1833b91e45595a3728e90b3714566588c8abae/lldb/test/API/tools/lldb-server/TestLldbGdbServer.py#L59

to build the test lldb-server
https://github.com/llvm/llvm-project/blob/main/lldb/test/API/tools/lldb-server/main.cpp

And it takes about 20s to compile this file with a debug build! So each test is 
running for at least 20s. The actual test part (after the build) seems to 
usually be quite fast (< 1s).

The tests use the just-built clang to compile the file. Looking at the output 
from `-ftime-passes` most of this time is in the clang front end.

```
  Total Execution Time: 20.7652 seconds (20.7634 wall clock)

   ---User Time---   --System Time--   --User+System--   ---Wall Time---  --- 
Name ---
  18.0725 ( 88.1%)   0.1921 ( 73.6%)  18.2646 ( 88.0%)  18.2628 ( 88.0%)  Front 
end
   1.1838 (  5.8%)   0.0538 ( 20.6%)   1.2376 (  6.0%)   1.2377 (  6.0%)  
Machine code generation
   1.1807 (  5.8%)   0.0141 (  5.4%)   1.1948 (  5.8%)   1.1946 (  5.8%)  LLVM 
IR generation
   0.0671 (  0.3%)   0.0010 (  0.4%)   0.0682 (  0.3%)   0.0682 (  0.3%)  
Optimizer
  20.5041 (100.0%)   0.2611 (100.0%)  20.7652 (100.0%)  20.7634 (100.0%)  Total
```

Looking at the build() implementation, it looks like it builds a separate 
binary for each `test_` method even though those seem to the same binary.

`build()` will call `getBuildDirBasename()` to get the output directory
https://github.com/llvm/llvm-project/blob/96f369791d6c146ccadb03e7f9d6b1be37990425/lldb/packages/Python/lldbsuite/test/lldbtest.py#L1498

which is defined so that the test to include name as part of the path
https://github.com/llvm/llvm-project/blob/96f369791d6c146ccadb03e7f9d6b1be37990425/lldb/packages/Python/lldbsuite/test/lldbtest.py#L726C9-L726C69


Any suggestions on how to improve this? It seems like we could maybe share the 
built executable amongst all tests  in the file, but the test framework does 
put them into separate per-test locations.



https://github.com/llvm/llvm-project/pull/129614
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to