Skip to content

Commit 43a51d2

Browse files
configs: both gem5 and SST memories are compatible
This change makes sure that general AbstractMemorySystem is supported by the X86ComposableBoard. Signed-off-by: Kaustav Goswami <kggoswami@ucdavis.edu>
1 parent 0bf6ea7 commit 43a51d2

1 file changed

Lines changed: 24 additions & 37 deletions

File tree

disaggregated_memory/boards/x86_main_board.py

Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -153,29 +153,21 @@ def __init__(
153153
# ends.
154154
if isinstance(remote_memory, ExternalRemoteMemory) == True:
155155
if remote_memory.get_physical_address_ranges() is None:
156-
# If the remote_memory_addr_range is not provided, we'll assume
157-
# that it starts at 0x100000000 + local_memory_size and ends at
158-
# it's own size
156+
# If the remote_memory_addr_range is not provided, we'll crash
157+
# the simulation as ranges could not be verified.
159158
fatal("External memory address range is not set!")
160-
warn(
161-
"An address range is not specified! The simulation may "
162-
"crash!"
163-
)
164-
self._remoteMemoryAddressRange = AddrRange(
165-
0x100000000 + self._localMemory.get_size(),
166-
size=self._remoteMemory.get_size(),
167-
)
168159
else:
169160
# We trust the user to put the correct memory range.
170-
print(
171-
"remote_range", remote_memory.get_physical_address_ranges()
172-
)
173161
self._remoteMemoryAddressRange = (
174162
remote_memory.get_physical_address_ranges()[0]
175163
)
176164
else:
177-
# This is gem5 memory. Let gem5 figure our the memory range.
178-
self._remoteMemoryAddressRange = None
165+
# This is gem5 memory. Let gem5 figure our the memory range. Warn
166+
# the user that this memory starts at 4G
167+
warn("A range was not provided. Assuming memory starts a 4G")
168+
self._remoteMemoryAddressRange = AddrRange(
169+
start=0x100000000, size=remote_memory.get_size()
170+
)
179171
super().__init__(
180172
clk_freq=clk_freq,
181173
processor=processor,
@@ -323,7 +315,7 @@ def get_remote_mem_ports(self) -> Sequence[Tuple[AddrRange, Port]]:
323315
"""
324316
return self.get_remote_memory().get_mem_ports()
325317

326-
def get_remote_memory_addr_range(self):
318+
def get_remote_memory_addr_range(self) -> AddrRange:
327319
"""Get the range of the remote memory. This can be omitted in the
328320
future iteration of the board.
329321
:returns: AddrRange of the remote memory
@@ -344,23 +336,22 @@ def _setup_memory_ranges(self):
344336

345337
memory_size = [local_memory.get_size(), remote_memory.get_size()]
346338

347-
memory_ranges = [
348-
AddrRange(start=0x0, size=local_memory.get_size()),
349-
# Remote memory is set using addresses!
350-
self._remoteMemoryAddressRange,
351-
]
352-
339+
# Make sure ranges are compatible with both gem5 and SST configurations
353340
self.mem_ranges = [
354341
AddrRange(start=0x0, size=local_memory.get_size()),
355-
self._remoteMemoryAddressRange,
342+
self.get_remote_memory_addr_range(),
356343
AddrRange(0xC0000000, size=0x100000), # For I/0
357344
]
345+
# else:
346+
# This is gem5 AbstractMemorySystem which does not use address
347+
# ranges explicitly
348+
# pass
358349

359350
local_memory.set_memory_range(
360351
[AddrRange(start=0x0, size=local_memory.get_size())]
361352
)
362353
# XXX: Stop hardcoding addresses @kg
363-
remote_memory.set_memory_range([self._remoteMemoryAddressRange])
354+
remote_memory.set_memory_range([self.get_remote_memory_addr_range()])
364355

365356
@overrides(X86Board)
366357
def get_default_kernel_args(self) -> List[str]:
@@ -369,8 +360,6 @@ def get_default_kernel_args(self) -> List[str]:
369360
"console=ttyS0",
370361
"lpj=7999923",
371362
"root=/dev/sda1",
372-
# "init=/bin/bash",
373-
# "numa=fake=2",
374363
]
375364

376365
@overrides(X86Board)
@@ -553,8 +542,8 @@ def assignISAInt(irq, apicPin):
553542
srat_entries.append(
554543
X86ACPISratMemAffinity(
555544
proximity_domain=1,
556-
base_address=self._remoteMemoryAddressRange.start,
557-
length=self._remoteMemoryAddressRange.size(),
545+
base_address=self.get_remote_memory_addr_range().start,
546+
length=self.get_remote_memory_addr_range().size(),
558547
flags=1,
559548
)
560549
)
@@ -576,8 +565,8 @@ def assignISAInt(irq, apicPin):
576565
),
577566
# XXX: Stop hardcoding addresses @kg
578567
X86E820Entry(
579-
addr=self._remoteMemoryAddressRange.start,
580-
size=f"{self._remoteMemoryAddressRange.size()}B",
568+
addr=self.get_remote_memory_addr_range().start,
569+
size=f"{self.get_remote_memory_addr_range().size()}B",
581570
range_type=1,
582571
),
583572
]
@@ -587,7 +576,6 @@ def assignISAInt(irq, apicPin):
587576
X86E820Entry(addr=0xFFFF0000, size="64kB", range_type=2)
588577
)
589578

590-
print(entries)
591579
self.workload.e820_table.entries = entries
592580

593581
def add_remote_link(self) -> None:
@@ -727,7 +715,6 @@ def _setup_io_devices(self):
727715
APIC_range_size = 1 << 12
728716

729717
# Setup memory system specific settings.
730-
print(self.get_cache_hierarchy())
731718
if self.get_cache_hierarchy().is_ruby():
732719
self.pc.attachIO(self.get_io_bus(), [self.pc.south_bridge.ide.dma])
733720
else:
@@ -933,8 +920,8 @@ def assignISAInt(irq, apicPin):
933920
range_type=1,
934921
),
935922
X86E820Entry(
936-
addr=int(self._remoteMemoryAddressRange.start),
937-
size=f"{self.remote_memory.get_size()}B",
923+
addr=int(self.get_remote_memory_addr_range().start),
924+
size=f"{self.get_remote_memory_addr_range().size()}B",
938925
range_type=12,
939926
),
940927
]
@@ -956,8 +943,8 @@ def _setup_memory_ranges(self):
956943
AddrRange(0xC0000000, size=0x100000), # For I/0
957944
AddrRange(0x100000000, size=self.memory.get_size()),
958945
AddrRange(
959-
int(self._remoteMemoryAddressRange.start),
960-
size=self.remote_memory.get_size(),
946+
int(self.get_remote_memory_addr_range().start),
947+
size=self.get_remote_memory_addr_range().size,
961948
),
962949
]
963950

0 commit comments

Comments
 (0)