I'm ok with implementing this. My biggest concern has always been
fingerprinting, and I think that we'll need some way to deal with
active (i.e. client-side) fingerprinting anyway, so I don't think this
makes a big difference either way.

/ Jonas

On Tue, Sep 8, 2015 at 12:21 PM, Luke Wagner <lwag...@mozilla.com> wrote:
> Since the original m.d.p thread on hardwareConcurrency last year:
>   
> https://groups.google.com/d/topic/mozilla.dev.platform/QnhfUVw9jCI/discussion
> the landscape has shifted (as always) and I think we should reevaluate
> and implement this feature.
>
> What hasn't changed are the arguments, made in the original thread,
> that hardwareConcurrency is a clumsy way to decide how many workers to
> create and can lead to the creation of too many workers in various
> scenarios (e.g., multiple tabs all attempting to saturate all the cores,
> cores vs. hyperthreads).
>
> What has changed is the appearance of more compelling use cases.  In
> particular, the upcoming support for SharedArrayBuffer [1][2] allows
> Emscripten to compile pthreads [3] applications, which has been the #1
> compile-to-web feature request over the last few years. Specifically, native
> game engines find the number of logical cores on the machine (using APIs
> present in C++11, etc.), and use a number of threads based on that (often
> adjusted, and they have a lot of experience tuning this). They would like to
> do the same on the web, and Chrome and Safari already let them. In the
> absence of hardwareConcurrency, developers are forced to resort to either
> hardcoding a constant number of workers or using a polyfill library [4] that
> estimates the number of cores. Unfortunately, the polyfill takes a few
> seconds (hurting startup time) and produces inaccurate results (based on
> evaluations from multiple parties) [5]. Thus, while hardwareConcurrency
> isn't ideal, it's strictly better than what developers have now in Firefox.
>
> Moreover, I don't think the applicability of hardwareConcurrency is
> limited to compile-to-web uses.  I think all the use cases we're
> seeing now from compiled native apps will manifest in JS apps further
> down the line as worker usage becomes more commonplace and
> applications grow more demanding.  As in many other cases, I think
> games are serving as a catalyst here, proving what's possible and
> paving the way for fleets of non-game applications.
>
> But will the existence of hardwareConcurrency encourage bad behavior
> in every-day web browsing?  I don't think so.  First of all,
> hardwareConcurrency is meant to help good actors who want to
> ensure a good experience for their users.  Bad actors can already
> saturate all your cores with Workers. Thus, as Worker (mis)use
> becomes more widespread on the Web, it seems inevitable we'll need
> to do some form of Worker throttling (via thread priority or
> SuspendThread/pthread_kill) of background/invisible windows *anyway*;
> it seems like the only reason we haven't had to do this already is
> because Workers just aren't used that much in normal web apps.  For
> good actors, though, it is possible to mitigate some of the clumsiness
> of hardwareConcurrency: using SharedWorkers to detect the "same
> app open in many tabs" case; using the PageVisibility API to pause
> work when not visible (which will likely happen anyway in frame-driven
> applications based on requestAnimationFrame throttling of background
> tabs).  Lastly, for neither good nor bad actors, I think the hazard of
> casual/widespread use is more limited by the hurdles of using workers
> at all (w/ or w/o SharedArrayBuffer).
>
> Will we get stuck with hardwareConcurrency forever?  I don't think
> so.  Farther down the line, as more web apps take advantage of workers
> and we find real examples of CPU contention for which throttling
> mitigations aren't sufficient, we will be motivated to improve and
> propose a more responsive API.  However, I don't think we can design
> that API now: we don't have the use cases to evaluate the API against.
> This is the basic Web evolutionary strategy.
>
> On the subject of fingerprinting: as stated above, core count can
> already be roughly measured [4].  While the extra precision and speed
> of hardwareConcurrency does make fingerprinting somewhat easier, as
> we've done with other features, we need to weigh the value to users
> against information revealed.  In this case, it seems like the ratio
> is pretty heavily weighted toward the value.
>
> On a more technical detail: WebKit and Chromium have both shipped,
> returning the number of logical processors where WebKit additionally
> clamps to 2 (on iOS) or 8 (otherwise) [6] which is explicitly allowed
> by WHATWG text [7].  I would argue for not clamping (like Chrome),
> although I do think we'll have a good amount of flexibility to change
> clamping over time based on experience.
>
> How does that sound?
>
> Cheers,
> Luke
>
> [1] 
> https://blog.mozilla.org/javascript/2015/02/26/the-path-to-parallel-javascript/
> [2] https://github.com/lars-t-hansen/ecmascript_sharedmem
> [3] 
> https://groups.google.com/forum/#!msg/emscripten-discuss/gQQRjajQ6iY/DcYQpQyPQmIJ
> [4] http://wg.oftn.org/projects/core-estimator/demo/
> [5] https://bugs.webkit.org/show_bug.cgi?id=132588#c86
> [6] 
> https://trac.webkit.org/browser/trunk/Source/WebCore/page/Navigator.cpp#L137
> [7] https://wiki.whatwg.org/wiki/Navigator_HW_Concurrency
> _______________________________________________
> dev-platform mailing list
> dev-platform@lists.mozilla.org
> https://lists.mozilla.org/listinfo/dev-platform
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform

Reply via email to