python: Update switchable processor to support KVM

Change-Id: Ie843e2b4ab6e506bb195bfcef33cead9a6273901
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/50127
Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu>
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Austin Harris
2021-09-08 14:18:20 -05:00
committed by Austin Harris
parent 6ab4d09cd1
commit ade8c08e7a
2 changed files with 22 additions and 7 deletions

View File

@@ -56,10 +56,6 @@ class SimpleSwitchableProcessor(SwitchableProcessor):
self._start_key = "start"
self._switch_key = "switch"
self._current_is_start = True
self._prepare_kvm = CPUTypes.KVM in (
starting_core_type,
switch_core_type,
)
if starting_core_type in (CPUTypes.TIMING, CPUTypes.O3):
self._mem_mode = MemMode.TIMING
@@ -90,9 +86,6 @@ class SimpleSwitchableProcessor(SwitchableProcessor):
def incorporate_processor(self, board: AbstractBoard) -> None:
super().incorporate_processor(board=board)
if self._prepare_kvm:
board.kvm_vm = KvmVM()
board.set_mem_mode(self._mem_mode)
def switch(self):

View File

@@ -26,6 +26,9 @@
from components_library.processors.simple_core import SimpleCore
from components_library.processors.abstract_core import AbstractCore
from .cpu_types import CPUTypes
import m5
from typing import Dict, Any, List
@@ -65,6 +68,15 @@ class SwitchableProcessor(AbstractProcessor):
core.set_switched_out(core not in self._current_cores)
all_cores.append(core)
self._prepare_kvm = CPUTypes.KVM in [
core.get_type() for core in all_cores
]
if self._prepare_kvm:
from m5.objects import KvmVM
self.kvm_vm = KvmVM()
super(SwitchableProcessor, self).__init__(cores=all_cores)
@overrides(AbstractProcessor)
@@ -76,6 +88,16 @@ class SwitchableProcessor(AbstractProcessor):
# procsesor
self._board = board
if self._prepare_kvm:
board.kvm_vm = self.kvm_vm
# To get the KVM CPUs to run on different host CPUs
# Specify a different event queue for each CPU
for i, core in enumerate(self.cores):
for obj in core.get_simobject().descendants():
obj.eventq_index = 0
core.get_simobject().eventq_index = i + 1
@overrides(AbstractProcessor)
def get_num_cores(self) -> int:
# Note: This is a special case where the total number of cores in the