• S
    Implement the core API to suspend/resume the host · 4ddb37c3
    Srivatsa S. Bhat 提交于
    Add the core functions that implement the functionality of the API.
    Suspend is done by using an asynchronous mechanism so that we can return
    the status to the caller before the host gets suspended. This asynchronous
    operation is achieved by suspending the host in a separate thread of
    execution. However, returning the status to the caller is only best-effort,
    but not guaranteed.
    
    To resume the host, an RTC alarm is set up (based on how long we want to
    suspend) before suspending the host. When this alarm fires, the host
    gets woken up.
    
    Suspend-to-RAM operation on a host running Linux can take upto more than 20
    seconds, depending on the load of the system. (Freezing of tasks, an operation
    preceding any suspend operation, is given up after a 20 second timeout).
    And Suspend-to-Disk can take even more time, considering the time required
    for compaction, creating the memory image and writing it to disk etc.
    So, we do not allow the user to specify a suspend duration of less than 60
    seconds, to be on the safer side, since we don't want to prematurely declare
    failure when we only had to wait for some more time.
    4ddb37c3
virnodesuspend.c 8.3 KB