Skip to content

Performance Tweaks#195

Merged
tmbrbr merged 2 commits into
SAP:mainfrom
leeN:performance_tweaks
Jan 31, 2024
Merged

Performance Tweaks#195
tmbrbr merged 2 commits into
SAP:mainfrom
leeN:performance_tweaks

Conversation

@leeN

@leeN leeN commented Jan 29, 2024

Copy link
Copy Markdown
Collaborator

After a bit of profiling, I noticed that creating TaintOperations is very expensive. In hindsight, this is obvious, as we have to walk the stack to get the location, etc.
We did, however, create a lot of TaintOperation objects without ever using them, i.e., due to the string itself being untainted.

This change does add explicit checks where possible (in some cases, we create the TaintOperation object in advance due to GC issues; this is not easily hidden behind a check), so TaintOperations are only created if the string is actually tainted, i.e., we use the TaintOperation to extend the TaintFlow.

I tested this on Ares6, and with the proposed changes, the average runtime goes from 70.04ms to 66.9ms, mainly due to differences in the ML benchmark.

After a bit of profiling I noticed that creating TaintOperations is very
expensive. In hindsight this is obvious, as we have to walk the stack
to get the location etc.
We did however create a lot of TaintOperation objects without ever using
them, i.e., due to the string itself being untainted.

This change does add explicit checks where possible (in some cases we
create the TaintOperation object in advance due to GC issues, this is
not easily hidden behind a check) so TaintOperations are only created if
the string is actually tainted, i.e., we use the TaintOperation to
extend the TaintFlow.
@tmbrbr tmbrbr self-requested a review January 29, 2024 11:15
@tmbrbr

tmbrbr commented Jan 30, 2024

Copy link
Copy Markdown
Contributor

Hi @leeN, there are two failing tests, could you take a look at them please?

@leeN

leeN commented Jan 30, 2024

Copy link
Copy Markdown
Collaborator Author

Ah, yes, sorry, I already had a look there and will fix them tomorrow. They used to fail with foxhound in the past, so we changed them to make them pass. This PR unbreaks them again. :)

These tests used to be broken in Foxhound and were fixed in SAP#151.

This fix was intended to mask the fact that these tests were picking up
and failing due to foxhound induced side effects on untainted strings.

As we call toString() on objects during TaintOperation creation, the
usage of Foxhound can have visible side effects. This is shown here as
these tests count how often toString() is called on an object.

Now, in this branch we do not create any TaintOperation objects for
these specific cases of untainted strings anymore. Consequently, the
tests are now passing in their original form.
@leeN

leeN commented Jan 30, 2024

Copy link
Copy Markdown
Collaborator Author

Fixed.

Comment thread js/src/builtin/String.cpp
@tmbrbr tmbrbr merged commit add289e into SAP:main Jan 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants