| An Intel MIC X100 device is a PCIe form factor add-in coprocessor |
| card based on the Intel Many Integrated Core (MIC) architecture |
| that runs a Linux OS. It is a PCIe endpoint in a platform and therefore |
| implements the three required standard address spaces i.e. configuration, |
| memory and I/O. The host OS loads a device driver as is typical for |
| PCIe devices. The card itself runs a bootstrap after reset that |
| transfers control to the card OS downloaded from the host driver. The |
| host driver supports OSPM suspend and resume operations. It shuts down |
| the card during suspend and reboots the card OS during resume. |
| The card OS as shipped by Intel is a Linux kernel with modifications |
| for the X100 devices. |
| |
| Since it is a PCIe card, it does not have the ability to host hardware |
| devices for networking, storage and console. We provide these devices |
| on X100 coprocessors thus enabling a self-bootable equivalent environment |
| for applications. A key benefit of our solution is that it leverages |
| the standard virtio framework for network, disk and console devices, |
| though in our case the virtio framework is used across a PCIe bus. |
| |
| MIC PCIe card has a dma controller with 8 channels. These channels are |
| shared between the host s/w and the card s/w. 0 to 3 are used by host |
| and 4 to 7 by card. As the dma device doesn't show up as PCIe device, |
| a virtual bus called mic bus is created and virtual dma devices are |
| created on it by the host/card drivers. On host the channels are private |
| and used only by the host driver to transfer data for the virtio devices. |
| |
| Here is a block diagram of the various components described above. The |
| virtio backends are situated on the host rather than the card given better |
| single threaded performance for the host compared to MIC, the ability of |
| the host to initiate DMA's to/from the card using the MIC DMA engine and |
| the fact that the virtio block storage backend can only be on the host. |
| |
| | |
| +----------+ | +----------+ |
| | Card OS | | | Host OS | |
| +----------+ | +----------+ |
| | |
| +-------+ +--------+ +------+ | +---------+ +--------+ +--------+ |
| | Virtio| |Virtio | |Virtio| | |Virtio | |Virtio | |Virtio | |
| | Net | |Console | |Block | | |Net | |Console | |Block | |
| | Driver| |Driver | |Driver| | |backend | |backend | |backend | |
| +-------+ +--------+ +------+ | +---------+ +--------+ +--------+ |
| | | | | | | | |
| | | | |User | | | |
| | | | |------|------------|---------|------- |
| +-------------------+ |Kernel +--------------------------+ |
| | | | Virtio over PCIe IOCTLs | |
| | | +--------------------------+ |
| +-----------+ | | | +-----------+ |
| | MIC DMA | | | | | MIC DMA | |
| | Driver | | | | | Driver | |
| +-----------+ | | | +-----------+ |
| | | | | | |
| +---------------+ | | | +----------------+ |
| |MIC virtual Bus| | | | |MIC virtual Bus | |
| +---------------+ | | | +----------------+ |
| | | | | | |
| | +--------------+ | +---------------+ | |
| | |Intel MIC | | |Intel MIC | | |
| +---|Card Driver | | |Host Driver | | |
| +--------------+ | +---------------+-----+ |
| | | | |
| +-------------------------------------------------------------+ |
| | | |
| | PCIe Bus | |
| +-------------------------------------------------------------+ |