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