wrench::ServerlessScheduler

class ServerlessScheduler

Abstract base class for scheduling in a serverless compute service.

Subclassed by wrench::GreedyServerlessScheduler, wrench::WorkloadBalancingServerlessScheduler

Public Functions

virtual std::shared_ptr<ServerlessSchedulingDecisions> schedule(const std::vector<std::shared_ptr<Invocation>> &schedulable_invocations, const ServerlessStateOfTheSystem *state) = 0

Given the list of schedulable invocations and the current system state, decide:

  • which idle containers to terminate

  • which images to copy to compute nodes

  • which images to load into memory at compute nodes

  • which invocations to start at compute nodes

Note that the disk and RAM at each compute host is managed using LRU, and so the scheduler doesn’t have full control (which would likely be intractable anyway). But that means that when asking from the system state questions like “how much RAM is available at that node?” is not clear-cut: the answer may be 0 but one can perhaps use the node because some memory content will be evicted due to the LRU behavior…

A scheduling decision is an intent, not a reservation. The serverless compute service checks whether the decision can actually be executed when it processes it.

Parameters:
  • schedulable_invocations – A list of invocations whose images reside on the head node

  • state – The current system state

Returns:

A SchedulingDecisions object