Personal Essays
JavaScript
Using the comma operator to update two indices at once.
From Stack Overflow
function pushToHash(key, value) {
for (var t = 0, x = 0; t < value.length; t++, x += 2) {
MQHash[key[t]] = value.slice(0, lineLength[x]);
}
}
The soul of a new machine: rethinking the computer
Talk by Bryan Cantrill
- IBM 709 (1961)
- First computer capable of time sharing
- Vacuum tube
- PDP 11 (1971)
- Rise of server-side computing
- Running tasks remotely
- Heavy workload
- Need to minimize down time
- Sun (1999)
- eBay
- eCommerce beginnings
- HP DL380 (2009)
- x86
- a personal computer used as a server
- Google (2009)
- Attempted to run custom, purpose-built computer rather than personal computers
- Getting rid of components they didn’t need like cd drives, VGA ports
- Facebook Tioga pass (2020)
- compute sled
- connects into a bus bar, so no power supply inside the compute sled
- minimize power conversion
- But outside Google and Facebook, everyone still uses PC servers
- Today’s problems
- There are reasons to not have cloud computing, but to own your own servers
- mostly for economic reasons
- the people making the hardware are not the same as the people making the
software
- this means that the hardware people are confined to certain components because customers are running Windows
- There are reasons to not have cloud computing, but to own your own servers
- Personal example
- saw increasing number of DIMM failure, or memory failures
- normally in ECC memory, you will see more and more correctable failures before seeing an uncorrectable error
- however, the firmware was causing memory to be corrupted much faster
- but can’t change the firmware
- Solution
- Use existing microprocessors. They are already reliable.
- Create real root-of-trust with open firmware. Customers should be able to inspect the firmware for their computers
- Increased security using purposed-built BMC (baseboard management controller) that only does very limited operations
- Need firmware that only boots the operating system
- Redesigning the physical cases to incorporate hardware (like network switches) and software as well as make dense form factors that are power efficient
- You get better designs when the hardware and software are co-designed: hypervisor, control plane, storage, API endpoints
- You shouldn’t want proprietary infrastructure software: it should be open source and attested.
- Most of the solution is building very low-level software (root-of-trust, service processor, boot software)
- A lot of the hardware is already out there
- Is this solution achievable?
- Many have accepted that the current state is good enough
- We know how to solve all the problems, but the key is creating an integrated approach
- Hyperscalers (Google, Facebook) do not support many OSes, only a few. By doing that, you can tight up your solution
- Hardware trends
- Industry recognizes the need for collaboration on hardware root-of-trust
- Spectre and Meltdown vulnerabilities: using processor speculation to access memory you’re not supposed to.
- Microsoft Cerberus, Google openTitan
- Google Chromebook solves most of these problems, but for the PC
- Open EDA makes FPGA design and implementation easier
- Yosys, Chisel, SpinalHDL, Bluespec (a VHDL)
- RISC-V instruction set
- Open firmware is happening
- Thanks to hyperscalers, Spectre, and Meltdown
- Facebook’s Open Compute Project
- Industry recognizes the need for collaboration on hardware root-of-trust
- Software trends
- Infrastructure software is open source
- Databases, consensus software (like Zookeeper)
- Programming languages for systems programming
- Garbage collected languages aren’t allowed because you need to be deterministic
- Rust, a safer C
- C doesn’t incorporate other libraries very well
- Writing safe C is hard
- Infrastructure software is open source
- Questions
- Rust is excellent for embedded applications
- Learn Rust the dangerous way
- Rust is excellent for embedded applications