List of Contents Abstract Ⅰ. Introduction 1 IⅠ. Background and Motivation 5 2.1 Semantic gap of the guest OS and the hypervisor 5 2.2 Performance degradation by cache-miss 7 IⅠI. Implementation 11 3.1 Design of MCSCHED 11 3.2 Details of the Scanning stage 13 3.3 Details of the Co-scheduling stage 16 IV. Implementation Issues 19 4.1 Scanning overhead of MCSCHED 19 4.2 Starvation Problem 21 V. Evaluation 23 5.1 Experimental setup 23 5.2 Improvement of Scanning overhead 24 5.3 Micro-benchmark Results 25 5.4 Practical workload Results 27 5.5 Fairness among Virtual machines 31 VI. Related work 33 VII. Conclusion 36