4 ms·
No. I classify storage (read: DASDs, not main memory) as universally cursed.
by nrr 3y ago
No. I classify storage (read: DASDs, not main memory) as universally cursed.
- vlovich123 3y agoNicely said. Personally I view it all as a sliding scale with varying techniques coming into play depending on the parameters. Eg networked computers have physical separation and typically independent operational failure domains which is a + (a failing component doesn’t take out the system) and - (requires complex algorithms like distributed concensus and has unique performance issues due to the latencies involved between components). But fundamentally even a single computer can still be viewed as a distributed system and I don’t see that as splitting hairs. Your memory controller, storage controller have non trivial pieces of software running with their own failure modes. The kernel running on the CPU is another component. Sure you don’t need distributed consensus per se but for example some RAID configurations look an awful lot like what you’d do in a distributed storage system (erasure codes, monitoring the state of individual disks to know if recovery is needed when a component fails etc). There’s a lot of work to hide that distributed system complexity behind APIs and standards but that’s also true for web services (eg S3 exposes a decentish distributed storage interface and you don’t have to reason about the consensus problems it’s managing for you under the hood). For example, take the Pixel Buds 2. That has 5 microprocessors communicating with each other and links can go up and down between them. There’s no consensus done and we did a lot to hide the messaging complexity but I would still count that as a distributed system (even more so once you factor in that you also need a host machine to pair with). And all the distributed systems problems came about (eg if you think a connection is there but then it disappears and you missed that signal and didn’t update your state).
- nrr 3y agoI don't disagree, but for the sake of having productive conversations, it's easiest to acknowledge that this is a matter of one's frame of reference. Are you technically correct? Yes. How much does that matter at the end of the day? For most people, myself included, I'd argue not a lot. As someone who straddles the system call boundary, I generally consider myself as not running in a distributed system if the layers of the stack below me will fall out from underneath me when some invariant of their abstraction around the distributed nature of my execution context fails to hold. For PCIe-interconnected devices (except for HBAs and disk because that entire stack outright lies to you), the chances are pretty good that the kernel will bugcheck if it can't successfully remediate the problem. For something connected over Bluetooth? Not so.
- vlovich123 3y agoYeah that’s a fair line and often how I like to think about things (ie are the failure domains coupled on error or not). The only nit is that it’s not uncommon for storage layers or really any HW to swallow errors and not even report it to the kernel. And that’s ignoring that silent memory errors happen a lot on most consumer HW.
- nrr 3y agoAgain, you aren't wrong, and it's actually a lament of mine that these peripheral processors aren't themselves under the purview of the kernel's scheduler for their tailor-made tasks or that the code that runs there isn't debuggable in much the same way as any other code. It is, nevertheless, good enough for most people that it more or less works 80% of the time. Pareto strikes again.