Automatic Configuration of Complex Hardware
A modern network interface card (NIC), such as the Intel X520 10 GbE, is complex, with hardware registers that control every aspect of the NIC’s operation from device initialization to dynamic runtime configuration. The Intel X520 datasheet documents over 5600 registers; yet only about 1890 are initialized by a modern Linux kernal. It is thus unclear what the performance impact of tuning these registers on a per application basis will be. In this project, we pursue three goals towards this understanding: 1) identify, via a set of microbenchmarks, application characteristics that will illuminate mappings between hardware register values and their corresponding microbenchmark performance impact, 2) use these mappings to frame NIC configuration as a set of learning problems such that an automated system can recommend hardware settings corresponding to each network application, and 3) introduce either new dynamic or application instrumented policy into the device driver in order to better attune dynamic hardware configuration to application runtime behavior.
We have shown manually that tuning a single parameter in NICs (the time delay between interrupts) can result in significant power savings by decreasing instruction and interrupt counts, while increasing frequency of sleep states, and maintaining stringent SLAs in the hundreds of microseconds. We are continuing to explore methods to automate this process.
For more information on this project and the unique partnership that produced it, please visit Red Hat Research.