A non-transitory computer-readable storage medium including instructions that, when executed by a first CPU of a multiprocessor computer system, causes a first process associated with a hypervisor running on the first CPU to speculatively wake a second process associated with a user virtual machine to run on a second CPU of the multiprocessor computer system by performing the steps of:
- receiving a notification from an I/O device indicating availability of data from the I/O device, the notification having an associated vector;
- identifying that the second process correlates to the vector by checking a data structure that maintains correlations between vectors for received interrupts and existing processes supported by the multiprocessor computer system that includes the second process;
- receiving an inter-virtual machine notification request from a third process associated with a driver virtual machine to wake up the user virtual machine after the driver virtual machine copies the data into a shared memory;
- incrementing an entry in the data structure corresponding to the user virtual machine and an interrupt vector for the interrupt;
- transmitting a wake-up message to the second process to wake up the second process to run on the second CPU and poll the shared memory for the data made available by the third process;
- and
- forwarding the notification to be handled by the third process comprising a handler running on the first CPU, wherein the handler is configured to handle the notification for the second process running on the second CPU, and wherein the handler is a device driver corresponding to the I/O device.