Skip to content

Commit 4bc38d6

Browse files
committed
[CLI] Responsive ruler to architectural context
1 parent f622261 commit 4bc38d6

File tree

2 files changed

+140
-60
lines changed

2 files changed

+140
-60
lines changed

aarch64/corefreq-cli.c

Lines changed: 70 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -114,34 +114,70 @@ struct RULER_ST Ruler = {
114114
Ruler.TopOf = (struct TOPOF) { .Top = _cpu , .Boost = _boost} \
115115
)
116116

117+
void LowestOfRuler(unsigned int cpu, enum RATIO_BOOST rb, unsigned int *lowest)
118+
{
119+
if (RO(Shm)->Cpu[cpu].Boost[rb] < RO(Shm)->Cpu[Ruler.Top[rb]].Boost[rb])
120+
{
121+
Ruler.Top[rb] = cpu;
122+
}
123+
if (RO(Shm)->Cpu[cpu].Boost[rb] < (*lowest))
124+
{
125+
(*lowest) = RO(Shm)->Cpu[cpu].Boost[rb];
126+
SetTopOfRuler(Ruler.Top[rb], rb);
127+
}
128+
}
129+
130+
void HighestOfRuler(unsigned int cpu, enum RATIO_BOOST rb,unsigned int *highest)
131+
{
132+
if (RO(Shm)->Cpu[cpu].Boost[rb] > RO(Shm)->Cpu[Ruler.Top[rb]].Boost[rb])
133+
{
134+
Ruler.Top[rb] = cpu;
135+
}
136+
if (RO(Shm)->Cpu[cpu].Boost[rb] > (*highest))
137+
{
138+
(*highest) = RO(Shm)->Cpu[cpu].Boost[rb];
139+
SetTopOfRuler(Ruler.Top[rb], rb);
140+
}
141+
}
142+
117143
void SetTopOftheTop( unsigned int cpu, enum RATIO_BOOST rb,
118144
unsigned int *lowest, unsigned int *highest )
119145
{
120-
switch (rb) {
121-
case BOOST(HWP_MIN):
122-
case BOOST(MIN):
123-
if(RO(Shm)->Cpu[cpu].Boost[rb] < RO(Shm)->Cpu[ Ruler.Top[rb] ].Boost[rb])
124-
{
125-
Ruler.Top[rb] = cpu;
126-
}
127-
if (RO(Shm)->Cpu[cpu].Boost[rb] < (*lowest))
128-
{
129-
(*lowest) = RO(Shm)->Cpu[cpu].Boost[rb];
130-
SetTopOfRuler(Ruler.Top[rb], rb);
131-
}
132-
break;
133-
default:
134-
if(RO(Shm)->Cpu[cpu].Boost[rb] > RO(Shm)->Cpu[ Ruler.Top[rb] ].Boost[rb])
135-
{
136-
Ruler.Top[rb] = cpu;
137-
}
138-
if (RO(Shm)->Cpu[cpu].Boost[rb] > (*highest))
139-
{
140-
(*highest) = RO(Shm)->Cpu[cpu].Boost[rb];
141-
SetTopOfRuler(Ruler.Top[rb], rb);
142-
}
143-
break;
144-
}
146+
switch (rb) {
147+
case BOOST(HWP_MIN):
148+
if ((RO(Shm)->Proc.Features.HWP_Enable == 1)
149+
|| (RO(Shm)->Proc.Features.ACPI_CPPC == 1))
150+
{
151+
LowestOfRuler(cpu, rb, lowest);
152+
}
153+
break;
154+
case BOOST(MIN):
155+
LowestOfRuler(cpu, rb, lowest);
156+
break;
157+
case BOOST(TGT):
158+
if ((RO(Shm)->Proc.Features.HWP_Enable == 0)
159+
&& (RO(Shm)->Proc.Features.ACPI_CPPC == 0))
160+
{
161+
HighestOfRuler(cpu, rb, highest);
162+
}
163+
break;
164+
case BOOST(HWP_MAX) ... BOOST(HWP_TGT):
165+
if ((RO(Shm)->Proc.Features.HWP_Enable == 1)
166+
|| (RO(Shm)->Proc.Features.ACPI_CPPC == 1))
167+
{
168+
HighestOfRuler(cpu, rb, highest);
169+
}
170+
break;
171+
case BOOST(18C) ... BOOST(1C):
172+
if (RO(Shm)->Proc.Features.Turbo_OPP == 1)
173+
{
174+
HighestOfRuler(cpu, rb, highest);
175+
}
176+
break;
177+
default:
178+
HighestOfRuler(cpu, rb, highest);
179+
break;
180+
}
145181
}
146182

147183
void InsertionSortRuler(unsigned int base[],
@@ -170,11 +206,15 @@ void AggregateRatio(void)
170206
unsigned int, RO(Shm)->Proc.Features.Factory.Clock.Hz
171207
);
172208
enum RATIO_BOOST lt, rt, min_boost = BOOST(MIN);
173-
if ((RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(HWP_MIN)] > 0)
174-
&& (RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(HWP_MIN)]
175-
< RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(MIN)]))
176-
{
177-
min_boost = BOOST(HWP_MIN);
209+
210+
if ((RO(Shm)->Proc.Features.HWP_Enable == 1)
211+
|| (RO(Shm)->Proc.Features.ACPI_CPPC == 1)) {
212+
if ((RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(HWP_MIN)] > 0)
213+
&& (RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(HWP_MIN)]
214+
< RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(MIN)]))
215+
{
216+
min_boost = BOOST(HWP_MIN);
217+
}
178218
}
179219
unsigned int cpu,
180220
lowest = RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(MAX)],

