[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <SJ1PR11MB608387EF18E2BEAE9F719899FCEAA@SJ1PR11MB6083.namprd11.prod.outlook.com>
Date: Mon, 13 Oct 2025 15:35:24 +0000
From: "Luck, Tony" <tony.luck@...el.com>
To: "Moger, Babu" <bmoger@....com>, "Chatre, Reinette"
<reinette.chatre@...el.com>, Babu Moger <babu.moger@....com>,
"Dave.Martin@....com" <Dave.Martin@....com>, "james.morse@....com"
<james.morse@....com>, "tglx@...utronix.de" <tglx@...utronix.de>,
"mingo@...hat.com" <mingo@...hat.com>, "bp@...en8.de" <bp@...en8.de>,
"dave.hansen@...ux.intel.com" <dave.hansen@...ux.intel.com>
CC: "x86@...nel.org" <x86@...nel.org>, "hpa@...or.com" <hpa@...or.com>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"peternewman@...gle.com" <peternewman@...gle.com>, "Eranian, Stephane"
<eranian@...gle.com>, "gautham.shenoy@....com" <gautham.shenoy@....com>
Subject: RE: [PATCH v4] x86/resctrl: Fix miscount of bandwidth event when
reactivating previously Unavailable RMID
> > The behavior of the counter is different on Intel where there are enough
> > counters backing the RMID and the "Unavailable" bit is not set when counter
> > starts counting but instead the counter returns "0". For example, when
Note that the h/w counter doesn't really return "0" (except for the first time
after CPU reset).
> > running equivalent of "step 1" on an Intel system it looks like:
> >
> > # cd /sys/fs/resctrl
> > # mkdir mon_groups/test1
While making the directory mon_add_all_files() does this:
if (!do_sum && resctrl_is_mbm_event(mevt->evtid))
mon_event_read(&rr, r, d, prgrp, &d->hdr.cpu_mask, mevt->evtid, true);
Which in __mon_event_count() does:
if (rr->first) {
if (rr->is_mbm_cntr)
resctrl_arch_reset_cntr(rr->r, rr->d, closid, rmid, cntr_id, rr->evtid);
else
resctrl_arch_reset_rmid(rr->r, rr->d, closid, rmid, rr->evtid);
m = get_mbm_state(rr->d, closid, rmid, rr->evtid);
if (m)
memset(m, 0, sizeof(struct mbm_state));
return 0;
}
If you dig into resctrl_arch_reset_rmid() you will see that it reads the h/w counter and
then that becomes the start point for subsequent values reported when a user reads
from the resctrl event file.
> > # echo $$ > mon_groups/test1/tasks
> > # cat mon_groups/test1/mon_data/*/mbm_total_bytes
> > 0
> > 1835008
> >
>
> Thanks. That is good to know.
-Tony
Powered by blists - more mailing lists