Unmapped I/O improves userland direct disk performance by 35% ~ 135%
svnweb.freebsd.org
svnweb.freebsd.org
From the revision, it seems the improvement is in a Hyper-V storage driver.
Also, this patch doesn't strike me as monumental. Really, it strikes me as one of the first things you would do when configuring a disk driver for a VM (mapped I/O is unnecessary overhead for most VM configurations as the hypervisor and/or SAN remaps it anyway). Has Microsoft not supported FreeBSD well under HyperV in the past?
What I don't get is why the GP is stating that servers need to get them, when every PC comes with specialized IO processors for decades already.
No they do not. My main CPU (s) gets interrupted by my drivers nonstop. As networking or disk goes up, my apps slow down even if they don't depend on them since the CPU is absorbing the hit of many of those operations. That's totally different than a Channel I/O-like model where a dedicate CPU manages all that with apps just handing it off asynchronously in a high-level way, I/O processor doing low-level stuff, & scheduler making sure nothing slows down due to waiting on it. That's why my CPU is sometimes under 10% utilization when it could be working big time but mainframes are more like 90-97%.
Or maybe you meant they have specialized hardware... dedicated ASIC blocks... to accelerate TCP/IP processing, compression, filesystems, database operations, and so on? I didn't see those for decades either outside custom cards or chips on the motherboard. Definitely not in SOC's designed for them with smooth CPU integration. That's come online recently under semi-custom banner at AMD/Intel & all these Cavium-style processors that merge CPU's + HW accelerators.
So, there's a difference between what highly-efficient, I/O model some products have right now and what my desktop computer has. The servers are catching up with all kinds of fast buses and add-on cards. Need changes at CPU and OS levels, though, for max effect.
Wheels being reinvented for some time now in high-load world. Polling drivers instead of IRQ-on-every-packet-arrived, smart NICs, CPU-pinned queues and processes. Looking at e.g. DPDK architecture, it's almost mainframe type of Channel IO actually.
I think one commenter thought "Can't you do the same with multi-core CPU's?" One advantage of Channel I/O was that they could use weaker CPU's since it didn't take as much work. Cost or efficiency advantages with the heterogeneous architectures. We see that in this one where they use lightweight, ARM multi-core instead of heavyweight x86. Leaves room for accelerators in SOC or just watts for other stuff in system. So, going in right direction again.
[1] http://www-304.ibm.com/support/customercare/sas/f/capi/home....
[2] http://www.theregister.co.uk/2016/03/14/intel_xeon_fpga/
So, I think there's still potential. Especially given the formal verification and security strategies for I/O programs were often different in academic literature than algorithmic ones. Specialized hardware might facilitate improving their security or availability in provable way.
Modern Zs have largely removed I/O copros - none of the Z9 through Z12 have dedicated offload for DASD.
I think the point is that, currently, BSD (at least with Hyper-V) defaults to a "mapped" zero-copy approach: when a read is requested, the user space buffer is mapped to a DMA accessible address, the device DMA's the data directly into the buffer, and then the DMA address is unmapped.
Unfortunately, the IOMMU operations to make this happen are not free, and have side-effects like a TLB flush. For small transfers, it's cheaper to let the DMA write to a persistent kernel buffer, and then have the kernel copy it to user-space. I think this traditional non-zero-copy approach is what they are referring to as "unmapped".
But I'm guessing. It would be kind if someone fluent in BSD could explain it correctly.