| 
									
										
										
										
											2013-09-05 16:42:39 -07:00
										 |  |  | 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 | 
					
						
							| 
									
										
										
										
											2013-10-03 18:06:23 -07:00
										 |  |  | 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. | 
					
						
							| 
									
										
										
										
											2013-09-05 16:42:39 -07:00
										 |  |  | 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-11 14:04:19 -07:00
										 |  |  | 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-05 16:42:39 -07:00
										 |  |  | 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. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-11 14:04:19 -07:00
										 |  |  |                                       | | 
					
						
							|  |  |  |                +----------+           |             +----------+ | 
					
						
							|  |  |  |                | 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                                 | | 
					
						
							|  |  |  |              +-------------------------------------------------------------+ |