-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Poor performance on real-world codebase #30
Comments
For the record, I am now following the example of |
Yeah, this is a known issue, and honestly one of the reasons my work on this fizzled out before I left Microsoft—I found it hard to iterate on the project when it was so slow on a nontrivial codebase, and not obvious to me how to fix that. The performance issues were rooted primarily in |
Hey, I kind of got distracted for a while, but one of the last things that I pushed to Lines 74 to 76 in 05b02cf
There are a few other places in Graph.hs that use Data.Generics that could use some deepseq .
That ought to help with the memory usage if I interpreted the profiler output correctly. In terms of time - i'm sure there's some low-hanging fruit in terms of the data representation, but after that we'll probably need to get smarter about the order in which we recompute the permissions on each iteration. Unfortunately I couldn't get tests to pass when I tried rewriting the algorithm as a classic dataflow analysis, so I don't have a good grasp on how to reason about possible transformations. |
Thanks for adding a note to the readme, @evincarofautumn! |
That's interesting. For analyzing Mono, I saw the C parser + callmap generator taking a lot of time and memory, but the analysis run (parsing all the callmap files and running the global analysis) was relatively speedy. |
Well, to be clear I was profiling |
I was looking into using Ward to lint GHC's runtime system, starting with simple lock checking. Unfortunately even with only no privileges defined and enabling enforcement for a single file the check runs for more than 10 minutes before sending my laptop with 32GB of RAM into swap-death. This seems a bit high for a 50kLoC codebase.
Checking each source file individually typically takes around 30 seconds per file. Is this the recommended strategy for non-small projects?
The text was updated successfully, but these errors were encountered: