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._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):
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user