That's a great catch! Indeed the key should be based on the outer language
mode, can you file a bug?

On Sat, Feb 26, 2022 at 1:07 AM '[email protected]' via v8-dev <
[email protected]> wrote:

> I think I've figured out the problem and it should be simple to fix. When
> streaming, V8 checks the isolate script cache table based on the
> task->language_mode(), which may be the outer language mode of the
> compilation task if it hasn't finished yet. However, V8 then inserts the
> result into the table based on task->language_mode() again, which at that
> point is the language mode deduced from the script content. If the task was
> started in sloppy mode but the script says 'use strict', then the script
> gets stored in the table with a wrong key. I assume the key in both cases
> should be based on the outer language mode, not the text content of the
> script (which is already checked to match).
>
> On Wednesday, February 23, 2022 at 2:22:20 PM UTC-8
> [email protected] wrote:
>
>> Excellent, thanks for the useful information! I tried the scenario again
>> with --js-flags=--no-isolate-script-cache-ageing and still see a bunch of
>> duplicated BytecodeArrays in a heap snapshot, so something else must be
>> preventing this script from using the Isolate script cache. I'll continue
>> investigating; thanks again for pointing me in the right direction.
>>
>> On Wednesday, February 23, 2022 at 12:03:39 AM UTC-8 [email protected]
>> wrote:
>>
>>> On Wed, Feb 23, 2022 at 1:26 AM '[email protected]' via v8-dev <
>>> [email protected]> wrote:
>>>
>>>> Hello all,
>>>>
>>>> An idea came up recently which I imagine some of you have probably
>>>> already considered at some point, so I'd love to hear any thoughts you
>>>> have, or summaries of past discussions you'd be willing to share. Or if
>>>> this idea is fundamentally infeasible, I'd love to hear that too.
>>>>
>>>> The scenario: we've been investigating a case where many open tabs all
>>>> embed the same cross-site iframe, and all of those iframes get put into the
>>>> same process due to the heuristics described in 899838 - Improve
>>>> process reuse policies - chromium
>>>> <https://bugs.chromium.org/p/chromium/issues/detail?id=899838>.
>>>> Ignoring for the moment whether those heuristics are optimal, the result is
>>>> a single Isolate with many NativeContexts, where each NativeContext loads
>>>> mostly the same scripts.
>>>>
>>>> The idea: could V8 share bytecode and/or Sparkplug code for functions
>>>> in those scripts? I know that TurboFan code is native context dependent,
>>>> but as far as I know, both bytecode and Sparkplug code are native context
>>>> independent. If V8 could avoid generating duplicates, then this scenario
>>>> would use substantially less memory, plus tabs after the first wouldn't
>>>> have to wait on tiering up to Sparkplug.
>>>>
>>>
>>> I think this already happens, at least to some extent.
>>> SharedFunctionInfos are shared between native contexts through the
>>> compilation cache
>>> <https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/compilation-cache-table.h;l=90;drc=a2d4701bea545269ad3f5fe6e111adb65c46b8da>,
>>> and bytecode/baseline code hangs off the SFI
>>> <https://source.chromium.org/chromium/chromium/src/+/main:v8/src/objects/shared-function-info.h;l=340;drc=a2d4701bea545269ad3f5fe6e111adb65c46b8da>.
>>> It's not 100% reliable since the cache is aged. Is the cache not hit in
>>> your scenario?
>>>
>>>
>>>>
>>>> Thanks,
>>>> Seth
>>>>
>>>> --
>>>> --
>>>> v8-dev mailing list
>>>> [email protected]
>>>> http://groups.google.com/group/v8-dev
>>>> ---
>>>> You received this message because you are subscribed to the Google
>>>> Groups "v8-dev" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/v8-dev/bbeb2a47-a26c-4623-81a5-7cad2c0dfec1n%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/v8-dev/bbeb2a47-a26c-4623-81a5-7cad2c0dfec1n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
> --
> v8-dev mailing list
> [email protected]
> http://groups.google.com/group/v8-dev
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/v8-dev/21626811-c09d-43bf-a5aa-733aa7a6bfcan%40googlegroups.com
> <https://groups.google.com/d/msgid/v8-dev/21626811-c09d-43bf-a5aa-733aa7a6bfcan%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
-- 
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/v8-dev/CAGRskv89a5q5UcdvGZP0f7OubgrJNdzFZcfwXQzjNK%2BCJXs0%3DQ%40mail.gmail.com.

Reply via email to