Closed cyring closed 5 years ago
Possible overflows fixed and verified OK with Hardware. Function somewhat optimized.
CUINT Draw_AltMonitor_Package(Layer *layer, const unsigned int cpu, CUINT row)
{
struct PKG_FLIP_FLOP *PFlop = &Shm->Proc.FlipFlop[!Shm->Proc.Toggle];
CUINT bar0, bar1, margin = draw.Area.LoadWidth - 28;
size_t len;
row += 2;
/* PC02 */
bar0 = Shm->Proc.State.PC02 * margin;
bar1 = margin - bar0;
len = snprintf( buffer, draw.Area.LoadWidth,
"%18llu" "%7.2f" "%% " "%.*s" "%.*s",
PFlop->Delta.PC02, 100.f * Shm->Proc.State.PC02,
bar0, hBar, bar1, hSpace);
memcpy(&LayerAt(layer, code, 5, row), buffer, len);
/* PC03 */
bar0 = Shm->Proc.State.PC03 * margin;
bar1 = margin - bar0;
len = snprintf( buffer, draw.Area.LoadWidth,
"%18llu" "%7.2f" "%% " "%.*s" "%.*s",
PFlop->Delta.PC03, 100.f * Shm->Proc.State.PC03,
bar0, hBar, bar1, hSpace);
memcpy(&LayerAt(layer, code, 5, (row + 1)), buffer, len);
/* PC06 */
bar0 = Shm->Proc.State.PC06 * margin;
bar1 = margin - bar0;
len = snprintf( buffer, draw.Area.LoadWidth,
"%18llu" "%7.2f" "%% " "%.*s" "%.*s",
PFlop->Delta.PC06, 100.f * Shm->Proc.State.PC06,
bar0, hBar, bar1, hSpace);
memcpy(&LayerAt(layer, code, 5, (row + 2)), buffer, len);
/* PC07 */
bar0 = Shm->Proc.State.PC07 * margin;
bar1 = margin - bar0;
len = snprintf( buffer, draw.Area.LoadWidth,
"%18llu" "%7.2f" "%% " "%.*s" "%.*s",
PFlop->Delta.PC07, 100.f * Shm->Proc.State.PC07,
bar0, hBar, bar1, hSpace);
memcpy(&LayerAt(layer, code, 5, (row + 3)), buffer, len);
/* PC08 */
bar0 = Shm->Proc.State.PC08 * margin;
bar1 = margin - bar0;
len = snprintf( buffer, draw.Area.LoadWidth,
"%18llu" "%7.2f" "%% " "%.*s" "%.*s",
PFlop->Delta.PC08, 100.f * Shm->Proc.State.PC08,
bar0, hBar, bar1, hSpace);
memcpy(&LayerAt(layer, code, 5, (row + 4)), buffer, len);
/* PC09 */
bar0 = Shm->Proc.State.PC09 * margin;
bar1 = margin - bar0;
len = snprintf( buffer, draw.Area.LoadWidth,
"%18llu" "%7.2f" "%% " "%.*s" "%.*s",
PFlop->Delta.PC09, 100.f * Shm->Proc.State.PC09,
bar0, hBar, bar1, hSpace);
memcpy(&LayerAt(layer, code, 5, (row + 5)), buffer, len);
/* PC10 */
bar0 = Shm->Proc.State.PC10 * margin;
bar1 = margin - bar0;
len = snprintf( buffer, draw.Area.LoadWidth,
"%18llu" "%7.2f" "%% " "%.*s" "%.*s",
PFlop->Delta.PC10, 100.f * Shm->Proc.State.PC10,
bar0, hBar, bar1, hSpace);
memcpy(&LayerAt(layer, code, 5, (row + 6)), buffer, len);
/* TSC & UNCORE */
len = snprintf( buffer, draw.Area.LoadWidth,
"%18llu" "%.*s" "UNCORE:%18llu",
PFlop->Delta.PTSC, 7+2+18, hSpace, PFlop->Uncore.FC0);
memcpy(&LayerAt(layer, code, 5, (row + 7)), buffer, len);
row += 1 + 8;
return(row);
}
PREV-FUNC | NEW-FUNC |
---|---|
504K | 502K |
-goff
option and handle the Resume notificationhttps://github.com/cyring/CoreFreq/blob/ed75a48c194261c8b20b472fff9025615c88f526/corefreqd.c#L3920
[POSTPONED] If System Gate is disabled, the registered CPU-Idle sub-driver is unmanageable from the Client Kernel window -> too much impacts
[DONE] Client quits when receiving an un-handled signal (USR1, USR2, ILL and so on) -> USR1 & USR2 are now ignored; nothing decided yet about others signals
#define RSC_LAYOUT_RULLER_FREQUENCY_CODE \
{ \
'-','-','-',' ','F','r','e','q','(','M','H','z',')',' ','R','a',\
't','i','o',' ','-',' ','T','u','r','b','o',' ','-','-','-',' ',\
'C','0',' ','-','-','-','-',' ','C','1',' ','-','-','-','-',' ',\
'C','3',' ','-','-','-','-',' ','C','6',' ','-','-','-','-',' ',\
'C','7',' ','-','-','M','i','n',' ','T','M','P',' ','M','a','x',\
' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-' \
}
#define RSC_LAYOUT_RULLER_INST_CODE \
{ \
'-','-','-','-','-','-','-','-','-','-','-','-',' ','I','P','S',\
' ','-','-','-','-','-','-','-','-','-','-','-','-','-','-',' ',\
'I','P','C',' ','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-',' ','C','P','I',' ','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-',' ','I','N','S','T',' ','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-' \
}
#define RSC_LAYOUT_RULLER_CYCLES_CODE \
{ \
'-','-','-','-','-','-','-','-','-','-','-','-','-','-',' ','C',\
'0',':','U','C','C',' ','-','-','-','-','-','-','-','-','-','-',\
' ','C','0',':','U','R','C',' ','-','-','-','-','-','-','-','-',\
'-','-','-','-',' ','C','1',' ','-','-','-','-','-','-','-','-',\
'-','-','-','-','-',' ','T','S','C',' ','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-' \
}
#define RSC_LAYOUT_RULLER_CSTATES_CODE \
{ \
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
' ','C','1',' ','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-',' ','C','3',' ','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-',' ','C','6',' ','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-',' ','C','7',' ','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-' \
}
#define RSC_LAYOUT_RULLER_INTERRUPTS_CODE \
{ \
'-','-','-','-','-','-','-','-','-','-',' ','S','M','I',' ','-',\
'-','-','-','-','-','-','-','-','-','-','-',' ','N','M','I','[',\
' ','L','O','C','A','L',' ',' ',' ','U','N','K','N','O','W','N',\
' ',' ','P','C','I','_','S','E','R','R','#',' ',' ','I','O','_',\
'C','H','E','C','K',']',' ','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-',\
'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-' \
}
#define RSC_LAYOUT_POWER_MONITOR_ATTR \
{ \
LWK,LWK,LWK,LWK,LWK,LWK,LWK,LWK,LWK,LWK, \
HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK, \
LWK,LWK,LWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK,HWK \
}
#define RSC_LAYOUT_POWER_MONITOR_CODE \
{ \
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', \
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', \
' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ' \
}
#define RSC_CREATE_SETTINGS_COND_CODE " "
#define RSC_CREATE_HELP_BLANK_CODE " "
#define RSC_CREATE_ADV_HELP_BLANK_CODE " "
#define LDV(attr_var, en_var, fr_var) \
.Attr = attr_var, \
.Code = { \
[LOC_EN] = (ASCII*) en_var, \
[LOC_FR] = (ASCII*) fr_var \
} \
#define LDA(attr_var, en_var, fr_var) \
{ \
LDV(attr_var, en_var, fr_var), \
.Size = { \
[LOC_EN] = sizeof(en_var), \
[LOC_FR] = sizeof(fr_var) \
} \
}
#define LDB(attr_var) \
{ \
LDV(attr_var, hSpace, hSpace), \
.Size = { \
[LOC_EN] = sizeof(HSPACE), \
[LOC_FR] = sizeof(HSPACE) \
} \
}
#define LDS(attr_var, en_var, fr_var) \
{ \
LDV(attr_var, en_var, fr_var), \
.Size = { \
[LOC_EN] = __builtin_strlen(en_var), \
[LOC_FR] = __builtin_strlen(fr_var) \
} \
}
#define LDT(en_var, fr_var) LDS(vColor, en_var, fr_var)
[RSC_CREATE_SETTINGS_COND0] = LDS( Rsc_CreateSettings_Cond_Attr[0],
RSC_CREATE_SETTINGS_COND_CODE,
RSC_CREATE_SETTINGS_COND_CODE),
[RSC_CREATE_SETTINGS_COND1] = LDS( Rsc_CreateSettings_Cond_Attr[1],
RSC_CREATE_SETTINGS_COND_CODE,
RSC_CREATE_SETTINGS_COND_CODE),
[RSC_CREATE_ADV_HELP_COND0] = LDS( Rsc_CreateAdvHelp_Cond_Attr[0],
RSC_CREATE_ADV_HELP_BLANK_CODE,
RSC_CREATE_ADV_HELP_BLANK_CODE),
[RSC_CREATE_ADV_HELP_COND1] = LDS( Rsc_CreateAdvHelp_Cond_Attr[1],
RSC_CREATE_ADV_HELP_BLANK_CODE,
RSC_CREATE_ADV_HELP_BLANK_CODE),
[RSC_HELP_BLANK] = LDS( vColor,
RSC_CREATE_HELP_BLANK_CODE,
RSC_CREATE_HELP_BLANK_CODE),
StoreWindow(wHelp, .color[1].select, MAKE_PRINT_FOCUS);
https://github.com/cyring/CoreFreq/blob/516bf2ae94ae2488ef71c7beb615f84a7bd5dfc0/corefreqk.h#L3784
[Skylake_S] = { /* 39*/
.Signature = _Skylake_S,
.Query = Query_Broadwell,
.Update = PerCore_Skylake_Query,
.Start = Start_Skylake,
.Stop = Stop_Skylake,
.Exit = NULL,
.Timer = InitTimer_Skylake,
.BaseClock = BaseClock_Skylake,
.ClockMod = ClockMod_Skylake_HWP,
.TurboClock = Intel_Turbo_Config8C,
.thermalFormula = THERMAL_FORMULA_INTEL,
.voltageFormula = VOLTAGE_FORMULA_INTEL_SNB,
.powerFormula = POWER_FORMULA_INTEL,
.PCI_ids = PCI_Skylake_ids,
.Uncore = {
.Start = Start_Uncore_Skylake,
.Stop = Stop_Uncore_Skylake,
.ClockMod = Haswell_Uncore_Ratio
},
.Specific = Void_Specific,
.SystemDriver = &SKL_Driver,
.Architecture = Arch_Skylake_S
},
https://github.com/cyring/CoreFreq/blob/516bf2ae94ae2488ef71c7beb615f84a7bd5dfc0/corefreqk.c#L2130
long Haswell_Uncore_Ratio(CLOCK_ARG *pClockMod)
{
long rc = 0;
UNCORE_RATIO_LIMIT UncoreRatio = {.value = 0};
RDMSR(UncoreRatio, MSR_HSW_UNCORE_RATIO_LIMIT);
if (pClockMod != NULL) {
unsigned short WrRdMSR = 0;
switch (pClockMod->NC) {
case CLOCK_MOD_MAX:
UncoreRatio.MaxRatio += pClockMod->Offset;
WrRdMSR = 1;
break;
case CLOCK_MOD_MIN:
UncoreRatio.MinRatio += pClockMod->Offset;
WrRdMSR = 1;
break;
}
if (WrRdMSR) {
WRMSR(UncoreRatio, MSR_HSW_UNCORE_RATIO_LIMIT);
RDMSR(UncoreRatio, MSR_HSW_UNCORE_RATIO_LIMIT);
rc = 2;
}
}
Proc->Uncore.Boost[UNCORE_BOOST(MIN)] = UncoreRatio.MinRatio;
Proc->Uncore.Boost[UNCORE_BOOST(MAX)] = UncoreRatio.MaxRatio;
return(rc);
}
ComputeRatioShifts(Shm->Uncore.Boost[BOOST(MIN)],
1,
Shm->Proc.Features.Factory.Ratio,
&lowestShift,
&highestShift);
void TrapSignal(int operation)
{
if (operation == 0) {
Shm->AppCli = 0;
} else {
const int ignored[] = {
SIGUSR1, SIGUSR2, SIGTTIN, SIGTTOU, SIGIO,
SIGILL, SIGBUS, SIGFPE, SIGPWR, SIGSYS, SIGTRAP,
SIGALRM, SIGPROF, SIGPIPE, SIGABRT, SIGSEGV,
SIGXCPU, SIGXFSZ, SIGSTKFLT, SIGVTALRM, SIGCHLD
}, handled[] = {
SIGINT, SIGQUIT, SIGTERM, SIGTSTP, SIGHUP
};
/* SIGKILL,SIGCONT,SIGSTOP,SIGURG,SIGWINCH: Reserved */
int signo;
Shm->AppCli = getpid();
for (signo = SIGRTMIN; signo <= SIGRTMAX; signo++) {
signal(signo, SIG_IGN);
}
for (signo = 0; signo < sizeof(ignored)/sizeof(int); signo++) {
signal(ignored[signo], SIG_IGN);
}
for (signo = 0; signo < sizeof(handled)/sizeof(int); signo++) {
signal(handled[signo], Emergency);
}
}
}
MSR_IA32_PERF_CTL
before checking the Turbo capability
https://github.com/cyring/CoreFreq/blob/131560030fa5159d17ebcece71c50690496b59ce/corefreqk.c#L3903void TurboBoost_Technology(CORE *Core, SET_TARGET SetTarget,
GET_TARGET GetTarget,
CMP_TARGET CmpTarget,
unsigned int TurboRatio,
unsigned int ValidRatio)
{ /* Per SMT */
int ToggleFeature;
MISC_PROC_FEATURES MiscFeatures = {.value = 0};
RDMSR(MiscFeatures, MSR_IA32_MISC_ENABLE);
BITSET_CC(LOCKLESS, Proc->TurboBoost_Mask, Core->Bind);
RDMSR(Core->PowerThermal.PerfControl, MSR_IA32_PERF_CTL);
if ((MiscFeatures.Turbo_IDA == 0) && (Proc->Features.Power.EAX.TurboIDA))
{
switch (TurboBoost_Enable) {
/* ... */
}
static int SortByCommand(const void *p1, const void *p2, void *arg)
{
TASK_MCB *task1 = (TASK_MCB*) p1, *task2 = (TASK_MCB*) p2;
SHM_STRUCT *Shm = (SHM_STRUCT *) arg;
int sort = strncmp(task1->comm, task2->comm, TASK_COMM_LEN);
sort *= reverseSign[Shm->SysGate.reverseOrder];
return(sort);
}
All of these implemented.
Draw_AltMonitor_Package
has to be fixed with capable hardware