Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Interactive analysis #391

Merged
merged 500 commits into from
Aug 12, 2022
Merged

Interactive analysis #391

merged 500 commits into from
Aug 12, 2022

Conversation

sim642
Copy link
Member

@sim642 sim642 commented Oct 13, 2021

This draft PR serves as a place to list the changes on the interactive branch, which have been combined there for better experimentation.

Changes

  1. Incremental TD3: restart destabilized side-effected variables #363
  2. (Incremental) TD3: restart detected wpoints #366
  3. Incremental postsolve in TD3 #372
  4. Refactor race warnings (accesses) to use global invariant #397
  5. TD3: optimize destabilization by aborting transfer function when unchanged #364 Reverted, because not used for interactive paper and modifies TD3 too much.
  6. Use nodes for messages instead of locations #533
  7. Use global invariant for dead branch detection #525
  8. Collect constraint unknown sets in global invariant, use them for TD3 incremental load #549
  9. Add option for manual restarting of globals #573
  10. Incremental analysis: Eagerly analyze functions in force-reanalyze, even when reluctant is on #600
  11. Fix unnecessary initial double parsing in server mode with reparse #625
  12. Incremental TD3: optimize write-only unknown restarting #634
  13. Exclude functions with changed header from reluctant destabilization #663
  14. Fix incremental warnings with reluctant destabilization #709
  15. Incremental: (Cheap!) Full Reachability to Prune  #713
  16. Minimal write-only restarting is insufficient: add ana.malloc.include-node #647 (parts cherry-picked)
  17. Interactive: fix expression locations #717
  18. Option to only destabilize access globals (instead of following all side-effects) after re-setting them to bottom #721
  19. Rename incremental.reluctant.onincremental.reluctant.enabled for consistency.
  20. Interactive: improvements for chrony story #724
  21. Interactive: improvements for smtprc story #729
  22. Incremental TD3: limit side-effected restarting using fuel #629
  23. Add server command pre_files #740

TODO

@sim642 sim642 self-assigned this Aug 3, 2022
sim642 added 2 commits August 4, 2022 12:46
This simplifies the should_restart logic and makes the combination of both "only" options unrepresentable.
@sim642 sim642 marked this pull request as ready for review August 4, 2022 11:18
@sim642
Copy link
Member Author

sim642 commented Aug 5, 2022

