Uh oh!
There was an error while loading. Please reload this page.
DataFlow: Support stateless isSink in StateConfigSigs - #13851
Conversation
a43823c to
f3e3dacCompareUh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
aschackmull
left a comment
There was a problem hiding this comment.
This is going to need some changes.
f3e3dac to
8399d4fCompare8399d4f to
d755b39Compared755b39 to
3007fdaCompareMathiasVP
commented
Aug 2, 2023
@aschackmull I've rebased the PR now that #13863 has been merged (🎉). |
Hmmm @aschackmull I think adding the additional conjuncts to |
| private predicate relevantState(FlowState state) { | ||
| sourceNode(_, state) or | ||
| sinkNode(_, state) or | ||
| sinkNodeWithState(_, state) or |
There was a problem hiding this comment.
We can make another predicate to do a best-effort cartesian approximation for the reverse flow exploration case - this doesn't have to be extremely performant as it's just a debugging tool that'll often be restricted to specific sources/sinks anyway.
Add the following just below the relevantState predicate:
private predicate revSinkNode(NodeEx node, FlowState state) {
sinkNodeWithState(node, state)
or
Config::isSink(node.asNode()) and
relevantState(state) and
not fullBarrier(node) and
not stateBarrier(node, state)
}
and use it in the two places below.
There was a problem hiding this comment.
That makes sense. Thanks! Fixed in 981f675.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Co-authored-by: Anders Schack-Mulligen <aschackmull@users.noreply.github.com>
Uh oh!
There was an error while loading. Please reload this page.
Co-authored-by: Anders Schack-Mulligen <aschackmull@users.noreply.github.com>
MathiasVP
commented
Aug 4, 2023
Hm, it looks like Java's DCA run isn't super happy about these changes. I'll investigate! |
aschackmull
commented
Aug 4, 2023
It might very well be unrelated to this PR - I think we're seeing a lot of OOM kills in DCA at the moment for other reasons. |
MathiasVP
commented
Aug 4, 2023
Ah, thanks for the heads up. Stage timings also seem to blame a bunch of non-dataflow related queries so it's probably a fluke. In any case, I've started a separate run for Java, and I'll do a couple of local evaluations to make sure there's nothing wrong |
MathiasVP
commented
Aug 4, 2023
FWIW, none of the projects that reported a slowdown on DCA seems to be slowing down locally. |
MathiasVP
commented
Aug 4, 2023
Java has a bunch of OOMs, but this PR doesn't seem to contribute to any more of those OOMs. And since Java (nor any other language) isn't actually using this new feature yet this doesn't seem like it should block this PR. I've also verified that no bad joins are introduced. |
Sometimes it's necessary to have a state-based configuration to define the correct
isBarrier, but if data then does manage to reach a sink, any state should be accepted. Prior to this PR, the only way to prevent a cartesian product would be to do something like:because there was no
isSink/1onStateConfigSig. With this PR we can now do:with no
PruningFlowmess.cc @aschackmull I hope this isn't too controversial?