intertwingly

It’s just data

Continue the Argument


The recording of There Is No Server is up. The post I published the morning of the talk promised the link when it existed; it has it now.

Live demos on a main stage are always a risk, and I thought I had bought my way out of it. None of these demos needed a server, so there was nothing to fall over. What fell over instead was the inspector. The Act II flourish — chrome://inspect, a breakpoint in articles_controller.rb, execution stopped in Ruby — depends on Chrome keeping its DevTools window attached to the shared worker, and somewhere between rehearsal and noon it let go. You can watch me fumble with it around minute four. Around minute twelve the studio did what it was built to do — I changed the source, a test went red, I changed the test to match, and it went green, all in a static page — and the room applauded, unprompted. I'll take it. And you can watch what happened after: I finished with time to spare, took questions, restarted the browser, and at minute thirty ran the demo that had failed.

One production note. The Keymaker's key — the costume the July post explains — could not be read past the third row. Next time, a bigger key.

Since July

Seven weeks is a long time at the cadence this project runs. Three things moved.

Lobsters. In Q&A I said Lobsters was next. It was, and it has had two posts of its own since: the ledger and the update. The benchmark and conformance pages rebuild on every push, and the rule from those posts is that they publish whichever way the number moves. So: the compiled lane reads 3.85× Rails on YJIT today where the August post read 5.2×, and the conformance lane reads 117 of 354 where it read 126.

Every number on those pages moves in both directions, all the time. That is what a page rebuilt on every push looks like, and what the direction reflects right now is attention. The goal for Lobsters at the moment is to hold it mostly stable while the work goes into Campfire, and the numbers say exactly that. A page that only ever moves in its own favor is telling you something. This one doesn't.

Campfire. I found I could make faster progress on Campfire than on Lobsters, and it shows. Campfire compiles, boots, chats, and downloads as a tarball you can build and run yourself. Its own suite stands at 256 of 288, with no changes to its source and no annotations. A chat application's benchmark has a different shape — fan-out over sockets rather than request latency — and that number waits until it can be computed without flattering us.

Meanwhile I asked Matz whether Campfire is useful for Spinel's 0.1 release. The answer was better than yes. Lobsters is request-shaped: when the request ends, most of the heap is garbage. LangArena is the opposite. Campfire — long-lived connections, a large heap that stays live — is the only workload with the shape the generational collector's default-on decision actually needs, and it is the shape Spinel did not otherwise have. His ask in return was that the signal reach him: when the binary diverges under the minor collector, file it, and say so in the title. The comparator now runs two legs on every push, one under each collector, both green on the first run. Six issues reached Spinel from this one application in about a day.

The scaling question. Someone in Q&A asked whether any of this scales, and I said I saw no concern. For runtime, that is still my answer. For compile time I have since found one, and it has a number: Spinel's analyze phase scales at roughly N2.2 in program size. Campfire compiles in about half a minute on an M-series Mac. Mastodon, projected linearly from that, would take under four minutes; measured, it takes sixteen. The exponent is three quarters of the build.

The issue ranks the remedies. The one I control outright — emit k route-sharded binaries behind a path-routing proxy, each one a whole program Spinel already knows how to compile — projects Mastodon to under seven minutes on eight cores. Fixing the exponent on Spinel's side projects it to under four. Both together, about two. The two are substitutes, not complements: most of sharding's leverage comes from the exponent. None of this touches the other nine targets; it is specific to whole-program analysis as Spinel does it today. I don't yet know which move comes first, but I know the shape of the choice, which is more than I knew on stage.

The next stage

Deccan Queen on Rails, October 8–11, Pune. The talk I'm bringing there is a different argument from the one in the recording — less look, no server and more what did we think Rails was, all this time? That's the next post.


Roundhouse is open source: dual-licensed MIT / Apache-2.0. Issues and discussion welcome.