On Wed, Jan 06, 2021 at 10:52:48AM +0100, Mark Kettenis wrote: > > Date: Wed, 6 Jan 2021 20:29:09 +1100 > > From: Jonathan Gray <j...@jsg.id.au> > > > > On Tue, Jan 05, 2021 at 10:28:20PM -1000, st...@wdwd.me wrote: > > > I tested with a Protectli FW1 router (dmesg below) forwarding packets > > > between two test machines. The latency spikes occur when running headless > > > beginning with this commit: > > > > As the interrupt is handled via msi it wouldn't be a shared interrupt > > related problem. > > > > Perhaps some drm kernel thread, but I can't think of anything that would > > be doing work with no display connected. > > Could be the kernel periodically polling whether a monitor is > attached. Some generations of the Intel graphics hardware have broken > hardware hotplug detection. And some rely on polling i2c code to > detect a VGA monitor. > > Don't know this hardware. If it has a VGA port that's left > unconnected it might help to actually connect it. Maybe one of those > dongles that fake a VGA monitor would do. > > Disabling inteldrm(4) would also help.
On my home router, which is a similar kind of machine, various drm work queue threads use a fair bit of cpu time. I normally have inteldrm disabled just for that - I hadn't noticed it causing latency problems, it just seemed wrong that my router spent more cpu time on drm stuff than on forwarding packets. inteldrm0 at pci0 dev 2 function 0 "Intel HD Graphics" rev 0x35 drm0 at inteldrm0 inteldrm0: msi, CHERRYVIEW, gen 8 inteldrm0: 1024x768, 32bpp It has one displayport and two hdmi, no vga, so hopefully analog hotplug isn't involved. $ vmstat -zi interrupt total rate irq0/clock 241657 396 irq0/ipi 17830 29 irq96/acpi0 0 0 irq144/inteldrm0 469 0 irq97/ahci0 50442 82 irq98/xhci0 25 0 irq176/azalia0 1 0 irq99/ppb0 0 0 irq114/re0 12914 21 irq100/ppb1 0 0 irq115/re1 13261 21 irq101/ppb2 0 0 irq116/athn0 0 0 irq102/ichiic0 0 0 irq145/com0 118 0 irq146/pckbc0 0 0 irq147/pckbc0 0 0 Total 336717 551 This is what the drm workqueue threads have done in 15 minutes uptime: root 85080 0.0 0.0 0 0 ?? DK 9:06PM 0:00.00 (drmlwq) root 65272 0.0 0.0 0 0 ?? DK 9:06PM 0:00.00 (drmtskl) root 39235 0.0 0.0 0 0 ?? DK 9:06PM 0:00.00 (drmlwq) root 65215 0.0 0.0 0 0 ?? DK 9:06PM 0:01.00 (drmlwq) root 62266 0.0 0.0 0 0 ?? DK 9:06PM 0:00.00 (drmlwq) root 20339 0.0 0.0 0 0 ?? DK 9:06PM 0:00.00 (drmubwq) root 62920 0.0 0.0 0 0 ?? DK 9:06PM 0:00.00 (drmubwq) root 58454 0.0 0.0 0 0 ?? DK 9:06PM 0:01.00 (drmubwq) root 75983 0.0 0.0 0 0 ?? DK 9:06PM 0:00.00 (drmubwq) root 31352 0.0 0.0 0 0 ?? DK 9:06PM 0:00.01 (drmhpwq) root 23634 0.0 0.0 0 0 ?? DK 9:06PM 0:00.00 (drmhpwq) root 95926 0.0 0.0 0 0 ?? DK 9:06PM 0:00.00 (drmhpwq) root 38038 0.0 0.0 0 0 ?? DK 9:06PM 0:07.10 (drmwq) root 10622 0.0 0.0 0 0 ?? DK 9:06PM 0:06.50 (drmwq) root 68591 0.0 0.0 0 0 ?? DK 9:06PM 0:01.00 (drmhpwq) root 97843 0.0 0.0 0 0 ?? DK 9:06PM 0:11.41 (drmwq) root 36773 0.5 0.0 0 0 ?? DK 9:06PM 0:10.98 (drmwq) I can work on gathering some profiling data with dt etc. if that would help.