- Moving away from the too-small 4kb default page size (while having a good strategy for dealing with fragmentation)?
- Make it easy to minimize/track interrupts on a core, for low-latency contexts
613 karma · joined February 10, 2020
- Moving away from the too-small 4kb default page size (while having a good strategy for dealing with fragmentation)?
- Make it easy to minimize/track interrupts on a core, for low-latency contexts
Also, are there any opportunities to make this kernel significantly faster than Linux’s?
Edit: apparently the virus has spread, and some US hotels now don’t have them
This reminds me of a trick to sort floats faster, even if they have negatives, nans, and inf: map each float to a sortable int version of itself where one can compare them as ints (the precise mapping depending on how you want to order stuff like Nan). The one time conversion is fast and will pay off for the lg(n) comparisons. Then after sorting, map them back.
That's interesting to hear that IR is missing a lot. I'm also surprised that it could provide much gain over hashing the preprocessed output - maybe my workflow is different from others, but typically a change to the preprocessed output implies a change to the IR (e.g., it's a functional change and not just a variable name change or something). Otherwise, why would I recompile it?
Parse caching does sound interesting. Also, a lot of stuff that makes its way into the preprocessed output doesn't end up getting used (perhaps related to the 40-50% figure you gave). Lazy parsing could be helpful - just search for structural chars, to determine entity start/stop ranges, and add the names to a set, then do parsing lazily
- Header parsing (40% of time)
- Template instantiation (40% of time)
- Backend (20% of time)
For my use case, it seems like this cache would only kick in when 80% of the work has already been done. Ccache, on the other hand, doesn't require any of that work to be done. On a sidenote, template instantiation caching is a very interesting strategy, but today's compilers don't use it (there was some commercially sold compiler a while back that did have it, though).
I do wonder if this is as feasible at scale, where breaking master can be extremely costly (although at least it’s not running all tests for all commits, so a broken test won’t break all CI runs). Maybe it could be paired with, say, running all E2E tests post-merge and reporting breakages ASAP.