FYI, we're going to run some other experiments to see how to improve performance here.

(And we'll send a new I2S after that, rather than revive this thread.)

Thanks everyone.

On 2/2/22 1:05 PM, 'Matt Menke' via blink-dev wrote:
Thanks for the feedback!  Responses inline.

On Wed, Feb 2, 2022 at 12:03 PM Alex Russell <[email protected]> wrote:

    A 0.5%-5% regression on FCP is massive, particularly if this is at
    the median. Are y'all able to publish more data about the
    histograms these numbers came from?


A 0.5% for main frames is similar to what we saw on HTTP cache partitioning, not sure about cross-site iframes.  Look at the latest metrics, 0.7% for main frames is probably a more accurate summary.

The metrics in question specifically are PageLoad.PaintTiming.NavigationToFirstContentfulPaint and PageLoad.Clients.ThirdParty.Frames.NavigationToFirstContentfulPaint3.

We have details about percentiles and platforms, though I'm not quite sure how useful those are.  For general frame loads, the greatest regressions are on slower page loads. For iframes, the largest regression is at the 50th percentile and below of page loads, with the regression dropping to around 1% at the 99th percentile of load times. Regressions are similar across platforms, though Android seems to see the greatest regression for general frame loads.

I'm unaware of any histograms that would let us better delve into what sorts of cases the regressions affect most.

    Thanks.

    On Wednesday, February 2, 2022 at 1:25:41 AM UTC-8 Yoav Weiss wrote:

        Thanks for working on this important partitioning!

        On Tue, Feb 1, 2022 at 7:01 PM 'Matt Menke' via blink-dev
        <[email protected]> wrote:


                    Contact emails

            [email protected]


                    Explainer

            
https://github.com/MattMenke2/Explainer---Partition-Network-State/blob/main/README.md
            
<https://github.com/MattMenke2/Explainer---Partition-Network-State/blob/main/README.md>


                    Specification

            https://fetch.spec.whatwg.org/#connections
            <https://fetch.spec.whatwg.org/#connections>


                    Summary

            Partition network state by the network partition key
            (which consists of top frame site and frame site), to
            protect against cross-site tracking through the use of
            side channels.  "Network State" here includes connections
            (H1, H2, H3, websocket), the DNS cache, ALPN/H2 support
            data, TLS/H3 resumption information, Reporting/NEL
            configuration and uploads, and Expect-CT information.


            Unpartitioned network state allows for side-channel timing
            attacks, where one site can figure out if another has been
            visited recently. For example, if the connection is made
            quickly, it may be assumed that the socket was warm. It
            also allows for third parties to track users across first
            party contexts they are loaded in using a variety of
            techniques (tracking socket reuse, using per-user
            alternative service advertisements, etc).


            Partitioning storage may reduce Chromium’s ability to
            reuse network resources.  We’ve enabled network state
            partitioning in a 5% experiment on Stable.  It slows time
            to first contentful paint by about 0.5%, and slows
            cross-site iframe time to first contentful paint by about
            5%.  These are very rough averages that vary across
            platforms and users.


        Can't say that I'm excited about a 5% slowdown here..
        Have y'all worked with the webperf community to try and find
        mitigations to that? (e.g. adding preconnects for resources
        that typically already had warm connections)


I'm unaware of any process for this.  We can't allow arbitrary preconnects for cross-site navs, since they potentially leak information, though I believe another team is looking / has looked into fancier cross-site prefetch (which may allow only the root document to be prefetched, though doesn't allow connection reuse).  Also worth noting that Chrome throws away never used sockets after 10 seconds, since sites tend to close unused sockets quickly, which would also make cross-site preconnects potentially less useful, unless they happen exactly at the time navigation starts.

Preconnects for cross-site iframes seems potentially more viable, since the concerns there are largely around cross-site attacks, so leaking data due to preconnects are less a use privacy concern, and, to the extent of my knowledge, are less useful for spying on cross-site iframes as well.

        Any research on the implications in other browsers that we
        could use as developer advice? Have y'all looked at the
        implications on overall LCP?


I'm unaware of any research here.  We have not looked into the implications of lower LCP here, though I imagine they're similar to those of cache partitioning.

        Any developer facing documentation on this change and what
        they should do about it?


The fetch spec covers keying on main frame site (and also allows for additional keys).  We're also talking to devrel, though I'm unfamiliar with any developer-targeted documentation that we maintain, apart from web standards documentation.

            
Explainer:https://github.com/MattMenke2/Explainer---Partition-Network-State/blob/main/README.md
            
<https://github.com/MattMenke2/Explainer---Partition-Network-State/blob/main/README.md>



                    Blink component

            Internals>Network
            
<https://bugs.chromium.org/p/chromium/issues/list?q=component:Internals%3ENetwork>


                    TAG review

            https://github.com/w3ctag/design-reviews/issues/596
            <https://github.com/w3ctag/design-reviews/issues/596>


                    TAG review status

            Issues addressed


                    Risks



                    Interoperability and Compatibility

            This proposal partitions the DNS cache and connections,
            which could result in longer load times when previously
            reusable resources can no longer be reused.  The
            performance impact will likely be most visible in
            cross-site iframes.


            Chromium's implementation partitions state by (top-level
            site, innermost frame site), unlike the implementation
            shipped by other browser vendors, which just uses
            top-level site.


            This will also potentially increase the number of
            connections made to sites, both because connections can't
            be reused as often, and because Chromium is less likely to
            know in advance if H2 or H3 can be used with a site.  When
            that isn't known, up to six connections are created to a
            site, instead of one or two.


        This has DDoS potential. Any reports on heavier server load
        from the 5% experiment? How are you planning to roll this out?


We have received no reports of heavier server load, but it's not entirely clear we'd learn of it if it were an issue.  Note that this does not increase number of HTTP requests, but rather number of established connections (with SSL negotiated), though of course, those aren't free from either the perspective of the server or the client (it can also increase number of DNS requests, though those should typically cached by upstream resolvers).

The plan is to slowly ramp this up to 100% over the course of a month.  Ramp it up to 10%, monitor for two weeks.  If all goes well ramp, it up to 50%, monitor for two more weeks, and then ramp it up to 100%.

        Is there a way for us to "remember" the H2/H3 state without it
        being a vector for re-leaking the information we're trying to
        hide from content?


We do still remember H2/H3 information, but it's sharded by site (e.g., in the contexts of https://*a.com <http://a.com>, we know that HTTPS requests to https://*b.com <http://b.com> can be sent to unique-user-id.tracker.com <http://unique-user-id.tracker.com> via H3).  Since H3 remembers much more than just a boolean, even remembering a single H3 server across sites is basically equivalent to a 3P cookie, unless we rework how H3 advertisements works, or have some central repository where we can validate that H3 information is not user identifying, which would be a rather major undertaking.

That having been said, DNS HTTPS records do, in fact, rework how H3 (and H2) advertisements works, with browsers learning that information directly from DNS results, and that should hopefully help here, at least.  Other members of the Chromium team are actively working on wiring this up. This does add a new DNS request type, which is a pretty major change, so I'm not sure how long it will take from implementation to deployment.

            NEL, Reporting, and Expect-CT: Report-To headers tell
            Chromium how and when to inform a site of certain errors. 
            Partitioning this information means that Chromium
            potentially won't know where to report errors,
            particularly the first time it issues a request to a site
            in a particular context.  The latest version of the
            Reporting API (Reporting V1, to replace Reporting V0) is
            scoped to frames, anyways, so is already subject to a more
            restrictive limitation.


            None of these changes is expected to visibly break sites.



            Gecko: Shipped/Shipping
            (https://bugzilla.mozilla.org/show_bug.cgi?id=1590107
            <https://bugzilla.mozilla.org/show_bug.cgi?id=1590107>)


            WebKit: Shipped/Shipping
            
(https://webkit.org/status/#?search=client-side%20storage%20partitioning
            
<https://webkit.org/status/#?search=client-side%20storage%20partitioning>)


            Web developers: No signals


        Have we asked?


I hadn't realized there was a process here.  I'll look into starting that.

            Other signals:


                    Ergonomics

            The only risk here is decreased performance, particularly
            in cross-site iframes.



                    Debuggability

            DevTools won't display the network partition key, but will
            continue to display the results of network requests
            accurately.



                    Is this feature fully tested by web-platform-tests
                    
<https://chromium.googlesource.com/chromium/src/+/master/docs/testing/web_platform_tests.md>?

            No, though it does have partial coverage.
            web-platform-tests can't test some features like, e.g.,
            DNS cache partitioning.


                    Flag name

            SplitHostCacheByNetworkIsolationKey,
            PartitionConnectionsByNetworkIsolationKey,
            PartitionHttpServerPropertiesByNetworkIsolationKey,
            PartitionSSLSessionsByNetworkIsolationKey,
            PartitionExpectCTStateByNetworkIsolationKey,
            PartitionNelAndReportingByNetworkIsolationKey


                    Requires code in //chrome?

            False


                    Tracking bug

            https://crbug.com/993801 <https://crbug.com/993801>


                    Launch bug

            https://crbug.com/1166303 <https://crbug.com/1166303>


                    Estimated milestones

            Plan to roll out in M97/M98 over the course of February



                    Link to entry on the Chrome Platform Status

            https://chromestatus.com/feature/6713488334389248
            <https://chromestatus.com/feature/6713488334389248>


                    Links to previous Intent discussions

            Intent to prototype:
            
https://groups.google.com/a/chromium.org/g/blink-dev/c/6KKXv1PqPZ0/m/nm2z5I_MBAAJ
            
<https://groups.google.com/a/chromium.org/g/blink-dev/c/6KKXv1PqPZ0/m/nm2z5I_MBAAJ>
            Intent to Extend Experiment:
            
https://groups.google.com/a/chromium.org/g/blink-dev/c/sLC_W6B8big/m/5sk787RQBAAJ

-- You received this message because you are subscribed to
            the Google Groups "blink-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/a/chromium.org/d/msgid/blink-dev/CAEK7mvrYvoXcc%2B28rFrHbb1tEJN6HPf1y%3DHdE%2BcGe3tuJwsAnA%40mail.gmail.com
            
<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAEK7mvrYvoXcc%2B28rFrHbb1tEJN6HPf1y%3DHdE%2BcGe3tuJwsAnA%40mail.gmail.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups "blink-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/a/chromium.org/d/msgid/blink-dev/CAEK7mvrCJFYRoP7FW5JcwK5DjeCy2iW7j4%2BfN6WUy_zfjuZJDw%40mail.gmail.com <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAEK7mvrCJFYRoP7FW5JcwK5DjeCy2iW7j4%2BfN6WUy_zfjuZJDw%40mail.gmail.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups 
"blink-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/a/chromium.org/d/msgid/blink-dev/6e844c03-b628-d5a9-56b5-0553be9f5126%40chromium.org.

Reply via email to