Messages in this thread | | | Date | Mon, 6 Mar 2023 11:32:43 +0000 | Subject | Re: [PATCH v2 08/18] x86/resctrl: Queue mon_event_read() instead of sending an IPI | From | James Morse <> |
| |
Hi Fenghua,
On 17/01/2023 18:29, Yu, Fenghua wrote: >> x86 is blessed with an abundance of monitors, one per RMID, that can be read >> from any CPU in the domain. MPAMs monitors reside in the MMIO MSC, the >> number implemented is up to the manufacturer. This means when there are >> fewer monitors than needed, they need to be allocated and freed. >> >> Worse, the domain may be broken up into slices, and the MMIO accesses for >> each slice may need performing from different CPUs. >> >> These two details mean MPAMs monitor code needs to be able to sleep, and IPI >> another CPU in the domain to read from a resource that has been sliced. >> >> mon_event_read() already invokes mon_event_count() via IPI, which means this >> isn't possible. >> >> Change mon_event_read() to schedule mon_event_count() on a remote CPU >> and wait, instead of sending an IPI. This function is only used in response to a >> user-space filesystem request (not the timing sensitive overflow code).
> But mkdir mon group needs mon_event_count() to reset RMID state. > If mon_event_count() is called much later, the RMID state may be used > before it's reset. E.g. prev_msr might be non-0 value. That will cause > overflow code failure. > > Seems this may happen on both x86 and arm64. At least need to make sure > RMID state reset happens before it's used.
On the architecture side, there is a patch from Peter that records the MSR value on the architecture side when an RMID is reset/re-allocated. 2a81160d29d6 ("x86/resctrl: Fix event counts regression in reused RMIDs")
For the filesystem, the 'first' value is passed through and handled by the CPU that reads the MSR. I don't see what problem any extra delay due to scheduling would cause.
Thanks,
James
| |