device polling question

Ramūnas Lukoševičius lukoramu at parok.lt
Tue Jul 25 08:07:48 UTC 2006


Hi. I think, this is a problem. There is kind of interrupt storm with
device polling turned on, and `sysctl kern.polling` shows some interesting
numbers:

[root at obgp ~]# uname -r
6.1-RELEASE-p3
[root at obgp ~]# sysctl kern.clockrate
kern.clockrate: { hz = 1000, tick = 1000, profhz = 1024, stathz = 128 }
[root at obgp ~]# vmstat 1 10
procs      memory      page                   disk   faults      cpu
r b w     avm    fre  flt  re  pi  po  fr  sr ad0   in   sy  cs us sy id
0 0 0   96488 152772  220   0   0   0 197   0   0 7864 1563 4943  3 30 67
0 0 0   96488 152772    1   0   0   0   1   0   0 6006  123 6806  0 43 57
0 0 0   96488 152772    0   0   0   0   0   0   0 6026  115 6845  0 37 63
0 0 0   96488 152772    0   0   0   0   0   0   0 6146  123 6818  0 41 59
0 0 0   96488 152772    0   0   0   0   0   0   7 6013  127 6766  0 41 59
0 0 0   96488 152772    0   0   0   0   0   0   0 5929  115 6565  0 34 66
0 0 0   96488 152772    0   0   0   0   3   0   2 6453  115 7193  0 38 62
0 0 0   96488 152776    0   0   0   0   1   0   1 5683  115 6389  1 39 60
0 0 0   96488 152776    0   0   0   0   0   0   0 6279  123 6907  0 42 58
0 0 0   96488 152776    0   0   0   0   0   0   0 5774  127 6426  0 37 63
[root at obgp ~]# ifconfig fxp0 polling
[root at obgp ~]# ifconfig fxp1 polling
[root at obgp ~]# vmstat 1 10
procs      memory      page                   disk   faults      cpu
r b w     avm    fre  flt  re  pi  po  fr  sr ad0   in   sy  cs us sy id
0 0 0   96488 152776  212   0   0   0 189   0   0 8004 1506 4980  3 31 66
0 0 0   96488 152776    1   0   0   0   1   0   0 34446  123 3066  0 39 61
0 0 0   96488 152776    0   0   0   0   0   0   0 34373  123 3059  0 37 63
0 0 0   96488 152776    0   0   0   0   0   0   0 34480  127 3060  0 43 57
0 0 0   96488 152776    0   0   0   0   3   0   2 34329  115 3059  0 45 55
0 0 0   96488 152776    2   0   0   0   0   0   0 34436  120 3061  0 40 60
0 0 0   96488 152776    0   0   0   0   0   0   1 34248  115 3069  0 35 65
0 0 0   96488 152776    0   0   0   0   0   0   0 34375  123 3063  0 41 59
0 0 0   96488 152776    0   0   0   0   0   0   0 34282  127 3052  0 45 55
0 0 0   96488 152776    0   0   0   0   0   0   0 34342  566 3061  1 40 60
[root at obgp ~]# sysctl kern.polling
kern.polling.burst: 150
kern.polling.burst_max: 150
kern.polling.each_burst: 5
kern.polling.idle_poll: 0
kern.polling.user_frac: 50
kern.polling.reg_frac: 20
kern.polling.short_ticks: 2115
kern.polling.lost_polls: 345
kern.polling.pending_polls: 0
kern.polling.residual_burst: 0
kern.polling.handlers: 2
kern.polling.enable: 0
kern.polling.phase: 0
kern.polling.suspect: 135
kern.polling.stalled: 0
kern.polling.idlepoll_sleeping: 1
[root at obgp ~]# vmstat -i; sleep 1; vmstat -i
interrupt                          total       rate
irq0: clk                      152025885        999
irq1: atkbd0                         801          0
irq8: rtc                       19453315        127
irq11: fxp1 uhci0              122419028        804
irq12: fxp0                    157346527       1034
irq14: ata0                        93765          0
Total                          451339321       2966
interrupt                          total       rate
irq0: clk                      152026925        999
irq1: atkbd0                         801          0
irq8: rtc                       19453448        127
irq11: fxp1 uhci0              122419028        804
irq12: fxp0                    157346527       1034
irq14: ata0                        93766          0
Total                          451340495       2966

I tried that on a different machine with no shared interrupts.
Allmost the same results.

[root at obgp ~]# cd /usr/src/sys/i386/conf/
[root at obgp /usr/src/sys/i386/conf]# diff -u GENERIC ZIRZILE
--- GENERIC     Tue Jul 25 10:55:46 2006
+++ ZIRZILE     Tue Jul 25 10:55:44 2006
@@ -19,10 +19,8 @@
  # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.429.2.7.2.2 2006/05/01 00:15:12 scottl Exp $

  machine                i386
-cpu            I486_CPU
-cpu            I586_CPU
  cpu            I686_CPU
-ident          GENERIC
+ident          ZIRZILE

  # To statically compile in device wiring instead of /boot/device.hints
  #hints         "GENERIC.hints"         # Default places to look for devices.
@@ -62,6 +60,16 @@
  options        AHD_REG_PRETTY_PRINT    # Print register bitfields in debug
                                         # output.  Adds ~215k to driver.
  options        ADAPTIVE_GIANT          # Giant mutex is adaptive.
+
+options DEVICE_POLLING
+
+options ALTQ
+options ALTQ_CBQ
+options ALTQ_RED
+options ALTQ_RIO
+options ALTQ_HFSC
+options ALTQ_CDNR
+options ALTQ_PRIQ

  device         apic                    # I/O APIC

Any ideas ?


More information about the freebsd-questions mailing list