Skip to content

Commit 9f71f4a

Browse files
cyringCyrIng
authored andcommitted
[Intel][10 to 14th Gen] Allow toggling the L1 Scrubbing
1 parent 150a219 commit 9f71f4a

15 files changed

+196
-16
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -518,6 +518,7 @@ parm: Custom_TDC_Offset:TDC Limit Offset (amp) (short)
518518
parm: Activate_TDC_Limit:Activate TDC Limiting (short)
519519
parm: L1_HW_PREFETCH_Disable:Disable L1 HW Prefetcher (short)
520520
parm: L1_HW_IP_PREFETCH_Disable:Disable L1 HW IP Prefetcher (short)
521+
parm: L1_Scrubbing_Enable:Enable L1 Scrubbing (short)
521522
parm: L2_HW_PREFETCH_Disable:Disable L2 HW Prefetcher (short)
522523
parm: L2_HW_CL_PREFETCH_Disable:Disable L2 HW CL Prefetcher (short)
523524
parm: SpeedStep_Enable:Enable SpeedStep (short)

corefreq-api.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,6 +896,7 @@ typedef struct
896896
BitCC TM_Mask __attribute__ ((aligned (16)));
897897
BitCC ODCM_Mask __attribute__ ((aligned (16)));
898898
BitCC DCU_Mask __attribute__ ((aligned (16)));
899+
BitCC Scrubbing_Mask __attribute__ ((aligned (16)));
899900
BitCC PowerMgmt_Mask __attribute__ ((aligned (16)));
900901
BitCC SpeedStep_Mask __attribute__ ((aligned (16)));
901902
BitCC TurboBoost_Mask __attribute__ ((aligned (16)));
@@ -1032,6 +1033,7 @@ typedef struct
10321033
BitCC ODCM __attribute__ ((aligned (16)));
10331034
BitCC L1_HW_Prefetch __attribute__ ((aligned (16)));
10341035
BitCC L1_HW_IP_Prefetch __attribute__((aligned (16)));
1036+
BitCC /* Intel */ L1_Scrubbing __attribute__ ((aligned (16)));
10351037
BitCC L2_HW_Prefetch __attribute__ ((aligned (16)));
10361038
BitCC L2_HW_CL_Prefetch __attribute__((aligned (16)));
10371039
BitCC PowerMgmt __attribute__ ((aligned (16)));

corefreq-cli-rsc-en.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,6 +1172,7 @@
11721172
#define RSC_TECHNOLOGIES_ICU_CODE_EN "Instruction Cache Unit"
11731173
#define RSC_TECH_L1_HW_PREFETCH_CODE_EN "L1 Prefetcher"
11741174
#define RSC_TECH_L1_HW_IP_PREFETCH_CODE_EN "L1 IP Prefetcher"
1175+
#define RSC_TECH_L1_SCRUBBING_CODE_EN "L1 Scrubbing"
11751176
#define RSC_TECH_L2_HW_PREFETCH_CODE_EN "L2 Prefetcher"
11761177
#define RSC_TECH_L2_HW_CL_PREFETCH_CODE_EN "L2 Line Prefetcher"
11771178
#define RSC_TECHNOLOGIES_SMM_CODE_EN "System Management Mode"
@@ -2111,6 +2112,7 @@
21112112

21122113
#define RSC_BOX_CU_L1_TITLE_CODE " Cache Unit L1 Prefetcher "
21132114
#define RSC_BOX_CU_L1_IP_TITLE_CODE " Cache Unit L1 IP Prefetcher "
2115+
#define RSC_BOX_L1_SCRUBBING_TITLE_CODE " Cache Unit L1 Scrubbing "
21142116
#define RSC_BOX_CU_L2_TITLE_CODE " Cache Unit L2 Prefetcher "
21152117
#define RSC_BOX_CU_L2_CL_TITLE_CODE " Cache Unit L2 CL Prefetcher "
21162118

corefreq-cli-rsc-fr.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,7 @@ do echo -en "$h$l\t""\xc3""\x$h$l""\t"; done; done;echo
646646
#define RSC_TECHNOLOGIES_ICU_CODE_FR "Unit""\xa9"" de cache d'instructions"
647647
#define RSC_TECH_L1_HW_PREFETCH_CODE_FR "Pr""\xa9""lecteur L1"
648648
#define RSC_TECH_L1_HW_IP_PREFETCH_CODE_FR "Pr""\xa9""lecteur L1 IP"
649+
#define RSC_TECH_L1_SCRUBBING_CODE_FR "L1 Scrubbing"
649650
#define RSC_TECH_L2_HW_PREFETCH_CODE_FR "Pr""\xa9""lecteur L2"
650651
#define RSC_TECH_L2_HW_CL_PREFETCH_CODE_FR "Pr""\xa9""lecteur L2 ligne"
651652
#define RSC_TECHNOLOGIES_SMM_CODE_FR "Mode de Gestion Syst""\xa8""me"

