MVEE Aware Scheduler
A Multi-variant execution environment (MVEE) is capable of executing more than one version of a process in parallel for fault tolerance and integrity. An MVEE compares the results of these multiple variants of the same program and ensures that they have not diverged. An MVEE based on Linux was developed by Stijn Volckaert (postdoc in our lab). Consider an N threaded program. In an MVEE there will be Master and slave processes, so 2N threads. At certain points, the master and slave processes must be compared to verify consistency. This leads to an inherent dependency between the variants. At times, a master process thread (say M_T1) accesses a critical section but the slave process’ thread (say S_T1) corresponding to M_T1 has not been scheduled to run yet. The master process must wait for the verification step until S_T1 is scheduled and completed. A naive scheduler may schedule threads other than S_T1, wasting CPU cycles until the correct thread is scheduled. This happens since the scheduler is oblivious to the relationships between threads in the MVEE. Our project aims to modify the Linux kernel scheduler to be aware of the presence of multiple variants and schedule the threads in an order (schedule S_T1 whenever M_T1 is scheduled to run) that will eliminate such waits.