Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit06c5fe9

Browse files
xiaochenshensuryasaimadhu
authored andcommitted
x86/resctrl: Fix incorrect local bandwidth when mba_sc is enabled
The MBA software controller (mba_sc) is a feedback loop whichperiodically reads MBM counters and tries to restrict the bandwidthbelow a user-specified value. It tags along the MBM counter overflowhandler to do the updates with 1s interval in mbm_update() andupdate_mba_bw().The purpose of mbm_update() is to periodically read the MBM counters tomake sure that the hardware counter doesn't wrap around more than oncebetween user samplings. mbm_update() calls __mon_event_count() for localbandwidth updating when mba_sc is not enabled, but calls mbm_bw_count()instead when mba_sc is enabled. __mon_event_count() will not be calledfor local bandwidth updating in MBM counter overflow handler, but it isstill called when reading MBM local bandwidth counter file'mbm_local_bytes', the call path is as below: rdtgroup_mondata_show() mon_event_read() mon_event_count() __mon_event_count()In __mon_event_count(), m->chunks is updated by delta chunks which iscalculated from previous MSR value (m->prev_msr) and current MSR value.When mba_sc is enabled, m->chunks is also updated in mbm_update() bymistake by the delta chunks which is calculated from m->prev_bw_msrinstead of m->prev_msr. But m->chunks is not used in update_mba_bw() inthe mba_sc feedback loop.When reading MBM local bandwidth counter file, m->chunks was changedunexpectedly by mbm_bw_count(). As a result, the incorrect localbandwidth counter which calculated from incorrect m->chunks is shown tothe user.Fix this by removing incorrect m->chunks updating in mbm_bw_count() inMBM counter overflow handler, and always calling __mon_event_count() inmbm_update() to make sure that the hardware local bandwidth counterdoesn't wrap around.Test steps: # Run workload with aggressive memory bandwidth (e.g., 10 GB/s) git clonehttps://github.com/intel/intel-cmt-cat && cd intel-cmt-cat && make ./tools/membw/membw -c 0 -b 10000 --read # Enable MBA software controller mount -t resctrl resctrl -o mba_MBps /sys/fs/resctrl # Create control group c1 mkdir /sys/fs/resctrl/c1 # Set MB throttle to 6 GB/s echo "MB:0=6000;1=6000" > /sys/fs/resctrl/c1/schemata # Write PID of the workload to tasks file echo `pidof membw` > /sys/fs/resctrl/c1/tasks # Read local bytes counters twice with 1s interval, the calculated # local bandwidth is not as expected (approaching to 6 GB/s): local_1=`cat /sys/fs/resctrl/c1/mon_data/mon_L3_00/mbm_local_bytes` sleep 1 local_2=`cat /sys/fs/resctrl/c1/mon_data/mon_L3_00/mbm_local_bytes` echo "local b/w (bytes/s):" `expr $local_2 - $local_1`Before fix: local b/w (bytes/s): 11076796416After fix: local b/w (bytes/s): 5465014272Fixes:ba0f26d (x86/intel_rdt/mba_sc: Prepare for feedback loop)Signed-off-by: Xiaochen Shen <xiaochen.shen@intel.com>Signed-off-by: Borislav Petkov <bp@suse.de>Reviewed-by: Tony Luck <tony.luck@intel.com>Cc: <stable@vger.kernel.org>Link:https://lkml.kernel.org/r/1607063279-19437-1-git-send-email-xiaochen.shen@intel.com
1 parent29ac40c commit06c5fe9

File tree

1 file changed

+2
-4
lines changed

1 file changed

+2
-4
lines changed

‎arch/x86/kernel/cpu/resctrl/monitor.c‎

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,6 @@ static void mbm_bw_count(u32 rmid, struct rmid_read *rr)
279279
return;
280280

281281
chunks=mbm_overflow_count(m->prev_bw_msr,tval,rr->r->mbm_width);
282-
m->chunks+=chunks;
283282
cur_bw= (chunks*r->mon_scale) >>20;
284283

285284
if (m->delta_comp)
@@ -450,15 +449,14 @@ static void mbm_update(struct rdt_resource *r, struct rdt_domain *d, int rmid)
450449
}
451450
if (is_mbm_local_enabled()) {
452451
rr.evtid=QOS_L3_MBM_LOCAL_EVENT_ID;
452+
__mon_event_count(rmid,&rr);
453453

454454
/*
455455
* Call the MBA software controller only for the
456456
* control groups and when user has enabled
457457
* the software controller explicitly.
458458
*/
459-
if (!is_mba_sc(NULL))
460-
__mon_event_count(rmid,&rr);
461-
else
459+
if (is_mba_sc(NULL))
462460
mbm_bw_count(rmid,&rr);
463461
}
464462
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp