Skip to content

About Kronos

Vignesh2208 edited this page Nov 27, 2018 · 1 revision

Why Kronos ?

Network emulators enable rapid prototyping and testing of applications. In typical best-effort emulations, processes compete for a share of CPU resources. Their execution order and quanta are also not explicitly controlled by the emulator. Per-process CPU contention limits scalability of emulations and lack of control over process scheduling adds non-reproducible noise into the emulation.

Kronos is a small set of modifications to the Linux kernel that is directed towards solving these issues.

  • It maintains a separate virtual clock for each process which is only advanced when the process executes on a CPU
  • It exposes an API which allows a process to be run for a precise number of x86 instructions
  • It eliminates CPU contention perceived by processes by tying the execution of containers of emulated processes to separate virtual clocks
  • It provides an emulator with precise instruction level tracking of process execution and control over execution order of containers.

In Kronos, each container's virtual clock is advanced based on a precise count of the number of x86 assembly instructions executed by its children. Modifications to the Linux Kernel involving ptrace and perf subsystems enable Kronos to precisely run a process for a specific number of instructions before pausing it. This capability (also referred to as Instruction-Driven Scheduling or INS-SCHED) can be used to perform large scale and repeatable evaluations using popular network emulators like Mininet, CORE, ns-3, S3FNet etc.

Clone this wiki locally