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.

Reply via email to