-
Notifications
You must be signed in to change notification settings - Fork 2
About 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.