gem5 v24.0.0.0
Loading...
Searching...
No Matches
policy_pf.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 */
37
38#include "mem/qos/policy_pf.hh"
39
40#include <algorithm>
41
42#include "base/logging.hh"
43#include "params/QoSPropFairPolicy.hh"
44
45namespace gem5
46{
47
48namespace memory
49{
50
51namespace qos
52{
53
55 : Policy(p), weight(p.weight)
56{
58 "weight must be a value between 0 and 1");
59}
60
63
64template <typename Requestor>
65void
66PropFairPolicy::initRequestor(const Requestor requestor, const double score)
67{
68 RequestorID id = memCtrl->system()->lookupRequestorId(requestor);
69
70 assert(id != Request::invldRequestorId);
71
72 // Setting the Initial score for the selected requestor.
73 history.push_back(std::make_pair(id, score));
74
76 "Policy's maximum number of requestors is currently dictated "
77 "by the maximum number of priorities\n");
78}
79
80void
81PropFairPolicy::initRequestorName(const std::string requestor, const double score)
82{
83 initRequestor(requestor, score);
84}
85
86void
87PropFairPolicy::initRequestorObj(const SimObject* requestor, const double score)
88{
89 initRequestor(requestor, score);
90}
91
92double
94 const double old_score, const uint64_t served_bytes) const
95{
96 return ((1.0 - weight) * old_score) + (weight * served_bytes);
97}
98
99uint8_t
100PropFairPolicy::schedule(const RequestorID pkt_id, const uint64_t pkt_size)
101{
102 auto sort_pred =
103 [] (const RequestorHistory& lhs, const RequestorHistory& rhs)
104 { return lhs.second > rhs.second; };
105
106 // Sorting in reverse in base of personal history:
107 // First elements have higher history/score -> lower priority.
108 // The qos priority is the position in the sorted vector.
109 std::sort(history.begin(), history.end(), sort_pred);
110
111 const double served_bytes = static_cast<double>(pkt_size);
112
113 uint8_t pkt_priority = 0;
114 for (auto m_hist = history.begin(); m_hist != history.end(); m_hist++) {
115
116 RequestorID curr_id = m_hist->first;
117 double& curr_score = m_hist->second;
118
119 if (curr_id == pkt_id) {
120 // The qos priority is the position in the sorted vector.
121 pkt_priority = std::distance(history.begin(), m_hist);
122
123 curr_score = updateScore(curr_score, served_bytes);
124 } else {
125 curr_score = updateScore(curr_score, 0);
126 }
127 }
128
129 return pkt_priority;
130}
131
132} // namespace qos
133} // namespace memory
134} // namespace gem5
@ invldRequestorId
Invalid requestor id for assertion checking only.
Definition request.hh:286
Abstract superclass for simulation objects.
RequestorID lookupRequestorId(const SimObject *obj) const
Looks up the RequestorID for a given SimObject returns an invalid RequestorID (invldRequestorId) if n...
Definition system.cc:432
uint8_t numPriorities() const
Gets the total number of priority levels in the QoS memory controller.
Definition mem_ctrl.hh:366
System * system() const
read the system pointer
Definition mem_ctrl.hh:370
QoS Policy base class.
Definition policy.hh:71
MemCtrl * memCtrl
Pointer to parent memory controller implementing the policy.
Definition policy.hh:123
void initRequestorObj(const SimObject *requestor, const double score)
Initialize the requestor's score by providing the requestor's SimObject pointer and initial score val...
Definition policy_pf.cc:87
void initRequestorName(const std::string requestor, const double score)
Initialize the requestor's score by providing the requestor's name and initial score value.
Definition policy_pf.cc:81
virtual uint8_t schedule(const RequestorID id, const uint64_t pkt_size) override
Schedules a packet based on proportional fair configuration.
Definition policy_pf.cc:100
std::vector< RequestorHistory > history
Definition policy_pf.hh:120
QoSPropFairPolicyParams Params
Definition policy_pf.hh:71
void initRequestor(const Requestor requestor, const double score)
Definition policy_pf.cc:66
const double weight
PF Policy weight.
Definition policy_pf.hh:116
double updateScore(const double old_score, const uint64_t served_bytes) const
Definition policy_pf.cc:93
STL pair class.
Definition stl.hh:58
#define fatal_if(cond,...)
Conditional fatal macro that checks the supplied condition and only causes a fatal error if the condi...
Definition logging.hh:236
Bitfield< 0 > p
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
uint16_t RequestorID
Definition request.hh:95
Definition mem.h:38

Generated on Tue Jun 18 2024 16:24:05 for gem5 by doxygen 1.11.0