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:
committed by
Austin Harris
parent
6ab4d09cd1
commit
ade8c08e7a
@@ -56,10 +56,6 @@ class SimpleSwitchableProcessor(SwitchableProcessor):
|
|||||||
self._start_key = "start"
|
self._start_key = "start"
|
||||||
self._switch_key = "switch"
|
self._switch_key = "switch"
|
||||||
self._current_is_start = True
|
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):
|
if starting_core_type in (CPUTypes.TIMING, CPUTypes.O3):
|
||||||
self._mem_mode = MemMode.TIMING
|
self._mem_mode = MemMode.TIMING
|
||||||
@@ -90,9 +86,6 @@ class SimpleSwitchableProcessor(SwitchableProcessor):
|
|||||||
def incorporate_processor(self, board: AbstractBoard) -> None:
|
def incorporate_processor(self, board: AbstractBoard) -> None:
|
||||||
super().incorporate_processor(board=board)
|
super().incorporate_processor(board=board)
|
||||||
|
|
||||||
if self._prepare_kvm:
|
|
||||||
board.kvm_vm = KvmVM()
|
|
||||||
|
|
||||||
board.set_mem_mode(self._mem_mode)
|
board.set_mem_mode(self._mem_mode)
|
||||||
|
|
||||||
def switch(self):
|
def switch(self):
|
||||||
|
|||||||
@@ -26,6 +26,9 @@
|
|||||||
|
|
||||||
from components_library.processors.simple_core import SimpleCore
|
from components_library.processors.simple_core import SimpleCore
|
||||||
from components_library.processors.abstract_core import AbstractCore
|
from components_library.processors.abstract_core import AbstractCore
|
||||||
|
|
||||||
|
from .cpu_types import CPUTypes
|
||||||
|
|
||||||
import m5
|
import m5
|
||||||
|
|
||||||
from typing import Dict, Any, List
|
from typing import Dict, Any, List
|
||||||
@@ -65,6 +68,15 @@ class SwitchableProcessor(AbstractProcessor):
|
|||||||
core.set_switched_out(core not in self._current_cores)
|
core.set_switched_out(core not in self._current_cores)
|
||||||
all_cores.append(core)
|
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)
|
super(SwitchableProcessor, self).__init__(cores=all_cores)
|
||||||
|
|
||||||
@overrides(AbstractProcessor)
|
@overrides(AbstractProcessor)
|
||||||
@@ -76,6 +88,16 @@ class SwitchableProcessor(AbstractProcessor):
|
|||||||
# procsesor
|
# procsesor
|
||||||
self._board = board
|
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)
|
@overrides(AbstractProcessor)
|
||||||
def get_num_cores(self) -> int:
|
def get_num_cores(self) -> int:
|
||||||
# Note: This is a special case where the total number of cores in the
|
# Note: This is a special case where the total number of cores in the
|
||||||
|
|||||||
Reference in New Issue
Block a user