# IX: A Protected Dataplane Operating System for High Throughput and Low Latency ###### paper origin: OSDI '14 ###### paper: [link](https://dl.acm.org/doi/10.5555/2685048.2685053) ### Motivation * An OS which can support datacenter application * large concurrent TCP connections * high packet rates with small packet size * low tail latency ### Problem * Network performance on commodity OS can't catch up with hardware (40Gbps, 100Gbps, ..), since it's designed based on below asumptions : * multiple applications share a single CPU core * packet inter-arrival times being many times higher than the latency of interrupts and system calls * On software side, code paths are convoluted by interrupts and scheduling ### Solution * High-level overview ![](https://i.imgur.com/BdPCL4S.png) * Flow consistent haching, no synchronization or coherence traffic between cores * Run-to-completion, improve data-cache locality and remove scheduling * Adaptive batching (any to maximum batch size) * Zero copy between user space applications & network stack ### Implementation * OS model * Based on Dune, utilize VT-x virtualzation * Each IX dataplane supports a single, multi-threaded application * Require Intel DPDK and a supported Intel NIC : * Intel 82599 * Intel X520 * Intel X540 ![](https://i.imgur.com/MhE4DXK.png) * Execution flow (run-to-completion + adaptive batching) ![](https://i.imgur.com/XdyFbKn.png) ### Evaluation * Single flow TCP, using Netpipe (synchronously echo packets) * IX (polling + run-to-completion) is better than Linux (interrupt) * mTCP is the worst since it uses agressive batching ![](https://i.imgur.com/f6JoDjY.png =460x) * Multiple flow TCP, using Netpipe (1 server, 18 client machines) ![](https://i.imgur.com/u8UzUAR.png =460x)![](https://i.imgur.com/BUOLOPa.png =340x) ![](https://i.imgur.com/d9JMCPS.png =340x) * Connection scalability, limited by multiplexing among open connections ![](https://i.imgur.com/k6J65aD.png =480x) * Memcached performance (an in-memory, key-value store framework) * ETC workload : 20B-70B keys, 1B-1KB values, 75% GET request * USR workload : < 20B keys, 2B values, 99% GET request ![](https://i.imgur.com/lMoF2Hq.png) ![](https://i.imgur.com/NZM1OGf.png =420x)