mem-cache: Allow dynamic configuration of MaxCapacity pp

This will allow gem5 to configure the maximum capacity of a
partition dynamically during simulation, rather than
having it statically defined at construction time

Change-Id: Ib55c9990a6bc2930abaf2438c13337acc643520f
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
This commit is contained in:
Giacomo Travaglini
2024-04-05 10:46:40 +01:00
parent 3100418fb1
commit fdcfc28cf4
2 changed files with 29 additions and 15 deletions

View File

@@ -68,24 +68,30 @@ MaxCapacityPartitioningPolicy::MaxCapacityPartitioningPolicy
const uint64_t partition_id = this->partitionIDs[i];
const double cap_frac = capacities[i];
// check Capacity Fraction (cap_frac) is actually a fraction in [0,1]
if (!(cap_frac >= 0 && cap_frac <= 1)) {
fatal("MaxCapacity Partitioning Policy for PartitionID %d has "
"Capacity Fraction %f outside of [0,1] range", partition_id,
cap_frac);
}
const uint64_t allocated_block_cnt = cap_frac * totalBlockCount;
partitionIdMaxCapacity.emplace(partition_id, allocated_block_cnt);
DPRINTF(PartitionPolicy, "Configured MaxCapacity Partitioning Policy "
"for PartitionID: %d to use portion of size %f (%d cache blocks "
"of %d total)\n", partition_id, cap_frac, allocated_block_cnt,
totalBlockCount);
// Configure partition
configurePartition(partition_id, cap_frac);
}
}
void
MaxCapacityPartitioningPolicy::configurePartition(uint64_t partition_id,
double cap_frac)
{
// check Capacity Fraction (cap_frac) is actually a fraction in [0,1]
panic_if(!(cap_frac >= 0 && cap_frac <= 1),
"MaxCapacity Partitioning Policy for PartitionID %d has "
"Capacity Fraction %f outside of [0,1] range", partition_id,
cap_frac);
const uint64_t allocated_block_cnt = cap_frac * totalBlockCount;
partitionIdMaxCapacity.emplace(partition_id, allocated_block_cnt);
DPRINTF(PartitionPolicy, "Configured MaxCapacity Partitioning Policy "
"for PartitionID: %d to use portion of size %f (%d cache blocks "
"of %d total)\n", partition_id, cap_frac, allocated_block_cnt,
totalBlockCount);
}
void
MaxCapacityPartitioningPolicy::filterByPartition(
std::vector<ReplaceableEntry *> &entries,

View File

@@ -79,6 +79,14 @@ class MaxCapacityPartitioningPolicy : public BasePartitioningPolicy
void
notifyRelease(const uint64_t partition_id) override;
/**
* Set the maximum capacity (as a fraction) for the provided partition
*
* param partion_id partition to be configured
* param cap_frac max capacity for the partition (0 < cap_frac < 1)
*/
void configurePartition(uint64_t partition_id, double cap_frac);
private:
/**
* Total number of cache blocks