For good measure, I did a sv-benchmarks comparison run with this entire PR: results. Luckily all these additions to the solver and analyses to track extra information (which we theoretically could disable for batch analysis if we're careful) don't come with a notable penalty. Most of the comparison plot is just noise around the ECA tasks.

Copy link
Member

@jerhard jerhard left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good!

I only had some remarks about some test files.

@jerhard
Copy link
Member

jerhard commented Aug 11, 2022

I let goblint in the current master and the interactive version run on sqlite.

Goblint Command line
./goblint ../../benchmarks/sqlite-amalgamation-3370200/sqlite3.c ../../benchmarks/sqlite-amalgamation-3370200/sqlite3.h ../../benchmarks/sqlite-amalga
mation-3370200/sqlite3ext.h ../../benchmarks/sqlite-amalgamation-3370200/shell.c -v --set pre.cppflags[+] -DSQLITE_DEBUG --disable ana.base.context.non-ptr --disable ana.int.def_exc --disable sem.unknown_functio
n.spawn --set ana.thread.domain plain --enable exp.earlyglobs --set ana.base.privatization none --set pre.cppflags[+] -DGOBLINT_NO_BSEARCH --set pre.cppflags[+] -DGOBLINT_NO_ASSERT --set result json-messages --s
et ana.activated "['base', 'mallocWrapper']" --set ana.ctx_insens[+] base --set ana.ctx_insens[+] mallocWrapper

The runtime of the master version was 444 minutes, compared to the interactive version with a runtime of 461 minutes. The interactive version is thus 3,8% slower on this benchmark. I think that this is should not be a blocker from merging it.

@sim642
Copy link
Member Author

sim642 commented Aug 11, 2022

@michael-schwarz Do you also wish to go over this monster PR once more or can I pull the trigger?

@michael-schwarz
Copy link
Member

No, I think it's fine! Feel free to merge!

@sim642 sim642 merged commit fa83790 into master Aug 12, 2022
sim642 added a commit that referenced this pull request Aug 12, 2022
sim642 added a commit to sim642/opam-repository that referenced this pull request Aug 18, 2022
CHANGES:

Goblint "lean" release after a lot of cleanup.

* Remove unmaintained analyses: OSEK, ARINC, shapes, containment, deadlocksByRaces (goblint/analyzer#460, goblint/analyzer#736, goblint/analyzer#812, goblint/analyzer#474).
* Add interactive analysis (goblint/analyzer#391).
* Add server mode (goblint/analyzer#522).
* Add Compilation Database support (goblint/analyzer#406, goblint/analyzer#448).
* Add floating point domain, unrolled array domain and improved struct domains (goblint/analyzer#734, goblint/analyzer#761, goblint/analyzer#577, goblint/analyzer#419).
* Add static loop unrolling and heap variable unrolling (goblint/analyzer#563, goblint/analyzer#722).
* Improve race detection with may-happen-in-parallel analysis (goblint/analyzer#529, goblint/analyzer#518, goblint/analyzer#595).
* Reimplement lockset and deadlock analyses (goblint/analyzer#659, goblint/analyzer#662, goblint/analyzer#650, goblint/analyzer#655).
* Add pthread extraction to Promela (goblint/analyzer#220).
* Add location spans to output (goblint/analyzer#428, goblint/analyzer#449).
* Improve race reporting (goblint/analyzer#550, goblint/analyzer#551).
* Improve dead code reporting (goblint/analyzer#94, goblint/analyzer#353, goblint/analyzer#785).
* Refactor warnings (goblint/analyzer#55, goblint/analyzer#783).
* Add JSON schema for configuration (goblint/analyzer#476, goblint/analyzer#499).
* Refactor option names (goblint/analyzer#28, goblint/analyzer#192, goblint/analyzer#516, goblint/analyzer#675).
* Add bash completion (goblint/analyzer#669).
* Add OCaml 4.13 and 4.14 support, remove OCaml 4.09 support (goblint/analyzer#503, goblint/analyzer#672).
sim642 added a commit to sim642/opam-repository that referenced this pull request Aug 18, 2022
CHANGES:

Goblint "lean" release after a lot of cleanup.

* Remove unmaintained analyses: OSEK, ARINC, shapes, containment, deadlocksByRaces (goblint/analyzer#460, goblint/analyzer#736, goblint/analyzer#812, goblint/analyzer#474).
* Add interactive analysis (goblint/analyzer#391).
* Add server mode (goblint/analyzer#522).
* Add Compilation Database support (goblint/analyzer#406, goblint/analyzer#448).
* Add floating point domain, unrolled array domain and improved struct domains (goblint/analyzer#734, goblint/analyzer#761, goblint/analyzer#577, goblint/analyzer#419).
* Add static loop unrolling and heap variable unrolling (goblint/analyzer#563, goblint/analyzer#722).
* Improve race detection with may-happen-in-parallel analysis (goblint/analyzer#529, goblint/analyzer#518, goblint/analyzer#595).
* Reimplement lockset and deadlock analyses (goblint/analyzer#659, goblint/analyzer#662, goblint/analyzer#650, goblint/analyzer#655).
* Add pthread extraction to Promela (goblint/analyzer#220).
* Add location spans to output (goblint/analyzer#428, goblint/analyzer#449).
* Improve race reporting (goblint/analyzer#550, goblint/analyzer#551).
* Improve dead code reporting (goblint/analyzer#94, goblint/analyzer#353, goblint/analyzer#785).
* Refactor warnings (goblint/analyzer#55, goblint/analyzer#783).
* Add JSON schema for configuration (goblint/analyzer#476, goblint/analyzer#499).
* Refactor option names (goblint/analyzer#28, goblint/analyzer#192, goblint/analyzer#516, goblint/analyzer#675).
* Add bash completion (goblint/analyzer#669).
* Add OCaml 4.13 and 4.14 support, remove OCaml 4.09 support (goblint/analyzer#503, goblint/analyzer#672).
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants