Re: ACPI idle performance problem
Jukka Ruohonen <[email protected]> Mon, 1 Jun 2020 07:21:02 +0300
| Newsgroups | gmane.os.netbsd.ports.x86-64,gmane.os.netbsd.ports.i386 |
|---|---|
| Message-ID | <20200601042102.GA29845@sartre> |
On Sun, May 31, 2020 at 10:23:56PM +0000, Andrew Doran wrote: > I spent a bit of time playing with this over the weekend, instrumented the > code to find out what was happening and and made a commit to > acpi_cpu_cstate.c work around the problem. There are a couple of comments > in there explaining what I found but basically reading the ACPI timer > (mapped via I/O port) during idle seems stupidly costly, enough to add > between 5-10% system time to a kernel build for me. > > I guess the system builders don't pay attention to I/O port access since > most devices are memory mapped now. Thanks for looking into the problem! I think this is an implementation bug. Would a simple fix suffice: add acpi_md_timer_read() and map it to a better timer in acpi_machdep.c? Another thing that I was thinking about was acpicpu_md_quirk_c1e() that is potentially called for some AMD CPUs in the idle loop. It might be costly, and I am not sure whether it is the right thing to do. Should read the BKDGs again. - Jukka