5 ms·
How to make Firefox builds 17% faster
- Devorlon 6mo agoWhy compile code when ccache faster
- amelius 6mo agoDoes ccache fetch compiled code from a central server using checksums?
- 01HNNWZ0MV43FF 6mo agosccache can, but most of us don't have access to an sccache instance: https://github.com/mozilla/sccache https://github.com/mozilla/sccache
- mmastrac 6mo agosccache is pretty easy to set up and you can back it with S3, memcache, redis, etc.
- mbitsnbites 6mo agoSame with BuildCache, except you also get a fast local cache so you effectively have an L1 and an L2 cache. In fact, since you also have super fast "direct mode" caching that bypasses the preprocessor (like ccache but unlike sccache), BuildCache really has three logical levels of cache: direct, preprocessor and remote (S3, redis, ...).
- firesteelrain 6mo agoWe use sccache on prem with MinIO.
- fishgoesblub 6mo agobuildcache, the program the post is about can use a remote server for storing the cache.
- mbitsnbites 6mo agoAnd a local cache (kind of level 1 and level 2 caches)
- K0IN 6mo agowow, 17% is impressive with such an easy fix. i wonder if we could just build this as a separate project and pull the webidl files as a dependency.
- rtpg 6mo agomanaging deps as a separate project introduces a lot of day-to-day annoyances, especially if the files are actually changed decently often.
- shevy-java 6mo agoSo ... perhaps Mozilla should focus on user share dropping. I understand that speed is relevant, but focusing on that strategy does not really work when dinosaur-like extinction is around the corner.
- tadfisher 6mo agoI will just say this: it is unfortunate that you have chosen not to engage with the content of the article.
- jeffbee 6mo agoConsidering that Firefox mainly appeals to its own contributors, making the developer experience better would be important.
- rebelwebmaster 6mo agoObviously it'll make the developer more efficient to spend more time twiddling his thumbs waiting for his code to compile rather than creating a simple build performance win that allows him to, you know, spend more time improving Firefox. Not to mention all the other developers who stand to benefit from faster builds.
- sfink 6mo agoAw shucks, we never thought of that. Here we were, dedicating every one of our developers to speeding up the build, and we never thought to increase our user share instead. In retrospect, that was pretty dumb! Ok, sorry, we'll get right on that. Seriously, what is with the trend of assuming that anything anyone in a project does, it is assumed that it has been the main goal of the project and all other objectives have been abandoned? "Firefox's frontend designers are doing frontend design work instead of implementing WebUSB which would immediately reverse their declining user share trend and make billions of dollars worth of donations! What are they thinking?!!" (I'm gonna get a lot of hate for this post, aren't I?)
- jamesnorden 6mo agoI mean, if you could donate directly to Firefox development and not for "anything Mozilla wants to waste it on that day", maybe the donations would go up.
- mmastrac 6mo agoCan you (err... buildcache) cache Rust proc-macros? I've been battling this with sccache and I'm now maintaining a 10-patch deep stack for the next.js build CI. Windows builds were ridiculously poor on cache hits rates too because of non-determinism that was not able to figure out. I'd be happy to test it out.
- estebank 6mo agoThere was an experimental PR that treats proc macros as idempotent with the corresponding colpike speed up. I don't know what happened with it, and stabilization required a lot of design work to not break backcompat. But this is something in the team's radar.
- staticassertion 6mo agoWould it be possible to do somethign like editions for proc macros, or have crates establish "this is a v2 proc macro" or something? There are a lot of things I'd love to see change in a v2 but it'd all be breaking.
- estebank 6mo agoYes, I think here are workable designs.
- mmastrac 6mo agoDo you have a link for this one? Would love to see it.
- estebank 6mo agoThis is not the one I remember but another one that does part of what I'm describing. https://github.com/rust-lang/rust/pull/145354 https://github.com/rust-lang/rust/pull/145354
- NooneAtAll3 6mo agowhat do you mean by idempotent and colpike?
- allenrb 6mo agoI guess “purge 17% of the code” is not the correct answer?
- eru 6mo agoOnly if your build scales linearly. Otherwise, it might be a different percentage.
- yjftsjthsd-h 6mo agoIf you can remove 17% of your code, or even just avoid building it, yeah you probably should. That can be a really rough tradeoff though. (And the sibling comment is also right that deleting 17% of code != 17% faster builds, though I could see it being higher or lower)
- evmar 6mo agoI’m not too familiar with Firefox builds. Why are clobber builds common? At first glance it seems weird to add a cache around your build system vs fixing your build system.
- jagged-chisel 6mo agoDefine “fixing.” If you’re building on ephemeral containers, an external cache is necessary for files that don’t change.
- mbitsnbites 6mo agoThough I'm not actively working with Firefox so can't speak for their use cases, one important use case for clobber builds is CI. I'm the author of BuildCache, and where I work we make thousands of clobber builds every day in our CI. Caching helps tremendously for keeping build times short. There are a few use cases for local development too. For instance if you switch between git branches you may have to make near full rebuilds (e.g. in C++ if some header file is touched that gets included by many files). Another advantage as a local dev is that you can tap into the central CI cache and when you pull the latest trunk and build it, chances are that the CI system has already built that version (e.g. as part of a merge gate) so you will get cache hits.
- evmar 6mo agoI see, I might be confused by the terminology. "clobber" to me suggests intentionally trying to throw away cached results (clobbering what you have), but it sounds like you might just use it to mean builds where you don't have any existing build state already present.
- secondcoming 6mo agoWhat even is a 'clobber build'?
- __farre__ 6mo agoSorry for being unclear. I'm using Firefox build system lingo without explanations. It's from the command `./mach clobber`, which is similar but not the same as `make clean`. I use 'clobber build' as "a build with no existing build state" and the qualifiers "cold" and "warm" to indicate if cache is empty or filled.
- butz 6mo agoDisable all AI integrations? Sorry, I'll see myself out.