Our traces tend to have a lot of threads and generate large call stacks. The CallGraphAnalysis is taking a bit longer to run that I would prefer, so I've done some very preliminary profiling. Looks like almost all of the time is spent querying the state system:
I have some options in mind, but before diving into anything, I thought I would get insight from this group about what is likely going to be the best approach. Some ideas for your consideration:
1. Could the CallGraphAnalysis state be written out to file instead of rebuilding it each time?
2. It is currently single threaded. What is the concurrency policy for StateSystem? If more worker threads were used, what is the likelihood of speeding this up vs. just having a lot of contention on the back end? Are the StateSystems thread safe?
3. What is the indexing strategy, if any, and could that be improved for the kinds of queries issued by the CallGraphAnalysis?
I think these are roughly in the order of easiest to hardest. There are probably other options as well. Doing 1 at a minimum seems not too bad. Thoughts?