x86_64/corefreq-cli.c

Lines changed: 70 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -114,34 +114,70 @@ struct RULER_ST Ruler = {
114114
Ruler.TopOf = (struct TOPOF) { .Top = _cpu , .Boost = _boost} \
115115
)
116116

117+
void LowestOfRuler(unsigned int cpu, enum RATIO_BOOST rb, unsigned int *lowest)
118+
{
119+
if (RO(Shm)->Cpu[cpu].Boost[rb] < RO(Shm)->Cpu[Ruler.Top[rb]].Boost[rb])
120+
{
121+
Ruler.Top[rb] = cpu;
122+
}
123+
if (RO(Shm)->Cpu[cpu].Boost[rb] < (*lowest))
124+
{
125+
(*lowest) = RO(Shm)->Cpu[cpu].Boost[rb];
126+
SetTopOfRuler(Ruler.Top[rb], rb);
127+
}
128+
}
129+
130+
void HighestOfRuler(unsigned int cpu, enum RATIO_BOOST rb,unsigned int *highest)
131+
{
132+
if (RO(Shm)->Cpu[cpu].Boost[rb] > RO(Shm)->Cpu[Ruler.Top[rb]].Boost[rb])
133+
{
134+
Ruler.Top[rb] = cpu;
135+
}
136+
if (RO(Shm)->Cpu[cpu].Boost[rb] > (*highest))
137+
{
138+
(*highest) = RO(Shm)->Cpu[cpu].Boost[rb];
139+
SetTopOfRuler(Ruler.Top[rb], rb);
140+
}
141+
}
142+
117143
void SetTopOftheTop( unsigned int cpu, enum RATIO_BOOST rb,
118144
unsigned int *lowest, unsigned int *highest )
119145
{
120-
switch (rb) {
121-
case BOOST(HWP_MIN):
122-
case BOOST(MIN):
123-
if(RO(Shm)->Cpu[cpu].Boost[rb] < RO(Shm)->Cpu[ Ruler.Top[rb] ].Boost[rb])
124-
{
125-
Ruler.Top[rb] = cpu;
126-
}
127-
if (RO(Shm)->Cpu[cpu].Boost[rb] < (*lowest))
128-
{
129-
(*lowest) = RO(Shm)->Cpu[cpu].Boost[rb];
130-
SetTopOfRuler(Ruler.Top[rb], rb);
131-
}
132-
break;
133-
default:
134-
if(RO(Shm)->Cpu[cpu].Boost[rb] > RO(Shm)->Cpu[ Ruler.Top[rb] ].Boost[rb])
135-
{
136-
Ruler.Top[rb] = cpu;
137-
}
138-
if (RO(Shm)->Cpu[cpu].Boost[rb] > (*highest))
139-
{
140-
(*highest) = RO(Shm)->Cpu[cpu].Boost[rb];
141-
SetTopOfRuler(Ruler.Top[rb], rb);
142-
}
143-
break;
144-
}
146+
switch (rb) {
147+
case BOOST(HWP_MIN):
148+
if ((RO(Shm)->Proc.Features.HWP_Enable == 1)
149+
|| (RO(Shm)->Proc.Features.ACPI_CPPC == 1))
150+
{
151+
LowestOfRuler(cpu, rb, lowest);
152+
}
153+
break;
154+
case BOOST(MIN):
155+
LowestOfRuler(cpu, rb, lowest);
156+
break;
157+
case BOOST(TGT):
158+
if ((RO(Shm)->Proc.Features.HWP_Enable == 0)
159+
&& (RO(Shm)->Proc.Features.ACPI_CPPC == 0))
160+
{
161+
HighestOfRuler(cpu, rb, highest);
162+
}
163+
break;
164+
case BOOST(HWP_MAX) ... BOOST(HWP_TGT):
165+
if ((RO(Shm)->Proc.Features.HWP_Enable == 1)
166+
|| (RO(Shm)->Proc.Features.ACPI_CPPC == 1))
167+
{
168+
HighestOfRuler(cpu, rb, highest);
169+
}
170+
break;
171+
case BOOST(18C) ... BOOST(1C):
172+
if (RO(Shm)->Proc.Technology.Turbo == 1)
173+
{
174+
HighestOfRuler(cpu, rb, highest);
175+
}
176+
break;
177+
default:
178+
HighestOfRuler(cpu, rb, highest);
179+
break;
180+
}
145181
}
146182

147183
void InsertionSortRuler(unsigned int base[],
@@ -170,11 +206,15 @@ void AggregateRatio(void)
170206
unsigned int, RO(Shm)->Proc.Features.Factory.Clock.Hz
171207
);
172208
enum RATIO_BOOST lt, rt, min_boost = BOOST(MIN);
173-
if ((RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(HWP_MIN)] > 0)
174-
&& (RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(HWP_MIN)]
175-
< RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(MIN)]))
176-
{
177-
min_boost = BOOST(HWP_MIN);
209+
210+
if ((RO(Shm)->Proc.Features.HWP_Enable == 1)
211+
|| (RO(Shm)->Proc.Features.ACPI_CPPC == 1)) {
212+
if ((RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(HWP_MIN)] > 0)
213+
&& (RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(HWP_MIN)]
214+
< RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(MIN)]))
215+
{
216+
min_boost = BOOST(HWP_MIN);
217+
}
178218
}
179219
unsigned int cpu,
180220
lowest = RO(Shm)->Cpu[RO(Shm)->Proc.Service.Core].Boost[BOOST(MAX)],

0 commit comments

Comments
 (0)