corefreq-cli-rsc.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,6 +1025,7 @@ RESOURCE_ST Resource[] = {
10251025
LDT(RSC_TECHNOLOGIES_ICU),
10261026
LDT(RSC_TECH_L1_HW_PREFETCH),
10271027
LDT(RSC_TECH_L1_HW_IP_PREFETCH),
1028+
LDT(RSC_TECH_L1_SCRUBBING),
10281029
LDT(RSC_TECH_L2_HW_PREFETCH),
10291030
LDT(RSC_TECH_L2_HW_CL_PREFETCH),
10301031
LDT(RSC_TECHNOLOGIES_SMM),
@@ -1688,6 +1689,7 @@ RESOURCE_ST Resource[] = {
16881689
LDT(RSC_BOX_MODE_DESC),
16891690
LDQ(RSC_BOX_CU_L1_TITLE),
16901691
LDQ(RSC_BOX_CU_L1_IP_TITLE),
1692+
LDQ(RSC_BOX_L1_SCRUBBING_TITLE),
16911693
LDQ(RSC_BOX_CU_L2_TITLE),
16921694
LDQ(RSC_BOX_CU_L2_CL_TITLE),
16931695
LDQ(RSC_BOX_EIST_TITLE),

corefreq-cli-rsc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -828,6 +828,7 @@ enum {
828828
RSC_TECHNOLOGIES_ICU,
829829
RSC_TECH_L1_HW_PREFETCH,
830830
RSC_TECH_L1_HW_IP_PREFETCH,
831+
RSC_TECH_L1_SCRUBBING,
831832
RSC_TECH_L2_HW_PREFETCH,
832833
RSC_TECH_L2_HW_CL_PREFETCH,
833834
RSC_TECHNOLOGIES_SMM,
@@ -1491,6 +1492,7 @@ enum {
14911492
RSC_BOX_MODE_DESC,
14921493
RSC_BOX_CU_L1_TITLE,
14931494
RSC_BOX_CU_L1_IP_TITLE,
1495+
RSC_BOX_L1_SCRUBBING_TITLE,
14941496
RSC_BOX_CU_L2_TITLE,
14951497
RSC_BOX_CU_L2_CL_TITLE,
14961498
RSC_BOX_EIST_TITLE,

corefreq-cli.c

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3584,6 +3584,15 @@ void L1_HW_IP_Prefetch_Update(TGrid *grid, DATA_TYPE data[])
35843584
TechUpdate(grid, bix, pos, 3, ENABLED(bix));
35853585
}
35863586

3587+
void L1_Scrubbing_Update(TGrid *grid, DATA_TYPE data[])
3588+
{
3589+
const unsigned int bix = RO(Shm)->Proc.Technology.L1_Scrubbing == 1;
3590+
const signed int pos = grid->cell.length - 5;
3591+
UNUSED(data);
3592+
3593+
TechUpdate(grid, bix, pos, 3, ENABLED(bix));
3594+
}
3595+
35873596
void L2_HW_Prefetch_Update(TGrid *grid, DATA_TYPE data[])
35883597
{
35893598
const unsigned int bix = RO(Shm)->Proc.Technology.L2_HW_Prefetch == 1;
@@ -3739,6 +3748,16 @@ REASON_CODE SysInfoTech(Window *win,
37393748
BOXKEY_L1_HW_IP_PREFETCH,
37403749
L1_HW_IP_Prefetch_Update
37413750
},
3751+
{
3752+
(unsigned int[]) { CRC_INTEL, 0 },
3753+
RO(Shm)->Proc.Technology.L1_Scrubbing,
3754+
3, "%s%.*sL1 Scrubbing <%3s>",
3755+
RSC(TECH_L1_SCRUBBING).CODE(), NULL,
3756+
width - (OutFunc ? 24 : 26) - RSZ(TECH_L1_SCRUBBING),
3757+
NULL,
3758+
BOXKEY_L1_SCRUBBING,
3759+
L1_Scrubbing_Update
3760+
},
37423761
{
37433762
(unsigned int[]) { CRC_INTEL, CRC_AMD, CRC_HYGON, 0 },
37443763
RO(Shm)->Proc.Technology.L2_HW_Prefetch,
@@ -13315,6 +13334,54 @@ int Shortcut(SCANKEY *scan)
1331513334
}
1331613335
break;
1331713336

13337+
case BOXKEY_L1_SCRUBBING:
13338+
{
13339+
Window *win = SearchWinListById(scan->key, &winList);
13340+
if (win == NULL)
13341+
{
13342+
const Coordinate origin = {
13343+
.col = (Draw.Size.width - RSZ(BOX_BLANK_DESC)) / 2,
13344+
.row = TOP_HEADER_ROW + 4
13345+
}, select = {
13346+
.col = 0,
13347+
.row = RO(Shm)->Proc.Technology.L1_Scrubbing ? 2 : 1
13348+
};
13349+
AppendWindow(
13350+
CreateBox(scan->key, origin, select,
13351+
(char*) RSC(BOX_L1_SCRUBBING_TITLE).CODE(),
13352+
RSC(BOX_BLANK_DESC).CODE(), blankAttr, SCANKEY_NULL,
13353+
stateStr[1][RO(Shm)->Proc.Technology.L1_Scrubbing],
13354+
stateAttr[RO(Shm)->Proc.Technology.L1_Scrubbing],
13355+
BOXKEY_L1_SCRUBBING_ON,
13356+
stateStr[0][!RO(Shm)->Proc.Technology.L1_Scrubbing],
13357+
stateAttr[!RO(Shm)->Proc.Technology.L1_Scrubbing],
13358+
BOXKEY_L1_SCRUBBING_OFF,
13359+
RSC(BOX_BLANK_DESC).CODE(), blankAttr, SCANKEY_NULL),
13360+
&winList);
13361+
} else {
13362+
SetHead(&winList, win);
13363+
}
13364+
}
13365+
break;
13366+
13367+
case BOXKEY_L1_SCRUBBING_OFF:
13368+
if (!RING_FULL(RW(Shm)->Ring[0])) {
13369+
RING_WRITE( RW(Shm)->Ring[0],
13370+
COREFREQ_IOCTL_TECHNOLOGY,
13371+
COREFREQ_TOGGLE_OFF,
13372+
TECHNOLOGY_L1_SCRUBBING );
13373+
}
13374+
break;
13375+
13376+
case BOXKEY_L1_SCRUBBING_ON:
13377+
if (!RING_FULL(RW(Shm)->Ring[0])) {
13378+
RING_WRITE( RW(Shm)->Ring[0],
13379+
COREFREQ_IOCTL_TECHNOLOGY,
13380+
COREFREQ_TOGGLE_ON,
13381+
TECHNOLOGY_L1_SCRUBBING );
13382+
}
13383+
break;
13384+
1331813385
case BOXKEY_L2_HW_PREFETCH:
1331913386
{
1332013387
Window *win = SearchWinListById(scan->key, &winList);

corefreq-cli.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,9 @@ enum KEY_ENUM {
257257
BOXKEY_L1_HW_IP_PREFETCH = 0x3000000000004210LLU,
258258
BOXKEY_L1_HW_IP_PREFETCH_OFF = 0x3000000000004211LLU,
259259
BOXKEY_L1_HW_IP_PREFETCH_ON = 0x3000000000004212LLU,
260+
BOXKEY_L1_SCRUBBING = 0x3000000000004214LLU,
261+
BOXKEY_L1_SCRUBBING_OFF = 0x3000000000004215LLU,
262+
BOXKEY_L1_SCRUBBING_ON = 0x3000000000004216LLU,
260263
BOXKEY_L2_HW_PREFETCH = 0x3000000000004220LLU,
261264
BOXKEY_L2_HW_PREFETCH_OFF = 0x3000000000004221LLU,
262265
BOXKEY_L2_HW_PREFETCH_ON = 0x3000000000004222LLU,
@@ -641,6 +644,9 @@ int CheckDuplicateKey(void) \
641644
case BOXKEY_L1_HW_IP_PREFETCH: \
642645
case BOXKEY_L1_HW_IP_PREFETCH_OFF: \
643646
case BOXKEY_L1_HW_IP_PREFETCH_ON: \
647+
case BOXKEY_L1_SCRUBBING: \
648+
case BOXKEY_L1_SCRUBBING_OFF: \
649+
case BOXKEY_L1_SCRUBBING_ON: \
644650
case BOXKEY_L2_HW_PREFETCH: \
645651
case BOXKEY_L2_HW_PREFETCH_OFF: \
646652
case BOXKEY_L2_HW_PREFETCH_ON: \

corefreq.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,8 @@ typedef struct
349349
WDT : 29-28,
350350
TM1 : 31-29,
351351
TM2 : 33-31,
352-
_pad64 : 64-33;
352+
L1_Scrubbing : 34-33,
353+
_pad64 : 64-34;
353354
} Technology;
354355

355356
struct {

corefreqd.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1614,6 +1614,10 @@ void Technology_Update( RO(SHM_STRUCT) *RO(Shm),
16141614
RW(Proc)->L1_HW_IP_Prefetch,
16151615
RO(Proc)->DCU_Mask);
16161616

1617+
RO(Shm)->Proc.Technology.L1_Scrubbing = BITWISEAND_CC(LOCKLESS,
1618+
RW(Proc)->L1_Scrubbing,
1619+
RO(Proc)->Scrubbing_Mask) != 0;
1620+
16171621
RO(Shm)->Proc.Technology.L2_HW_Prefetch = BITCMP_CC(LOCKLESS,
16181622
RW(Proc)->L2_HW_Prefetch,
16191623
RO(Proc)->DCU_Mask);

0 commit comments

Comments
 (0)