I think it's worth stating here that the experiments will be to switch to one-value keys (which is what other browsers do), which involves some tradeoffs.
On Mon, Feb 7, 2022 at 10:06 AM Mike Taylor <miketa...@chromium.org> wrote: > 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 <slightly...@chromium.org> > 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 < >>> blink-dev@chromium.org> wrote: >>> >>>> Contact emails >>>> >>>> mme...@chromium.org >>>> >>>> Explainer >>>> >>>> >>>> https://github.com/MattMenke2/Explainer---Partition-Network-State/blob/main/README.md >>>> >>>> Specification >>>> >>>> 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 >>>> >>>> >>>> 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 >>>> >>>> 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, we know that HTTPS requests to https://* > b.com can be sent to 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) >>>> >>>> WebKit: Shipped/Shipping ( >>>> 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 >>>> >>>> Launch bug >>>> >>>> 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 >>>> >>>> Links to previous Intent discussions Intent to prototype: >>>> 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 blink-dev+unsubscr...@chromium.org. >>>> 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 blink-dev+unsubscr...@chromium.org. > 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 blink-dev+unsubscr...@chromium.org. To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAEK7mvrjvJKWV6iYTsXE0Df_i2jri3jUvOj3YeenBEWi2kaNKQ%40mail.gmail.com.