Privileged Ports Are Expensive (2016)
It was a fun read, and there is a clever thought there which I&#x27;ll get to in a minute. But first ...<p>The author gets a lot wrong, it isn&#x27;t uncommon because most software people see a &quot;server&quot; as a set of numbers &quot;A&quot; bytes of memory, &quot;B&quot; bytes of disk space, and &quot;C&quot; hertz of clock speed.<p>Computers aren&#x27;t numbers of course, they are systems, and the systems are a collection of moving parts that are connected by linkages which constrain and amplify the various parts. In system design there is a concept of &#x27;balance&#x27; which discusses how the linkages enable and constrain such that an understanding of the amount of &quot;work&quot; that can be done by the system is understood.<p>There is a great example in the article comparing a Raspberry Pi to a Sparcstation 10. Most of the software the author used &quot;back in the day&quot; is still around in one form or another, and a RasPi is cheap, so its easy to create modest recreation of the environment from that time and to build simulated users who can access the &quot;server&quot;.  Just two or three users and the Pi will &quot;choke&quot;. Understanding how a system with so many &quot;bigger&quot; numbers is less capable of doing the same &quot;work&quot; as one with much smaller numbers is a useful exercise to run if you are into systems analysis. The system the Pi was <i>designed</i> to run, and the one for which it is fairly well balanced is a smartphone. Something the SPARC 10 would truly suck at.<p>The clever idea however is making networking resources just another resource like disks. Interestingly enough, with IPV6 that is much easier than it was before (to the point about how things were done before in networking, vs now). It is straight forward to create a model of network interfaces that is equivalent to serial lines. Have the kernel get set an IPV6 subnet with a block of 32K addresses and let your user program open &#x2F;dev&#x2F;net&#x2F;&lt;1&gt; through &lt;32766&gt; because its IP each &quot;net&quot; device comes with its own set of port numbers etc. IPC is just networking and a cleverly coded kernel running on a machine with a 64 bit virtual address space would do direct data placement. No need to do even any page table mashing.