Tableau VM Scheduler

High-Throughput & Predictable Scheduling for High-Density VM Workloads

What is it?

Tableau is an unorthodox VM scheduler design that guarantees a minimum processor share and an upper bound on scheduler-induced delay for every VM in the system.

Tableau does this by combining a low-overhead, core-local, table-driven dispatcher within the hypervisor, with a fast on-demand table-generation procedure running in userspace (triggered whenever VMs are created or torn down).

Where can I get it?

Source code for our implementation of Tableau in Xen can be found on Github: you can get Xen 4.9 with Tableau support, and Tableau's userspace planner (and other tools)

Note that while we implemented and evaluated Tableau in Xen for our EuroSys '18 paper, Tableau's design is hypervisor-agnostic and not tied to any particular one.

Getting Started

Below is a quick guide to getting started with Tableau.

Start by cloning our Xen 4.9 repository with Tableau support:

$ git clone

Compile Xen from source for your server. The Xen project wiki has a comprehensive tutorial on compiling it from source.

Add a boot parameter to Xen (sched=tableau). On newer Linux distributions, you can put the following line in /etc/default/grub.d/xen.cfg


Finally, update GRUB and reboot the machine into Xen.

$ update-grub

You should now be running Tableau! You can make sure by running the following command, which should give the following output:

$ sudo xl info | grep scheduler
xen_scheduler          : tableau

To setup the userspace tools for Tableau, first clone and setup the SchedCAT Python library, which is a prerequisite:

$ git clone
$ cd schedcat
$ make
$ make test
$ export PYTHONPATH=$PYTHONPATH:`pwd`/schedcat

To setup the userspace tools for Tableau, clone the tableau-tools repository as shown below:

$ git clone

Create an example configuration file for your machine. A commented example can be found in the tableau-tools/examples/example.conf file.

Now you can generate a table for your current configuration:

$ ./table_build examples/example.conf

This generates a table and places it in a .sched folder in the current working directory. Now you just need to provide this folder as an argument to the table_push command

$ sudo ./table_push .sched

You can view table switch messages using Xen's dmesg output:

$ sudo xl dmesg

Got questions? Found an issue?

You can email any questions, comments, or issues to mvanga -at- mpi-sws -dot- org.

© 2018 Manohar Vanga | Imprint | Data Protection