netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 2.6.24 BUG: soft lockup - CPU#X
@ 2008-03-26 16:46 Matheos Worku
  2008-03-26 17:31 ` Rick Jones
  2008-03-26 20:14 ` Jarek Poplawski
  0 siblings, 2 replies; 36+ messages in thread
From: Matheos Worku @ 2008-03-26 16:46 UTC (permalink / raw)
  To: netdev

All,

While running iperf (transmit) on NIU driver I get several soft lockup 
errors.  I have seen similar soft lockup errors on kernels 2.6.18 and 
later (with other 10G NIC drivers with LSO disabled) but it is more 
frequent/pronounced on 2.6.24 kernel.  oprofile is not giving  much clue 
as where the cpus are spending time (atleast doesn't indicate any thing 
abnormal in the driver(s)). The lockup location as indicated by the 
error message is not consistent and varies from time time and could be 
outside the driver as well.  I have attached several lockup  error 
traces and corresponding profile data. Any clues?

Regards
matheos


Test system is 8xdual core AMD opteron, with 8 cpus booted.


[root@nsn57-110 ~]# more /proc/cpuinfo
processor       : 0
vendor_id       : AuthenticAMD
cpu family      : 15
model           : 33
model name      : Dual Core AMD Opteron(tm) Processor 885
stepping        : 2
cpu MHz         : 1000.000
cache size      : 1024 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
fpu             : yes
fpu_exception   : yes
cpuid level     : 1
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge 
mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext 
fxsr_opt lm 3dnowext 3dnow rep_good pni lahf_lm cmp_legacy
bogomips        : 2019.84
TLB size        : 1024 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 40 bits physical, 48 bits virtual
power management: ts fid vid ttp


nsn57-110 login: BUG: soft lockup - CPU#3 stuck for 11s! [iperf:9064]
CPU 3:
Modules linked in: oprofile niu nfs lockd nfs_acl autofs4 hidp rfcomm 
l2cap bluetooth sunrpc ipv6 cpufreq_ondemand rdma_ucm ib_ucm rdma_cm 
iw_cm ib_addr ib_srp scsi_transport_srp  ib_cm ib_ipoib ib_sa ib_uverbs 
ib_umad ib_mad ib_core dm_multipath battery ac parport_pc lp parport 
joydev sr_mod sg e1000 button i2c_nforce2 pcspkr shpchp i2c_core 
dm_snapshotdm_zero dm_mirror dm_mod usb_storage mptsas mptscsih mptbase 
scsi_transport_sas sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd
Pid: 9064, comm: iperf Not tainted 2.6.24-mati #3
RIP: 0010:[<ffffffff80406fb8>]  [<ffffffff80406fb8>] 
pfifo_fast_dequeue+0x3b/0x59
RSP: 0018:ffff8101bece5a20  EFLAGS: 00000286
RAX: 00000000000005ea RBX: ffff8101ced38000 RCX: ffff8102f397a990
RDX: ffff8102facead10 RSI: 000000000000004d RDI: ffff8102faceac00
RBP: ffff8103e10ab700 R08: 0000000000000003 R09: 0400000000000000
R10: 00000003e9d5d700 R11: ffffffff80221995 R12: ffffffff882ee016
R13: ffff8103e9d5d100 R14: 0000000000000006 R15: ffff8103e58a8ed0
FS:  000000004700d940(0063) GS:ffff8101fb072e00(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
CR2: 00000032e6e95770 CR3: 00000001d051a000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

Call Trace:
 [<ffffffff80406d65>] __qdisc_run+0x31/0x174
 [<ffffffff803f8139>] dev_queue_xmit+0x141/0x270
 [<ffffffff8041a17c>] ip_queue_xmit+0x343/0x396
 [<ffffffff8028596d>] add_partial_tail+0x12/0x3f
 [<ffffffff80267f23>] get_pageblock_flags_group+0x3e/0x7f
 [<ffffffff80267f23>] get_pageblock_flags_group+0x3e/0x7f
 [<ffffffff80429176>] tcp_transmit_skb+0x69f/0x6dc
 [<ffffffff8042aee0>] __tcp_push_pending_frames+0x79f/0x878
 [<ffffffff80427d69>] tcp_rcv_established+0x108/0x6f3
 [<ffffffff8042dab0>] tcp_v4_do_rcv+0x30/0x3a1
 [<ffffffff803ece3e>] release_sock+0x60/0xbf
 [<ffffffff8042048d>] tcp_sendmsg+0x968/0xa67
 [<ffffffff803ea812>] sock_aio_write+0xf8/0x110
 [<ffffffff8028c3b0>] do_sync_write+0xc9/0x10c
 [<ffffffff8027302b>] handle_mm_fault+0x668/0x69b
 [<ffffffff802480e0>] autoremove_wake_function+0x0/0x2e
 [<ffffffff8028cb6b>] vfs_write+0xd9/0x14f
 [<ffffffff8028d0ae>] sys_write+0x45/0x6e
 [<ffffffff8020b7fc>] tracesys+0xdc/0xe1

BUG: soft lockup - CPU#3 stuck for 11s! [iperf:9064]
CPU 3:
Modules linked in: oprofile niu nfs lockd nfs_acl autofs4 hidp rfcomm 
l2cap bluetooth sunrpc ipv6 cpufreq_ondemand rdma_ucm ib_ucm rdma_cm 
iw_cm ib_addr ib_srp scsi_transport_srp  ib_cm ib_ipoib ib_sa ib_uverbs 
ib_umad ib_mad ib_core dm_multipath battery ac parport_pc lp parport 
joydev sr_mod sg e1000 button i2c_nforce2 pcspkr shpchp i2c_core 
dm_snapshotdm_zero dm_mirror dm_mod usb_storage mptsas mptscsih mptbase 
scsi_transport_sas sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd
Pid: 9064, comm: iperf Not tainted 2.6.24-mati #3
RIP: 0010:[<ffffffff802219c8>]  [<ffffffff802219c8>] 
gart_map_single+0x33/0x70
RSP: 0018:ffff8101bece5968  EFLAGS: 00000246
RAX: 00000002f656e100 RBX: 0000000000000600 RCX: 0000000000000001
RDX: 0000000000000600 RSI: ffff8102f656e100 RDI: ffff8102f656e100
RBP: 0000000000000000 R08: 4000111900000000 R09: 0050000000000000
R10: 0000000000000000 R11: ffffffff80221995 R12: 0000000000000286
R13: ffff8103fba11200 R14: ffff8103e9913100 R15: ffffffff8026fc8b
FS:  000000004700d940(0063) GS:ffff8101fb072e00(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
CR2: 00000032e6e95770 CR3: 00000001d051a000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

Call Trace:
 [<ffffffff802219c1>] gart_map_single+0x2c/0x70
 [<ffffffff882edf65>] :niu:niu_start_xmit+0x339/0x5af
 [<ffffffff80221995>] gart_map_single+0x0/0x70
 [<ffffffff803f5e2b>] dev_hard_start_xmit+0x1d2/0x246
 [<ffffffff80406fa1>] pfifo_fast_dequeue+0x24/0x59
 [<ffffffff80406dab>] __qdisc_run+0x77/0x174
 [<ffffffff803f8139>] dev_queue_xmit+0x141/0x270
 [<ffffffff8041a17c>] ip_queue_xmit+0x343/0x396
 [<ffffffff8028596d>] add_partial_tail+0x12/0x3f
 [<ffffffff80267f23>] get_pageblock_flags_group+0x3e/0x7f
 [<ffffffff80267f23>] get_pageblock_flags_group+0x3e/0x7f
 [<ffffffff80429176>] tcp_transmit_skb+0x69f/0x6dc
 [<ffffffff8042aee0>] __tcp_push_pending_frames+0x79f/0x878
 [<ffffffff80427d69>] tcp_rcv_established+0x108/0x6f3
 [<ffffffff8042dab0>] tcp_v4_do_rcv+0x30/0x3a1
 [<ffffffff803ece3e>] release_sock+0x60/0xbf
 [<ffffffff8042048d>] tcp_sendmsg+0x968/0xa67
 [<ffffffff803ea812>] sock_aio_write+0xf8/0x110
 [<ffffffff8028c3b0>] do_sync_write+0xc9/0x10c
 [<ffffffff8027302b>] handle_mm_fault+0x668/0x69b
 [<ffffffff802480e0>] autoremove_wake_function+0x0/0x2e
 [<ffffffff8028cb6b>] vfs_write+0xd9/0x14f
 [<ffffffff8028d0ae>] sys_write+0x45/0x6e
 [<ffffffff8020b7fc>] tracesys+0xdc/0xe1


CPU: AMD64 processors, speed 1000 MHz (estimated)
Counted CPU_CLK_UNHALTED events (Cycles outside of halt state) with a 
unit mask of 0x00 (No unit mask) count 100000
Samples on CPU 0
Samples on CPU 1
Samples on CPU 2
Samples on CPU 3
Samples on CPU 4
Samples on CPU 5
Samples on CPU 6
Samples on CPU 7
samples  %        samples  %        samples  %        samples  %        
samples  %        samples  %        samples  %        samples  %        
image name               app name                 symbol name
35847    10.0121  15879     5.5917  83932     5.8174  176125   19.8328  
339527   17.1392  290339   14.6522  316262   17.6201  391473   17.5484  
vmlinux
                vmlinux                  _raw_spin_lock
33542     9.3683  13947     4.9113  4596      0.3186  54781     6.1687  
5327      0.2689  4976      0.2511  14967     0.8339  13636     0.6113  
niu.ko
                niu                      niu_start_xmit
20350     5.6838  21907     7.7144  54143     3.7527  69738     7.8530  
239428   12.0862  208502   10.5222  285560   15.9096  184698    8.2794  
vmlinux
                vmlinux                  copy_user_generic_string
13818     3.8594  12931     4.5535  9246      0.6408  24130     2.7172  
66874     3.3758  60730     3.0648  52617     2.9315  83159     3.7277  
vmlinux
                vmlinux                  tcp_ack
12375     3.4563  10647     3.7492  6462      0.4479  16099     1.8129  
45097     2.2765  41207     2.0795  33129     1.8457  56178     2.5183  
vmlinux
                vmlinux                  __tcp_select_window
11995     3.3502  8815      3.1041  5267      0.3651  15376     1.7314  
42396     2.1401  39193     1.9779  29124     1.6226  57981     2.5991  
vmlinux
                vmlinux                  __copy_skb_header
10350     2.8908  7941      2.7964  11467     0.7948  27716     3.1210  
64291     3.2454  56789     2.8659  52322     2.9151  80111     3.5911  
vmlinux
                vmlinux                  __tcp_push_pending_frames
9191      2.5671  2121      0.7469  1062      0.0736  13214     1.4880  
1180      0.0596  1195      0.0603  4256      0.2371  3715      0.1665  
vmlinux
                vmlinux                  pfifo_fast_dequeue
9141      2.5531  5952      2.0959  4051      0.2808  10781     1.2140  
30384     1.5338  28521     1.4393  22391     1.2475  41852     1.8761  
vmlinux
                vmlinux                  free_hot_cold_page
8095      2.2609  2488      0.8761  1697      0.1176  17957     2.0221  
1959      0.0989  1626      0.0821  5020      0.2797  4570      0.2049  
vmlinux
                vmlinux                  __qdisc_run
7922      2.2126  5276      1.8579  6511      0.4513  15156     1.7067  
43016     2.1714  39552     1.9960  32309     1.8001  52778     2.3659  
vmlinux
                vmlinux                  kmem_cache_free
7700      2.1506  6904      2.4312  7348      0.5093  17601     1.9820  
48613     2.4540  40715     2.0547  35488     1.9772  57007     2.5554  
vmlinux
                vmlinux                  ip_queue_xmit
7543      2.1068  6779      2.3872  23039     1.5969  50172     5.6497  
132212    6.6740  112382    5.6715  107581    5.9937  161639    7.2457  
vmlinux
                vmlinux                  dev_queue_xmit
7404      2.0679  8373      2.9485  193876   13.4377  2406      0.2709  
7016      0.3542  45116     2.2768  6269      0.3493  7755      0.3476  
vmlinux
                vmlinux                  skb_release_data
7369      2.0582  8834      3.1108  77903     5.3995  19075     2.1480  
47375     2.3915  61162     3.0866  36048     2.0084  57243     2.5660  
niu.ko
                niu                      niu_interrupt
7207      2.0129  8108      2.8552  56756     3.9338  16089     1.8117  
40057     2.0221  49214     2.4836  33659     1.8753  51010     2.2866  
niu.ko
                niu                      niu_poll
6914      1.9311  4099      1.4434  1058      0.0733  3846      0.4331  
11434     0.5772  11337     0.5721  6269      0.3493  19662     0.8814  
vmlinux
                vmlinux                  get_pageblock_flags_group
5883      1.6431  2139      0.7532  793       0.0550  10490     1.1812  
824       0.0416  779       0.0393  2586      0.1441  2272      0.1018  
vmlinux
                vmlinux                  sock_wfree
5855      1.6353  5284      1.8607  4817      0.3339  16055     1.8079  
35248     1.7793  32311     1.6306  25091     1.3979  49224     2.2065  
vmlinux
                vmlinux                  skb_copy_bits
5665      1.5822  6456      2.2734  12491     0.8658  15495     1.7448  
56038     2.8288  49153     2.4806  69654     3.8807  43563     1.9528  
vmlinux
                vmlinux                  tcp_sendmsg
5094      1.4228  3513      1.2371  1318      0.0914  4933      0.5555  
16424     0.8291  15262     0.7702  10637     0.5926  21869     0.9803  
vmlinux
                vmlinux                  tcp_set_skb_tso_segs
4958      1.3848  4813      1.6949  165349   11.4605  6882      0.7750  
16981     0.8572  44073     2.2242  9780      0.5449  20187     0.9049  
vmlinux
                vmlinux                  skb_release_all
4767      1.3314  4185      1.4737  16709     1.1581  36711     4.1339  
69252     3.4958  57613     2.9075  62623     3.4890  101863    4.5662  
vmlinux
                vmlinux                  pfifo_fast_enqueue
4678      1.3066  3174      1.1177  3419      0.2370  10220     1.1508  
27198     1.3729  24120     1.2172  20724     1.1546  37027     1.6598  
vmlinux
                vmlinux                  tcp_transmit_skb
4532      1.2658  3820      1.3452  12096     0.8384  38766     4.3653  
14964     0.7554  13336     0.6730  17124     0.9540  18142     0.8132  
vmlinux
                vmlinux                  _raw_spin_unlock
4440      1.2401  5000      1.7607  144565   10.0199  0              0  
0              0  40207     2.0291  0              0  0              0  
niu.ko
                niu                      niu_pci_unmap_single
4421      1.2348  4625      1.6287  77354     5.3615  4        4.5e-04  
2        1.0e-04  15377     0.7760  5        2.8e-04  1        4.5e-05  
vmlinux
                vmlinux                  kfree_skb
4264      1.1909  4006      1.4107  3971      0.2752  10260     1.1553  
30687     1.5491  27278     1.3766  24134     1.3446  36029     1.6151  
vmlinux
                vmlinux                  kmem_cache_alloc_node
4094      1.1435  3503      1.2336  3712      0.2573  7679      0.8647  
23417     1.1821  21114     1.0655  21857     1.2177  28370     1.2717  
vmlinux
                vmlinux                  kfree
2964      0.8278  2503      0.8814  2183      0.1513  7702      0.8673  
20190     1.0192  18987     0.9582  13373     0.7451  26578     1.1914  
vmlinux
                vmlinux                  tcp_v4_rcv
2822      0.7882  2502      0.8811  1811      0.1255  6020      0.6779  
20457     1.0327  19217     0.9698  15003     0.8359  27615     1.2379  
vmlinux
                vmlinux                  local_bh_enable
2815      0.7862  2004      0.7057  1814      0.1257  3225      0.3632  
14068     0.7101  13196     0.6659  8887      0.4951  17759     0.7961  
vmlinux
                vmlinux                  __slab_free
2731      0.7628  3904      1.3748  236108   16.3649  0              0  
0              0  51620     2.6051  0              0  0              0  
niu.ko
                niu                      release_tx_packet
2693      0.7522  897       0.3159  402       0.0279  3862      0.4349  
859       0.0434  740       0.0373  1872      0.1043  1605      0.0719  
vmlinux
                vmlinux                  dev_hard_start_xmit
2633      0.7354  2183      0.7687  2805      0.1944  5772      0.6500  
15536     0.7843  13160     0.6641  11056     0.6160  15467     0.6933  
vmlinux
                vmlinux                  ip_finish_output
2567      0.7170  1542      0.5430  3680      0.2551  4625      0.5208  
14971     0.7557  13076     0.6599  16538     0.9214  11771     0.5277  
vmlinux
                vmlinux                  get_page_from_freelist
2504      0.6994  1623      0.5715  1093      0.0758  3293      0.3708  
10124     0.5111  9167      0.4626  7378      0.4111  14708     0.6593  
vmlinux
                vmlinux                  skb_clone
2437      0.6807  816       0.2873  374       0.0259  3701      0.4168  
696       0.0351  618       0.0312  1463      0.0815  1226      0.0550  
vmlinux
                vmlinux                  gart_map_single
2424      0.6770  2060      0.7254  84        0.0058  206       0.0232  
543       0.0274  1183      0.0597  593       0.0330  820       0.0368  
vmlinux
                vmlinux                  eth_header
2007      0.5606  2392      0.8423  7641      0.5296  12076     1.3598  
38413     1.9391  33796     1.7055  40611     2.2626  34932     1.5659  
vmlinux
                vmlinux                  __alloc_skb
1958      0.5469  856       0.3014  2011      0.1394  6385      0.7190  
19324     0.9755  16077     0.8113  11571     0.6447  22939     1.0283  
vmlinux
                vmlinux                  __phys_addr
1868      0.5217  1310      0.4613  4119      0.2855  5267      0.5931  
17008     0.8586  15217     0.7679  19030     1.0602  15463     0.6932  
vmlinux
                vmlinux                  memset_c
1834      0.5122  558       0.1965  344       0.0238  4411      0.4967  
572       0.0289  528       0.0266  1401      0.0781  1332      0.0597  
niu.ko
                niu                      niu_set_txd
1702      0.4754  1381      0.4863  148       0.0103  859       0.0967  
2748      0.1387  2943      0.1485  1009      0.0562  5099      0.2286  
vmlinux
                vmlinux                  free_pages_bulk
1402      0.3916  1614      0.5684  1566      0.1085  5598      0.6304  
10886     0.5495  10396     0.5246  8331      0.4642  13281     0.5953  
vmlinux
                vmlinux                  __pskb_pull_tail
1321      0.3690  1058      0.3726  1253      0.0868  2939      0.3310  
9312      0.4701  7869      0.3971  6736      0.3753  10654     0.4776  
vmlinux
                vmlinux                  tcp_rcv_established
1314      0.3670  11301     3.9795  8380      0.5808  2592      0.2919  
11391     0.5750  1007      0.0508  4551      0.2536  2900      0.1300  
oprofiled                oprofiled                (no symbols)
1311      0.3662  1701      0.5990  1919      0.1330  527       0.0593  
5967      0.3012  5769      0.2911  11960     0.6663  1958      0.0878  
vmlinux
                vmlinux                  __rmqueue
1218      0.3402  635       0.2236  287       0.0199  486       0.0547  
1996      0.1008  2162      0.1091  1289      0.0718  2629      0.1178  
vmlinux
                vmlinux                  __mod_zone_page_state
1177      0.3287  1256      0.4423  1969      0.1365  6394      0.7200  
15622     0.7886  14234     0.7183  11927     0.6645  20082     0.9002  
vmlinux
                vmlinux                  netif_receive_skb
1072      0.2994  1093      0.3849  2235      0.1549  5437      0.6122  
13295     0.6711  12614     0.6366  11498     0.6406  17651     0.7912  
vmlinux
                vmlinux                  ip_route_input
1043      0.2913  680       0.2395  737       0.0511  1932      0.2176  
5400      0.2726  5268      0.2659  4528      0.2523  6865      0.3077  
vmlinux
                vmlinux                  put_page
1034      0.2888  447       0.1574  2398      0.1662  4145      0.4668  
26089     1.3170  24902     1.2567  13333     0.7428  14704     0.6591  
vmlinux
                vmlinux                  __delay
996       0.2782  751       0.2645  21850     1.5144  258       0.0291  
809       0.0408  6957      0.3511  557       0.0310  1027      0.0460  
vmlinux
                vmlinux                  gart_unmap_single
953       0.2662  711       0.2504  1331      0.0923  3741      0.4213  
16598     0.8379  14805     0.7471  5559      0.3097  17815     0.7986  
vmlinux
                vmlinux                  ip_local_deliver
947       0.2645  250       0.0880  1315      0.0911  56        0.0063  
876       0.0442  1013      0.0511  1247      0.0695  255       0.0114  
iperf
                iperf                    reporter_condprintstats
930       0.2597  939       0.3307  936       0.0649  3379      0.3805  
6289      0.3175  6103      0.3080  5442      0.3032  9742      0.4367  
niu.ko
                niu                      niu_find_rxpage
885       0.2472  1082      0.3810  76280     5.2870  533       0.0600  
1716      0.0866  21803     1.1003  1219      0.0679  2108      0.0945  
vmlinux
                vmlinux                  __kfree_skb
876       0.2447  775       0.2729  869       0.0602  2878      0.3241  
7079      0.3573  6356      0.3208  3648      0.2032  8924      0.4000  
vmlinux
                vmlinux                  ip_local_deliver_finish
864       0.2413  552       0.1944  3143      0.2178  6539      0.7363  
18190     0.9182  16338     0.8245  12059     0.6719  20170     0.9042  
vmlinux
                vmlinux                  pfn_to_page
831       0.2321  815       0.2870  71        0.0049  167       0.0188  
440       0.0222  698       0.0352  422       0.0235  650       0.0291  
vmlinux
                vmlinux                  _raw_read_lock
779       0.2176  679       0.2391  2057      0.1426  2551      0.2873  
11112     0.5609  10998     0.5550  13292     0.7405  10674     0.4785  
vmlinux
                vmlinux                  __kmalloc_node_track_caller
700       0.1955  358       0.1261  46        0.0032  81        0.0091  
206       0.0104  294       0.0148  271       0.0151  262       0.0117  
vmlinux
                vmlinux                  local_bh_enable_ip
682       0.1905  853       0.3004  29        0.0020  82        0.0092  
117       0.0059  238       0.0120  170       0.0095  236       0.0106  
vmlinux
                vmlinux                  neigh_resolve_output
640       0.1788  398       0.1402  457       0.0317  838       0.0944  
2527      0.1276  2174      0.1097  3696      0.2059  4044      0.1813  
vmlinux
                vmlinux                  tcp_init_tso_segs
639       0.1785  428       0.1507  541       0.0375  348       0.0392  
1888      0.0953  1729      0.0873  3567      0.1987  838       0.0376  
vmlinux
                vmlinux                  __rmqueue_smallest
626       0.1748  485       0.1708  678       0.0470  1686      0.1899  
3472      0.1753  3666      0.1850  2181      0.1215  4042      0.1812  
vmlinux
                vmlinux                  page_to_pfn
596       0.1665  571       0.2011  202       0.0140  434       0.0489  
1472      0.0743  1303      0.0658  1399      0.0779  1285      0.0576  
vmlinux
                vmlinux                  new_slab
535       0.1494  838       0.2951  854       0.0592  2850      0.3209  
7345      0.3708  5461      0.2756  8328      0.4640  7682      0.3444  
vmlinux
                vmlinux                  ip_rcv_finish
519       0.1450  505       0.1778  3538      0.2452  3250      0.3660  
16741     0.8451  16927     0.8542  23509     1.3098  14544     0.6520  
vmlinux
                vmlinux                  __slab_alloc
509       0.1422  438       0.1542  467       0.0324  1647      0.1855  
4471      0.2257  3949      0.1993  2904      0.1618  5552      0.2489  
vmlinux
                vmlinux                  ___pskb_trim
497       0.1388  402       0.1416  422       0.0292  1373      0.1546  
3719      0.1877  3156      0.1593  2957      0.1647  4635      0.2078  
vmlinux
                vmlinux                  tcp_rtt_estimator
487       0.1360  348       0.1225  502       0.0348  160       0.0180  
1626      0.0821  1474      0.0744  2784      0.1551  684       0.0307  
vmlinux
                vmlinux                  rmqueue_bulk
455       0.1271  360       0.1268  355       0.0246  483       0.0544  
3794      0.1915  3716      0.1875  3955      0.2203  5553      0.2489  
vmlinux
                vmlinux                  add_partial_tail


======

nsn57-110 login: BUG: soft lockup - CPU#3 stuck for 11s! [iperf:10566]
CPU 3:
Modules linked in: oprofile niu nfs lockd nfs_acl autofs4 hidp rfcomm 
l2cap bluetooth sunrpc ipv6 cpufreq_ondemand rdma_ucm ib_ucm rdma_cm 
iw_cm ib_addr ib_srp scsi_transport_srp ib_cm ib_ipoib ib_sa ib_uverbs 
ib_umad ib_mad ib_core dm_multipath battery ac parport_pc lp parport 
joydev sr_mod sg e1000 button i2c_nforce2 pcspkr shpchp i2c_core 
dm_snapshot dm_zero dm_mirror dm_mod usb_storage mptsas mptscsih mptbase 
scsi_transport_sas sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd
Pid: 10566, comm: iperf Not tainted 2.6.24-mati #3
RIP: 0010:[<ffffffff80316d29>]  [<ffffffff80316d29>] 
_raw_spin_lock+0x7d/0xf6
RSP: 0018:ffff8101f99bb9f8  EFLAGS: 00000246
RAX: 0000000000000000 RBX: 000000000000000e RCX: 00000000a0c5b122
RDX: 0000000000003b06 RSI: 0000000000000033 RDI: 0000000000000001
RBP: ffffffff803eecfd R08: 0000000000000003 R09: 0400000000000000
R10: 00000003e24a9700 R11: ffffffff80221995 R12: ffffffff802219c1
R13: ffff8103db913450 R14: ffff8101ced38000 R15: ffff8103dd5c0700
FS:  000000004580a940(0063) GS:ffff8101fb072e00(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
CR2: 00002b762a36c050 CR3: 00000001c6950000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

Call Trace:
 [<ffffffff80316d3a>] _raw_spin_lock+0x8e/0xf6
 [<ffffffff80406e8a>] __qdisc_run+0x156/0x174
 [<ffffffff80406dd2>] __qdisc_run+0x9e/0x174
 [<ffffffff803f8139>] dev_queue_xmit+0x141/0x270
 [<ffffffff8041a17c>] ip_queue_xmit+0x343/0x396
 [<ffffffff80429176>] tcp_transmit_skb+0x69f/0x6dc
 [<ffffffff8042aee0>] __tcp_push_pending_frames+0x79f/0x878
 [<ffffffff80427d69>] tcp_rcv_established+0x108/0x6f3
 [<ffffffff8042dab0>] tcp_v4_do_rcv+0x30/0x3a1
 [<ffffffff803ece3e>] release_sock+0x60/0xbf
 [<ffffffff8042048d>] tcp_sendmsg+0x968/0xa67
 [<ffffffff8026fc8b>] zone_statistics+0x3f/0x60
 [<ffffffff803ea812>] sock_aio_write+0xf8/0x110
 [<ffffffff8042048d>] tcp_sendmsg+0x968/0xa67
 [<ffffffff8028c3b0>] do_sync_write+0xc9/0x10c
 [<ffffffff8027302b>] handle_mm_fault+0x668/0x69b
 [<ffffffff802480e0>] autoremove_wake_function+0x0/0x2e
 [<ffffffff8022b995>] __dequeue_entity+0x1c/0x32
 [<ffffffff8045e4a1>] _spin_unlock_irq+0x9/0xc
 [<ffffffff802314ce>] finish_task_switch+0x37/0x83
 [<ffffffff8028cb6b>] vfs_write+0xd9/0x14f
 [<ffffffff8028d0ae>] sys_write+0x45/0x6e
 [<ffffffff8020b7fc>] tracesys+0xdc/0xe1

BUG: soft lockup - CPU#3 stuck for 11s! [iperf:10557]
CPU 3:
Modules linked in: oprofile niu nfs lockd nfs_acl autofs4 hidp rfcomm 
l2cap bluetooth sunrpc ipv6 cpufreq_ondemand rdma_ucm ib_ucm rdma_cm 
iw_cm ib_addr ib_srp scsi_transport_srp  ib_cm ib_ipoib ib_sa ib_uverbs 
ib_umad ib_mad ib_core dm_multipath battery ac parport_pc lp parport 
joydev sr_mod sg e1000 button i2c_nforce2 pcspkr shpchp i2c_core 
dm_snapshotdm_zero dm_mirror dm_mod usb_storage mptsas mptscsih mptbase 
scsi_transport_sas sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd
Pid: 10557, comm: iperf Not tainted 2.6.24-mati #3
RIP: 0010:[<ffffffff882edf6c>]  [<ffffffff882edf6c>] 
:niu:niu_start_xmit+0x340/0x5af
RSP: 0018:ffff8101ac1f5998  EFLAGS: 00000293
RAX: 00000003ec4b7100 RBX: ffff8103e54cb610 RCX: 00000003ec4b7100
RDX: 00000fffffffffff RSI: ffff8103ec4b7100 RDI: ffff8103ec4b7100
RBP: ffffffff80221995 R08: ffffffff882edf84 R09: 0050000000000000
R10: 0000000000000000 R11: ffffffff80221995 R12: ffff8102f04d4ed0
R13: 0050000000000000 R14: 0000000000000000 R15: ffffffff80221995
FS:  0000000041001940(0063) GS:ffff8101fb072e00(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
CR2: 00002b762a36c050 CR3: 00000001c6950000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

Call Trace:
 [<ffffffff882edf65>] :niu:niu_start_xmit+0x339/0x5af
 [<ffffffff803f5e2b>] dev_hard_start_xmit+0x1d2/0x246
 [<ffffffff80406e8a>] __qdisc_run+0x156/0x174
 [<ffffffff80406dab>] __qdisc_run+0x77/0x174
 [<ffffffff803f8139>] dev_queue_xmit+0x141/0x270
 [<ffffffff8041a17c>] ip_queue_xmit+0x343/0x396
 [<ffffffff8028596d>] add_partial_tail+0x12/0x3f
 [<ffffffff80267f23>] get_pageblock_flags_group+0x3e/0x7f
 [<ffffffff802868a5>] __slab_free+0x7a/0x2d5
 [<ffffffff80429176>] tcp_transmit_skb+0x69f/0x6dc
 [<ffffffff8042aee0>] __tcp_push_pending_frames+0x79f/0x878
 [<ffffffff80427d69>] tcp_rcv_established+0x108/0x6f3
 [<ffffffff8042dab0>] tcp_v4_do_rcv+0x30/0x3a1
 [<ffffffff803ece3e>] release_sock+0x60/0xbf
 [<ffffffff8042048d>] tcp_sendmsg+0x968/0xa67
 [<ffffffff802ec44d>] dummy_socket_sendmsg+0x0/0x3
 [<ffffffff803ea812>] sock_aio_write+0xf8/0x110
 [<ffffffff8042048d>] tcp_sendmsg+0x968/0xa67
 [<ffffffff8028c3b0>] do_sync_write+0xc9/0x10c
 [<ffffffff8027302b>] handle_mm_fault+0x668/0x69b
 [<ffffffff802480e0>] autoremove_wake_function+0x0/0x2e
 [<ffffffff8022b995>] __dequeue_entity+0x1c/0x32
 [<ffffffff8028cb6b>] vfs_write+0xd9/0x14f
 [<ffffffff8028d0ae>] sys_write+0x45/0x6e
 [<ffffffff8020b7fc>] tracesys+0xdc/0xe1



samples  %        samples  %        samples  %        samples  %        
samples  %        samples  %        samples  %        samples  %        
image name               app name                 symbol name
7382      5.6251  88        0.0707  39484    17.0818  23        0.0662  
222       0.0663  272       0.0697  483       0.1890  541       0.1645  
vmlinux
                vmlinux                  skb_release_data
5373      4.0942  0              0  29098    12.5885  0              0  
0              0  0              0  0              0  0              0  
niu.ko
                niu                      niu_pci_unmap_single
5143      3.9190  2411      1.9382  1314      0.5685  625       1.8001  
14759     4.4101  7958      2.0390  25960    10.1604  26348     8.0092  
vmlinux
                vmlinux                  _raw_spin_lock
4794      3.6530  4198      3.3748  4016      1.7374  1899      5.4695  
55928    16.7117  29035     7.4392  37442    14.6543  40278    12.2436  
vmlinux
                iperf                    copy_user_generic_string
4660      3.5509  248       0.1994  24570    10.6296  37        0.1066  
767       0.2292  648       0.1660  1125      0.4403  1301      0.3955  
vmlinux
                vmlinux                  skb_release_all
4633      3.5304  1274      1.0242  0              0  137       0.3946  
2946      0.8803  2362      0.6052  4198      1.6430  4657      1.4156  
vmlinux
                vmlinux                  tcp_ack
4620      3.5205  0              0  13861     5.9966  0              0  
0              0  0              0  0              0  0              0  
vmlinux
                vmlinux                  kfree_skb
4557      3.4724  0              0  41087    17.7753  0              0  
0              0  0              0  0              0  0              0  
niu.ko
                niu                      release_tx_packet
4518      3.4427  1410      1.1335  0              0  112       0.3226  
2227      0.6654  1844      0.4725  3439      1.3460  3756      1.1417  
vmlinux
                vmlinux                  __tcp_select_window
4080      3.1090  799       0.6423  0              0  288       0.8295  
6662      1.9907  4099      1.0502  10426     4.0806  11095     3.3726  
vmlinux
                vmlinux                  dev_queue_xmit
4023      3.0655  779       0.6263  66        0.0286  84        0.2419  
1632      0.4877  1249      0.3200  2576      1.0082  3005      0.9135  
vmlinux
                vmlinux                  free_hot_cold_page
3980      3.0328  1254      1.0081  0              0  105       0.3024  
2095      0.6260  1723      0.4415  3342      1.3080  3640      1.1065  
vmlinux
                vmlinux                  __copy_skb_header
3751      2.8583  1133      0.9108  0              0  165       0.4752  
3165      0.9457  2097      0.5373  5288      2.0697  5409      1.6442  
vmlinux
                vmlinux                  __tcp_push_pending_frames
3504      2.6701  611       0.4912  68        0.0294  61        0.1757  
1193      0.3565  917       0.2349  1990      0.7789  2300      0.6991  
vmlinux
                vmlinux                  get_pageblock_flags_group
3274      2.4948  488       0.3923  12477     5.3979  61        0.1757  
1828      0.5462  1409      0.3610  4512      1.7659  5579      1.6959  
niu.ko
                niu                      niu_interrupt
3197      2.4361  8745      7.0303  1519      0.6572  5717     16.4660  
33696    10.0686  51587    13.2174  15227     5.9596  25442     7.7338  
vmlinux
                iperf                    _raw_spin_lock
3172      2.4171  953       0.7661  66        0.0286  103       0.2967  
2313      0.6911  1719      0.4404  3461      1.3546  3618      1.0998  
vmlinux
                vmlinux                  kmem_cache_free
3168      2.4140  493       0.3963  9766      4.2250  67        0.1930  
1712      0.5116  1153      0.2954  3655      1.4305  4368      1.3278  
niu.ko
                niu                      niu_poll
2693      2.0521  436       0.3505  1        4.3e-04  191       0.5501  
3350      1.0010  2245      0.5752  6262      2.4509  7050      2.1430  
vmlinux
                vmlinux                  pfifo_fast_enqueue
2402      1.8303  676       0.5434  0              0  78        0.2247  
1472      0.4398  1137      0.2913  2471      0.9671  3098      0.9417  
vmlinux
                vmlinux                  skb_copy_bits
2297      1.7503  904       0.7267  1        4.3e-04  111       0.3197  
2129      0.6362  1700      0.4356  3091      1.2098  4294      1.3053  
vmlinux
                vmlinux                  ip_queue_xmit
1944      1.4813  2137      1.7180  0              0  0              0  
0              0  0              0  32        0.0125  353       0.1073  
niu.ko
                niu                      niu_start_xmit
1809      1.3785  624       0.5016  0              0  48        0.1382  
1044      0.3120  783       0.2006  1766      0.6912  1912      0.5812  
vmlinux
                vmlinux                  tcp_set_skb_tso_segs
1779      1.3556  644       0.5177  2        8.7e-04  48        0.1382  
1207      0.3607  736       0.1886  1831      0.7166  2233      0.6788  
vmlinux
                vmlinux                  tcp_transmit_skb
1534      1.1689  356       0.2862  6         0.0026  41        0.1181  
933       0.2788  604       0.1548  1465      0.5734  1527      0.4642  
vmlinux
                vmlinux                  kfree
1368      1.0424  1213      0.9752  1054      0.4560  511       1.4718  
13895     4.1519  6859      1.7574  10097     3.9518  10450     3.1766  
vmlinux
                iperf                    tcp_sendmsg
1341      1.0218  320       0.2573  0              0  43        0.1238  
893       0.2668  763       0.1955  2021      0.7910  2460      0.7478  
vmlinux
                vmlinux                  kmem_cache_alloc_node
1260      0.9601  30        0.0241  13743     5.9456  6         0.0173  
65        0.0194  60        0.0154  103       0.0403  124       0.0377  
vmlinux
                vmlinux                  __kfree_skb
1187      0.9045  365       0.2934  0              0  33        0.0950  
670       0.2002  472       0.1209  967       0.3785  1199      0.3645  
vmlinux
                vmlinux                  skb_clone
1185      0.9030  231       0.1857  0              0  29        0.0835  
843       0.2519  624       0.1599  1343      0.5256  1783      0.5420  
vmlinux
                vmlinux                  local_bh_enable
1107      0.8435  288       0.2315  0              0  40        0.1152  
878       0.2624  792       0.2029  1299      0.5084  1456      0.4426  
vmlinux
                vmlinux                  tcp_v4_rcv
1094      0.8336  296       0.2380  0              0  39        0.1123  
480       0.1434  412       0.1056  947       0.3706  1777      0.5402  
vmlinux
                vmlinux                  ip_finish_output
1051      0.8009  217       0.1744  13        0.0056  28        0.0806  
438       0.1309  312       0.0799  769       0.3010  818       0.2487  
vmlinux
                vmlinux                  free_pages_bulk
1016      0.7742  7593      6.1041  203       0.0878  2511      7.2321  
518       0.1548  2476      0.6344  388       0.1519  369       0.1122  
niu.ko
                iperf                    niu_start_xmit
935       0.7125  202       0.1624  32        0.0138  23        0.0662  
495       0.1479  355       0.0910  899       0.3519  742       0.2256  
vmlinux
                vmlinux                  __slab_free
902       0.6873  537       0.4317  0              0  0              0  
0              0  0              0  10        0.0039  99        0.0301  
vmlinux
                vmlinux                  __qdisc_run
787       0.5997  0              0  0              0  0              0  
462       0.1380  1080      0.2767  0              0  0              0  
libperl.so               perl                     (no symbols)
708       0.5395  8         0.0064  4378      1.8940  0              0  
21        0.0063  25        0.0064  60        0.0235  42        0.0128  
vmlinux
                vmlinux                  gart_unmap_single
660       0.5029  153       0.1230  0              0  27        0.0778  
554       0.1655  477       0.1222  914       0.3577  1055      0.3207  
vmlinux
                vmlinux                  ip_route_input


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-26 16:46 2.6.24 BUG: soft lockup - CPU#X Matheos Worku
@ 2008-03-26 17:31 ` Rick Jones
  2008-03-26 20:14 ` Jarek Poplawski
  1 sibling, 0 replies; 36+ messages in thread
From: Rick Jones @ 2008-03-26 17:31 UTC (permalink / raw)
  To: Matheos Worku; +Cc: netdev

Matheos Worku wrote:
> All,
> 
> While running iperf (transmit) on NIU driver I get several soft lockup 
> errors.  I have seen similar soft lockup errors on kernels 2.6.18 and 
> later (with other 10G NIC drivers with LSO disabled) but it is more 
> frequent/pronounced on 2.6.24 kernel.  oprofile is not giving  much clue 
> as where the cpus are spending time (atleast doesn't indicate any thing 
> abnormal in the driver(s)). 

Is oprofile running on an AMD processor able to profile where/when 
interrupts are disabled?  If not there could be a fair bit missing from 
the profile.

rick jones

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-26 16:46 2.6.24 BUG: soft lockup - CPU#X Matheos Worku
  2008-03-26 17:31 ` Rick Jones
@ 2008-03-26 20:14 ` Jarek Poplawski
  2008-03-26 20:26   ` Matheos Worku
  1 sibling, 1 reply; 36+ messages in thread
From: Jarek Poplawski @ 2008-03-26 20:14 UTC (permalink / raw)
  To: Matheos Worku; +Cc: netdev

Matheos Worku wrote, On 03/26/2008 05:46 PM:
...

> outside the driver as well.  I have attached several lockup  error 
> traces and corresponding profile data. Any clues?

Are network cards' irqs balanced? If so, could you reproduce this
with affinity set?

Regards,
Jarek P.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-26 20:14 ` Jarek Poplawski
@ 2008-03-26 20:26   ` Matheos Worku
  2008-03-26 21:46     ` Jarek Poplawski
  2008-03-27 10:33     ` Jarek Poplawski
  0 siblings, 2 replies; 36+ messages in thread
From: Matheos Worku @ 2008-03-26 20:26 UTC (permalink / raw)
  To: Jarek Poplawski; +Cc: netdev

Jarek Poplawski wrote:
> Matheos Worku wrote, On 03/26/2008 05:46 PM:
> ...
>
>   
>> outside the driver as well.  I have attached several lockup  error 
>> traces and corresponding profile data. Any clues?
>>     
>
> Are network cards' irqs balanced? If so, could you reproduce this
> with affinity set?
>
> Regards,
> Jarek P.
>   
Jarek,

Reproduced the lockup with irqbalance disabled and with single src of 
interrupt (TX interrupt, UDP transmit).  Lockup appears in different 
location though.

Regards
matheos

irq of interest: 454 (TX interrupt)


454:      19249      93234     907186       2691          0        
188          0        160   PCI-MSI-edge      eth6
455:      22607      15083          5      13104      25569     
161519      62514      25637   PCI-MSI-edge      eth6
456:      22390      14921          5      24605      37438     
110453     251315         66   PCI-MSI-edge      eth6
457:      11109      26849          2      58895     251720         
84          0      67420   PCI-MSI-edge      eth6
458:      22348      15859          1      21978      27839      
10231          0     267743   PCI-MSI-edge      eth6
459:      19922      15331          2      59275          0     
149788      12394      82549   PCI-MSI-edge      eth6
460:      22928      19058          4       1268      49775     
183189     160901      25150   PCI-MSI-edge      eth6
461:        497      32134          1      31428          0      
69182      68889      45407   PCI-MSI-edge      eth6
462:      11932      23212         10      11355     120509      
47588          1     118637   PCI-MSI-edge      eth6
463:          0          0          0          0          0          
0          0          0   PCI-MSI-edge      eth6
464:          0          0          0          0          0          
0          0          0   PCI-MSI-edge      eth6
465:          0          0          0          0          0          
0          0          0   PCI-MSI-edge      eth6



.......

454:      19249     126519     907186       2691          0        
188          0        160   PCI-MSI-edge      eth6
455:      22609      15083          5      13104      25569     
161519      62514      25637   PCI-MSI-edge      eth6
456:      22390      14923          5      24605      37438     
110453     251315         66   PCI-MSI-edge      eth6
457:      11109      26849          2      58895     251720         
84          0      67420   PCI-MSI-edge      eth6
458:      22348      15867          1      21978      27839      
10231          0     267744   PCI-MSI-edge      eth6
459:      19922      15331          2      59275          0     
149788      12394      82549   PCI-MSI-edge      eth6
460:      22928      19058          4       1268      49775     
183189     160901      25150   PCI-MSI-edge      eth6
461:        498      32134          1      31428          0      
69182      68889      45407   PCI-MSI-edge      eth6
462:      11932      23216         10      11355     120509      
47588          1     118637   PCI-MSI-edge      eth6
463:          0          0          0          0          0          
0          0          0   PCI-MSI-edge      eth6
464:          0          0          0          0          0          
0          0          0   PCI-MSI-edge      eth6
465:          0          0          0          0          0          
0          0          0   PCI-MSI-edge      eth6




nsn57-110 login: BUG: soft lockup - CPU#2 stuck for 11s! 
[uperf.x86_64:16606]
CPU 2:
Modules linked in: ixgbe oprofile niu nfs lockd nfs_acl autofs4 hidp 
rfcomm l2cap bluetooth sunrpc ipv6 cpufreq_ondemand rdma_ucm ib_ucm 
rdma_cm iw_cm ib_addr ib_srp scsi_transport_srp ib_cm ib_ipoib ib_sa 
ib_uverbs ib_umad ib_mad ib_core dm_multipath battery ac parport_pc lp 
parport joydev sr_mod sg e1000 button i2c_nforce2 pcspkr shpchp i2c_core 
dm_snapshot dm_zero dm_mirror dm_mod usb_storage mptsas mptscsih mptbase 
scsi_transport_sas sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd
Pid: 16606, comm: uperf.x86_64 Not tainted 2.6.24-mati #3
RIP: 0010:[<ffffffff803ef525>]  [<ffffffff803ef525>] 
__copy_skb_header+0x10d/0x134
RSP: 0018:ffff8101ae14ba38  EFLAGS: 00000246
RAX: 0000000020000000 RBX: ffff8101d059a400 RCX: 000000000000000c
RDX: 0000000000000000 RSI: ffff8101d059a468 RDI: ffff8101f7db4868
RBP: ffff8101ffe50d80 R08: ffff8101f7db4800 R09: ffff8101d059a400
R10: 00000001b1c64660 R11: ffffffff80221995 R12: 0000000000000000
R13: 0000000100000000 R14: ffffffff802858e4 R15: ffff8101fec71900
FS:  0000000040800940(0063) GS:ffff8101fb072700(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000044005f48 CR3: 00000001d0513000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

Call Trace:
 [<ffffffff803ef5f6>] __skb_clone+0x24/0xdc
 [<ffffffff803f152e>] skb_realloc_headroom+0x30/0x63
 [<ffffffff882edd40>] :niu:niu_start_xmit+0x114/0x5af
 [<ffffffff80221995>] gart_map_single+0x0/0x70
 [<ffffffff803f5e2b>] dev_hard_start_xmit+0x1d2/0x246
 [<ffffffff80406fb8>] pfifo_fast_dequeue+0x3b/0x59
 [<ffffffff80406dab>] __qdisc_run+0x77/0x174
 [<ffffffff803f8139>] dev_queue_xmit+0x141/0x270
 [<ffffffff80417faf>] ip_push_pending_frames+0x32c/0x3a0
 [<ffffffff80419676>] ip_generic_getfrag+0x0/0x8b
 [<ffffffff8043359f>] udp_push_pending_frames+0x2ba/0x337
 [<ffffffff80434794>] udp_sendmsg+0x4c8/0x606
 [<ffffffff803eafbb>] sock_sendmsg+0xe2/0xff
 [<ffffffff8029e1a1>] iput+0x42/0x7b
 [<ffffffff802480e0>] autoremove_wake_function+0x0/0x2e
 [<ffffffff80275d0c>] find_extend_vma+0x16/0x59
 [<ffffffff8045e4d3>] _spin_lock_irqsave+0x9/0xe
 [<ffffffff80311d88>] __up_read+0x13/0x8a
 [<ffffffff803eba5c>] sys_sendto+0x128/0x151
 [<ffffffff8045e3ed>] _spin_unlock_bh+0x9/0x15
 [<ffffffff8020b7fc>] tracesys+0xdc/0xe1

BUG: soft lockup - CPU#2 stuck for 11s! [uperf.x86_64:16606]
CPU 2:
Modules linked in: ixgbe oprofile niu nfs lockd nfs_acl autofs4 hidp 
rfcomm l2cap bluetooth sunrpc ipv6 cpufreq_ondemand rdma_ucm ib_ucm 
rdma_cm iw_cm ib_addr ib_srp scsi_transport_srp ib_cm ib_ipoib ib_sa 
ib_uverbs ib_umad ib_mad ib_core dm_multipath battery ac parport_pc lp 
parport joydev sr_mod sg e1000 button i2c_nforce2 pcspkr shpchp i2c_core 
dm_snapshot dm_zero dm_mirror dm_mod usb_storage mptsas mptscsih mptbase 
scsi_transport_sas sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd
Pid: 16606, comm: uperf.x86_64 Not tainted 2.6.24-mati #3
RIP: 0010:[<ffffffff803ef462>]  [<ffffffff803ef462>] 
__copy_skb_header+0x4a/0x134
RSP: 0018:ffff8101ae14ba38  EFLAGS: 00000202
RAX: ffff8101fa048300 RBX: ffff8103fb35c100 RCX: ffffffff803f0453
RDX: ffff8101fa1e5d00 RSI: ffff8103fb35c100 RDI: ffff8101fa1e5d00
RBP: 0000000000000020 R08: ffff8101fa1e5d00 R09: ffff8103fb35c100
R10: 00000001c6920e60 R11: ffffffff80221995 R12: ffff810100052cc0
R13: ffffffff805abb88 R14: ffff8101ff231b80 R15: 0000000000000000
FS:  0000000040800940(0063) GS:ffff8101fb072700(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000044005f48 CR3: 00000001d0513000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

Call Trace:
 [<ffffffff803ef5f6>] __skb_clone+0x24/0xdc
 [<ffffffff803f152e>] skb_realloc_headroom+0x30/0x63
 [<ffffffff882edd40>] :niu:niu_start_xmit+0x114/0x5af
 [<ffffffff80221995>] gart_map_single+0x0/0x70
 [<ffffffff803f5e2b>] dev_hard_start_xmit+0x1d2/0x246
 [<ffffffff80406daf>] __qdisc_run+0x7b/0x174
 [<ffffffff80406dab>] __qdisc_run+0x77/0x174
 [<ffffffff803f8139>] dev_queue_xmit+0x141/0x270
 [<ffffffff80417faf>] ip_push_pending_frames+0x32c/0x3a0
 [<ffffffff80419676>] ip_generic_getfrag+0x0/0x8b
 [<ffffffff8043359f>] udp_push_pending_frames+0x2ba/0x337
 [<ffffffff80434794>] udp_sendmsg+0x4c8/0x606
 [<ffffffff803eafbb>] sock_sendmsg+0xe2/0xff
 [<ffffffff8029e1a1>] iput+0x42/0x7b
 [<ffffffff802480e0>] autoremove_wake_function+0x0/0x2e
 [<ffffffff80275d0c>] find_extend_vma+0x16/0x59
 [<ffffffff8045e4d3>] _spin_lock_irqsave+0x9/0xe
 [<ffffffff80311d88>] __up_read+0x13/0x8a
 [<ffffffff803eba5c>] sys_sendto+0x128/0x151
 [<ffffffff8045e3ed>] _spin_unlock_bh+0x9/0x15
 [<ffffffff8020b7fc>] tracesys+0xdc/0xe1

BUG: soft lockup - CPU#2 stuck for 11s! [uperf.x86_64:16606]
CPU 2:
Modules linked in: ixgbe oprofile niu nfs lockd nfs_acl autofs4 hidp 
rfcomm l2cap bluetooth sunrpc ipv6 cpufreq_ondemand rdma_ucm ib_ucm 
rdma_cm iw_cm ib_addr ib_srp scsi_transport_srp ib_cm ib_ipoib ib_sa 
ib_uverbs ib_umad ib_mad ib_core dm_multipath battery ac parport_pc lp 
parport joydev sr_mod sg e1000 button i2c_nforce2 pcspkr shpchp i2c_core 
dm_snapshot dm_zero dm_mirror dm_mod usb_storage mptsas mptscsih mptbase 
scsi_transport_sas sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd
Pid: 16606, comm: uperf.x86_64 Not tainted 2.6.24-mati #3
RIP: 0010:[<ffffffff803f065e>]  [<ffffffff803f065e>] 
pskb_expand_head+0x73/0x147
RSP: 0018:ffff8101ae14ba18  EFLAGS: 00000286
RAX: 0000000000000080 RBX: ffff8101c6476080 RCX: 000000000000059f
RDX: 0000000000000138 RSI: ffff8103f64ad841 RDI: ffff8101c64760c1
RBP: 0000000000000000 R08: ffff8101fb0722cb R09: 0000000000000002
R10: 0000000000000001 R11: 0000000000000002 R12: ffffffff8028725b
R13: ffff8101c6478000 R14: ffff8101ff191d80 R15: ffffffff805abb88
FS:  0000000040800940(0063) GS:ffff8101fb072700(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000044005f48 CR3: 00000001d0513000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

Call Trace:
 [<ffffffff803f0630>] pskb_expand_head+0x45/0x147
 [<ffffffff803f154b>] skb_realloc_headroom+0x4d/0x63
 [<ffffffff882edd40>] :niu:niu_start_xmit+0x114/0x5af
 [<ffffffff80221995>] gart_map_single+0x0/0x70
 [<ffffffff803f5e2b>] dev_hard_start_xmit+0x1d2/0x246
 [<ffffffff80406fb8>] pfifo_fast_dequeue+0x3b/0x59
 [<ffffffff80406dab>] __qdisc_run+0x77/0x174
 [<ffffffff803f8139>] dev_queue_xmit+0x141/0x270
 [<ffffffff80417faf>] ip_push_pending_frames+0x32c/0x3a0
 [<ffffffff80419676>] ip_generic_getfrag+0x0/0x8b
 [<ffffffff8043359f>] udp_push_pending_frames+0x2ba/0x337
 [<ffffffff80434794>] udp_sendmsg+0x4c8/0x606
 [<ffffffff803eafbb>] sock_sendmsg+0xe2/0xff
 [<ffffffff8029e1a1>] iput+0x42/0x7b
 [<ffffffff802480e0>] autoremove_wake_function+0x0/0x2e
 [<ffffffff80275d0c>] find_extend_vma+0x16/0x59
 [<ffffffff8045e4d3>] _spin_lock_irqsave+0x9/0xe
 [<ffffffff80311d88>] __up_read+0x13/0x8a
 [<ffffffff803eba5c>] sys_sendto+0x128/0x151
 [<ffffffff8045e3ed>] _spin_unlock_bh+0x9/0x15
 [<ffffffff8020b7fc>] tracesys+0xdc/0xe1



^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-26 20:26   ` Matheos Worku
@ 2008-03-26 21:46     ` Jarek Poplawski
  2008-03-26 21:53       ` Jarek Poplawski
  2008-03-27 10:33     ` Jarek Poplawski
  1 sibling, 1 reply; 36+ messages in thread
From: Jarek Poplawski @ 2008-03-26 21:46 UTC (permalink / raw)
  To: Matheos Worku; +Cc: netdev

On Wed, Mar 26, 2008 at 01:26:00PM -0700, Matheos Worku wrote:
...
> Reproduced the lockup with irqbalance disabled and with single src of  
> interrupt (TX interrupt, UDP transmit).  Lockup appears in different  
> location though.
>
> Regards
> matheos
>
> irq of interest: 454 (TX interrupt)
>
>
> 454:      19249      93234     907186       2691          0        188    
>       0        160   PCI-MSI-edge      eth6
...
> .......
>
> 454:      19249     126519     907186       2691          0        188    
>       0        160   PCI-MSI-edge      eth6


Hmm... Is this before disabling or I miss something?

Of course, my hint could be wrong here, but there are some issues
around napi vs. irq balancing, so it would be interesting to check
this with all network cards irqs affinity set (and respected).

This could be interesting:
http://marc.info/?l=linux-netdev&m=120349568512423&w=2
(but I suspect there are possible other reasons yet)

Jarek P.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-26 21:46     ` Jarek Poplawski
@ 2008-03-26 21:53       ` Jarek Poplawski
  0 siblings, 0 replies; 36+ messages in thread
From: Jarek Poplawski @ 2008-03-26 21:53 UTC (permalink / raw)
  To: Matheos Worku; +Cc: netdev

On Wed, Mar 26, 2008 at 10:46:48PM +0100, Jarek Poplawski wrote:
> On Wed, Mar 26, 2008 at 01:26:00PM -0700, Matheos Worku wrote:
...
> > 454:      19249      93234     907186       2691          0        188    
> >       0        160   PCI-MSI-edge      eth6
> ...
> > .......
> >
> > 454:      19249     126519     907186       2691          0        188    
> >       0        160   PCI-MSI-edge      eth6
> 
> 
> Hmm... Is this before disabling or I miss something?

OOPS! I see - only not cleared. So it's OK!

Sorry,
Jarek P.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-26 20:26   ` Matheos Worku
  2008-03-26 21:46     ` Jarek Poplawski
@ 2008-03-27 10:33     ` Jarek Poplawski
  2008-03-27 23:18       ` Brandeburg, Jesse
  1 sibling, 1 reply; 36+ messages in thread
From: Jarek Poplawski @ 2008-03-27 10:33 UTC (permalink / raw)
  To: Matheos Worku; +Cc: netdev

On Wed, Mar 26, 2008 at 01:26:00PM -0700, Matheos Worku wrote:
...
> nsn57-110 login: BUG: soft lockup - CPU#2 stuck for 11s!  
...
> Call Trace:
> [<ffffffff803ef5f6>] __skb_clone+0x24/0xdc
> [<ffffffff803f152e>] skb_realloc_headroom+0x30/0x63
> [<ffffffff882edd40>] :niu:niu_start_xmit+0x114/0x5af
> [<ffffffff80221995>] gart_map_single+0x0/0x70
> [<ffffffff803f5e2b>] dev_hard_start_xmit+0x1d2/0x246
...

Maybe I'm wrong with this again, but I wonder about this gart_map_single
on almost all traces, and probably not supposed to be seen here. Did you
try with some memory re-config/debugging?

Regards,
Jarek P.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* RE: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-27 10:33     ` Jarek Poplawski
@ 2008-03-27 23:18       ` Brandeburg, Jesse
  2008-03-27 23:45         ` Matheos Worku
  0 siblings, 1 reply; 36+ messages in thread
From: Brandeburg, Jesse @ 2008-03-27 23:18 UTC (permalink / raw)
  To: Jarek Poplawski, Matheos Worku; +Cc: netdev

Jarek Poplawski wrote:
> On Wed, Mar 26, 2008 at 01:26:00PM -0700, Matheos Worku wrote:
> ...
>> nsn57-110 login: BUG: soft lockup - CPU#2 stuck for 11s! ... Call
>> Trace: [<ffffffff803ef5f6>] __skb_clone+0x24/0xdc
>> [<ffffffff803f152e>] skb_realloc_headroom+0x30/0x63
>> [<ffffffff882edd40>] :niu:niu_start_xmit+0x114/0x5af
>> [<ffffffff80221995>] gart_map_single+0x0/0x70
>> [<ffffffff803f5e2b>] dev_hard_start_xmit+0x1d2/0x246 ...
> 
> Maybe I'm wrong with this again, but I wonder about this
> gart_map_single on almost all traces, and probably not supposed to be
> seen here. Did you try with some memory re-config/debugging?

I have some more examples of this but with the ixgbe driver.  We are
running heavy bidirectional stress with multiple rx (non-napi, yeah I
know) interrupts by default (and userspace irqbalance is probably on,
I'll have the lab try it without)

Most of our traces are from redhat 2.6.18 kernel, or 2.6.21.5, I'll try
to get a more recent kernel tested.

here is some related data if that helps at all.

2.6.21.5
=====================================

[  180.487937] BUG: soft lockup detected on CPU#0!
[  180.492461] 
[  180.492461] Call Trace:
[  180.496426]  <IRQ>  [<ffffffff8025d788>] softlockup_tick+0xd4/0xe9
[  180.502650]  [<ffffffff8023bc57>] run_local_timers+0x13/0x15
[  180.508317]  [<ffffffff8023bf37>] update_process_times+0x4c/0x78
[  180.514323]  [<ffffffff802181d0>] smp_local_timer_interrupt+0x34/0x51
[  180.520761]  [<ffffffff80218966>] smp_apic_timer_interrupt+0x43/0x5d
[  180.527104]  [<ffffffff8020a31b>] apic_timer_interrupt+0x6b/0x70
[  180.533113]  [<ffffffff80533e2e>] _spin_unlock_irqrestore+0x3f/0x69
[  180.539372]  [<ffffffff80533e31>] _spin_unlock_irqrestore+0x42/0x69
[  180.545648]  [<ffffffff804ba219>] skb_queue_tail+0x41/0x49
[  180.551133]  [<ffffffff804b990e>] sock_queue_rcv_skb+0xe2/0x11c
[  180.557055]  [<ffffffff804f440e>] udp_queue_rcv_skb+0xb6/0x180
[  180.562877]  [<ffffffff804f492e>] __udp4_lib_rcv+0x456/0x594
[  180.568538]  [<ffffffff804f4a7e>] udp_rcv+0x12/0x14
[  180.573439]  [<ffffffff804d5572>] ip_local_deliver+0xca/0x171
[  180.579191]  [<ffffffff804d5b28>] ip_rcv+0x424/0x464
[  180.584171]  [<ffffffff804bf912>] netif_receive_skb+0x25a/0x30f
[  180.590091]  [<ffffffff804c182c>] process_backlog+0xab/0x10f
[  180.595741]  [<ffffffff804c1acc>] net_rx_action+0xbb/0x254
[  180.601220]  [<ffffffff80237cb5>] __do_softirq+0x5e/0xe2
[  180.606544]  [<ffffffff8020a86c>] call_softirq+0x1c/0x28
[  180.611850]  [<ffffffff8020bcd2>] do_softirq+0x39/0x9f
[  180.616983]  [<ffffffff80237c4b>] irq_exit+0x45/0x51
[  180.621941]  [<ffffffff8020be7b>] do_IRQ+0x143/0x168
[  180.626913]  [<ffffffff80209b86>] ret_from_intr+0x0/0xf
[  180.632131]  <EOI>  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
[  180.638424]  [<ffffffff8028391c>] kfree+0x204/0x216
[  180.643296]  [<ffffffff8028391f>] kfree+0x207/0x216
[  180.648188]  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
[  180.653829]  [<ffffffff804bb02c>] kfree_skbmem+0x11/0x7e
[  180.659145]  [<ffffffff804bb13d>] __kfree_skb+0xa4/0xa9
[  180.664365]  [<ffffffff804bb16c>] kfree_skb+0x2a/0x2c
[  180.669412]  [<ffffffff804bd07d>] skb_free_datagram+0xc/0xe
[  180.674985]  [<ffffffff804f5649>] udp_recvmsg+0x1e1/0x25f
[  180.680388]  [<ffffffff804b725e>] sock_common_recvmsg+0x32/0x47
[  180.686322]  [<ffffffff804b5d7d>] sock_recvmsg+0xe5/0xfe
[  180.691629]  [<ffffffff8024e84b>] __lock_acquire+0xb4a/0xbde
[  180.697299]  [<ffffffff802464bd>] autoremove_wake_function+0x0/0x38
[  180.703562]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
[  180.709825]  [<ffffffff804bb095>] kfree_skbmem+0x7a/0x7e
[  180.715148]  [<ffffffff80209be0>] restore_args+0x0/0x30
[  180.720381]  [<ffffffff80338e30>] copy_user_generic_string+0x0/0x40
[  180.726652]  [<ffffffff804b6b64>] sys_recvfrom+0xce/0x122
[  180.732045]  [<ffffffff8024d864>] trace_hardirqs_on+0x125/0x150
[  180.737964]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
[  180.744222]  [<ffffffff8020963e>] system_call+0x7e/0x83
[  180.749457] 
[  190.731184] BUG: soft lockup detected on CPU#0!
[  190.735704] 
[  190.735705] Call Trace:
[  190.739661]  <IRQ>  [<ffffffff8025d788>] softlockup_tick+0xd4/0xe9
[  190.745886]  [<ffffffff8023bc57>] run_local_timers+0x13/0x15
[  190.751555]  [<ffffffff8023bf37>] update_process_times+0x4c/0x78
[  190.751561]  [<ffffffff802181d0>] smp_local_timer_interrupt+0x34/0x51
[  190.751566]  [<ffffffff80218966>] smp_apic_timer_interrupt+0x43/0x5d
[  190.751571]  [<ffffffff8020a31b>] apic_timer_interrupt+0x6b/0x70
[  190.751577]  [<ffffffff80533e2e>] _spin_unlock_irqrestore+0x3f/0x69
[  190.751582]  [<ffffffff80533e31>] _spin_unlock_irqrestore+0x42/0x69
[  190.751587]  [<ffffffff804ba219>] skb_queue_tail+0x41/0x49
[  190.751590]  [<ffffffff804b990e>] sock_queue_rcv_skb+0xe2/0x11c
[  190.751595]  [<ffffffff804f440e>] udp_queue_rcv_skb+0xb6/0x180
[  190.751599]  [<ffffffff804f492e>] __udp4_lib_rcv+0x456/0x594
[  190.751603]  [<ffffffff804f4a7e>] udp_rcv+0x12/0x14
[  190.751609]  [<ffffffff804d5572>] ip_local_deliver+0xca/0x171
[  190.751613]  [<ffffffff804d5b28>] ip_rcv+0x424/0x464
[  190.751617]  [<ffffffff804bf912>] netif_receive_skb+0x25a/0x30f
[  190.751621]  [<ffffffff804c182c>] process_backlog+0xab/0x10f
[  190.751625]  [<ffffffff804c1acc>] net_rx_action+0xbb/0x254
[  190.751630]  [<ffffffff80237cb5>] __do_softirq+0x5e/0xe2
[  190.751634]  [<ffffffff8020a86c>] call_softirq+0x1c/0x28
[  190.751638]  [<ffffffff8020bcd2>] do_softirq+0x39/0x9f
[  190.751642]  [<ffffffff80237c4b>] irq_exit+0x45/0x51
[  190.751645]  [<ffffffff8020be7b>] do_IRQ+0x143/0x168
[  190.751649]  [<ffffffff80209b86>] ret_from_intr+0x0/0xf
[  190.751652]  <EOI>  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
[  190.751660]  [<ffffffff8028391c>] kfree+0x204/0x216
[  190.751664]  [<ffffffff8028391f>] kfree+0x207/0x216
[  190.751669]  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
[  190.751672]  [<ffffffff804bb02c>] kfree_skbmem+0x11/0x7e
[  190.751676]  [<ffffffff804bb13d>] __kfree_skb+0xa4/0xa9
[  190.751680]  [<ffffffff804bb16c>] kfree_skb+0x2a/0x2c
[  190.751684]  [<ffffffff804bd07d>] skb_free_datagram+0xc/0xe
[  190.751688]  [<ffffffff804f5649>] udp_recvmsg+0x1e1/0x25f
[  190.751695]  [<ffffffff804b725e>] sock_common_recvmsg+0x32/0x47
[  190.751699]  [<ffffffff804b5d7d>] sock_recvmsg+0xe5/0xfe
[  190.751703]  [<ffffffff8024e84b>] __lock_acquire+0xb4a/0xbde
[  190.751709]  [<ffffffff802464bd>] autoremove_wake_function+0x0/0x38
[  190.751713]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
[  190.751717]  [<ffffffff804bb095>] kfree_skbmem+0x7a/0x7e
[  190.751721]  [<ffffffff80209be0>] restore_args+0x0/0x30
[  190.751727]  [<ffffffff80338e30>] copy_user_generic_string+0x0/0x40
[  190.751731]  [<ffffffff804b6b64>] sys_recvfrom+0xce/0x122
[  190.751736]  [<ffffffff8024d864>] trace_hardirqs_on+0x125/0x150
[  190.751740]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
[  190.751745]  [<ffffffff8020963e>] system_call+0x7e/0x83
[  190.751749] 
[  200.738822] BUG: soft lockup detected on CPU#0!
[  200.743364] 
[  200.743364] Call Trace:
[  200.747304]  <IRQ>  [<ffffffff8025d788>] softlockup_tick+0xd4/0xe9
[  200.753531]  [<ffffffff8023bc57>] run_local_timers+0x13/0x15
[  200.759188]  [<ffffffff8023bf37>] update_process_times+0x4c/0x78
[  200.765189]  [<ffffffff802181d0>] smp_local_timer_interrupt+0x34/0x51
[  200.771634]  [<ffffffff80218966>] smp_apic_timer_interrupt+0x43/0x5d
[  200.777987]  [<ffffffff8020a31b>] apic_timer_interrupt+0x6b/0x70
[  200.783997]  [<ffffffff80533e2e>] _spin_unlock_irqrestore+0x3f/0x69
[  200.790261]  [<ffffffff80533e31>] _spin_unlock_irqrestore+0x42/0x69
[  200.796519]  [<ffffffff804ba219>] skb_queue_tail+0x41/0x49
[  200.802004]  [<ffffffff804b990e>] sock_queue_rcv_skb+0xe2/0x11c
[  200.807925]  [<ffffffff804f440e>] udp_queue_rcv_skb+0xb6/0x180
[  200.813757]  [<ffffffff804f492e>] __udp4_lib_rcv+0x456/0x594
[  200.819401]  [<ffffffff804f4a7e>] udp_rcv+0x12/0x14
[  200.824294]  [<ffffffff804d5572>] ip_local_deliver+0xca/0x171
[  200.830030]  [<ffffffff804d5b28>] ip_rcv+0x424/0x464
[  200.835003]  [<ffffffff804bf912>] netif_receive_skb+0x25a/0x30f
[  200.840919]  [<ffffffff804c182c>] process_backlog+0xab/0x10f
[  200.846582]  [<ffffffff804c1acc>] net_rx_action+0xbb/0x254
[  200.852070]  [<ffffffff80237cb5>] __do_softirq+0x5e/0xe2
[  200.857375]  [<ffffffff8020a86c>] call_softirq+0x1c/0x28
[  200.862680]  [<ffffffff8020bcd2>] do_softirq+0x39/0x9f
[  200.867830]  [<ffffffff80237c4b>] irq_exit+0x45/0x51
[  200.872788]  [<ffffffff8020be7b>] do_IRQ+0x143/0x168
[  200.877748]  [<ffffffff80209b86>] ret_from_intr+0x0/0xf
[  200.882977]  <EOI>  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
[  200.889287]  [<ffffffff8028391c>] kfree+0x204/0x216
[  200.894168]  [<ffffffff8028391f>] kfree+0x207/0x216
[  200.899042]  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
[  200.904685]  [<ffffffff804bb02c>] kfree_skbmem+0x11/0x7e
[  200.909999]  [<ffffffff804bb13d>] __kfree_skb+0xa4/0xa9
[  200.915220]  [<ffffffff804bb16c>] kfree_skb+0x2a/0x2c
[  200.920279]  [<ffffffff804bd07d>] skb_free_datagram+0xc/0xe
[  200.925844]  [<ffffffff804f5649>] udp_recvmsg+0x1e1/0x25f
[  200.931249]  [<ffffffff804b725e>] sock_common_recvmsg+0x32/0x47
[  200.937183]  [<ffffffff804b5d7d>] sock_recvmsg+0xe5/0xfe
[  200.942490]  [<ffffffff8024e84b>] __lock_acquire+0xb4a/0xbde
[  200.948150]  [<ffffffff802464bd>] autoremove_wake_function+0x0/0x38
[  200.954417]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
[  200.960670]  [<ffffffff804bb095>] kfree_skbmem+0x7a/0x7e
[  200.965984]  [<ffffffff80209be0>] restore_args+0x0/0x30
[  200.971215]  [<ffffffff80338e30>] copy_user_generic_string+0x0/0x40
[  200.977480]  [<ffffffff804b6b64>] sys_recvfrom+0xce/0x122
[  200.982881]  [<ffffffff8024d864>] trace_hardirqs_on+0x125/0x150
[  200.988791]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
[  200.995059]  [<ffffffff8020963e>] system_call+0x7e/0x83

2.6.18-5-xen
==================================================

BUG: soft lockup detected on CPU#0!

Call Trace:
 <IRQ>  [<ffffffff802a76d8>] softlockup_tick+0xdb/0xed
 [<ffffffff8026ba8c>] timer_interrupt+0x396/0x3f2
 [<ffffffff80210a87>] handle_IRQ_event+0x2d/0x60
 [<ffffffff802a7a17>] __do_IRQ+0xa4/0x105
 [<ffffffff802699cf>] do_IRQ+0xe7/0xf5
 [<ffffffff8038dede>] evtchn_do_upcall+0x86/0xe0
 [<ffffffff8025cbfe>] do_hypervisor_callback+0x1e/0x2c
 [<ffffffff8847b58b>] :ixgbe:ixgbe_clean_rx_irq+0x16b/0xa40
 [<ffffffff8847abb7>] :ixgbe:ixgbe_clean_tx_irq+0xe7/0x330
 [<ffffffff8847bf4d>] :ixgbe:ixgbe_intr+0xed/0x220
 [<ffffffff80210a87>] handle_IRQ_event+0x2d/0x60
 [<ffffffff802a7a17>] __do_IRQ+0xa4/0x105
 [<ffffffff802699cf>] do_IRQ+0xe7/0xf5
 [<ffffffff8038dede>] evtchn_do_upcall+0x86/0xe0
 [<ffffffff8025cbfe>] do_hypervisor_callback+0x1e/0x2c
 [<ffffffff80226aac>] tcp_v4_rcv+0x6bc/0xa59
 [<ffffffff802268e9>] tcp_v4_rcv+0x4f9/0xa59
 [<ffffffff8025cbfe>] do_hypervisor_callback+0x1e/0x2c
 [<ffffffff8023463b>] ip_local_deliver+0x19d/0x263
 [<ffffffff8023591a>] ip_rcv+0x49c/0x4df
 [<ffffffff8021fe67>] netif_receive_skb+0x361/0x3df
 [<ffffffff802307e3>] process_backlog+0x96/0xff
 [<ffffffff8020c5ca>] net_rx_action+0xa8/0x1b4
 [<ffffffff80211ed3>] __do_softirq+0x62/0xdd
 [<ffffffff8025d0cc>] call_softirq+0x1c/0x28
 <EOI>  [<ffffffff80269b59>] do_softirq+0x31/0x98
 [<ffffffff8028714b>] local_bh_enable_ip+0x48/0x59
 [<ffffffff8021cde4>] tcp_recvmsg+0x9db/0xaf0
 [<ffffffff80231b2b>] sock_common_recvmsg+0x2d/0x42
 [<ffffffff8023066b>] sock_recvmsg+0x101/0x120
 [<ffffffff8029448d>] autoremove_wake_function+0x0/0x2e
 [<ffffffff80246001>] sprintf+0x51/0x59
 [<ffffffff8022fcfe>] dev_queue_xmit+0x2f2/0x313
 [<ffffffff8022b25c>] local_bh_enable+0x9/0xa4
 [<ffffffff8023356b>] lock_sock+0xa7/0xb2
 [<ffffffff80260711>] _spin_lock_bh+0x9/0x14
 [<ffffffff80230e57>] release_sock+0x13/0xaa
 [<ffffffff8022b25c>] local_bh_enable+0x9/0xa4
 [<ffffffff8023356b>] lock_sock+0xa7/0xb2
 [<ffffffff8023af7b>] d_instantiate+0x4a/0x82
 [<ffffffff802408aa>] d_rehash+0x21/0x34
 [<ffffffff8022b16f>] sys_recvfrom+0xd4/0x137
 [<ffffffff802a67f9>] audit_syscall_exit+0x2b/0x2ec
 [<ffffffff8025c621>] tracesys+0xa7/0xb2

BUG: soft lockup detected on CPU#0!

Call Trace:
 <IRQ>  [<ffffffff802a76d8>] softlockup_tick+0xdb/0xed
 [<ffffffff8026ba8c>] timer_interrupt+0x396/0x3f2
 [<ffffffff80210a87>] handle_IRQ_event+0x2d/0x60
 [<ffffffff802a7a17>] __do_IRQ+0xa4/0x105
 [<ffffffff802699cf>] do_IRQ+0xe7/0xf5
 [<ffffffff8038dede>] evtchn_do_upcall+0x86/0xe0
 [<ffffffff8025cbfe>] do_hypervisor_callback+0x1e/0x2c
 [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
 [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
 [<ffffffff8038d649>] force_evtchn_callback+0xa/0xb
 [<ffffffff8020ab34>] kmem_cache_alloc+0x62/0x6d
 [<ffffffff802350a4>] alloc_skb_from_cache+0x52/0x13c
 [<ffffffff803f183f>] __netdev_alloc_skb+0x12/0x2d
 [<ffffffff8847b31b>] :ixgbe:ixgbe_alloc_rx_buffers+0xfb/0x200
 [<ffffffff8847bcd2>] :ixgbe:ixgbe_clean_rx_irq+0x8b2/0xa40
 [<ffffffff8847aac4>] :ixgbe:ixgbe_unmap_and_free_tx_resource+0x44/0x50
 [<ffffffff8847bf4d>] :ixgbe:ixgbe_intr+0xed/0x220
 [<ffffffff80210a87>] handle_IRQ_event+0x2d/0x60
 [<ffffffff802a7a17>] __do_IRQ+0xa4/0x105
 [<ffffffff802699cf>] do_IRQ+0xe7/0xf5
 [<ffffffff80270394>] xen_send_IPI_mask+0xa5/0xaa
 [<ffffffff8038dede>] evtchn_do_upcall+0x86/0xe0
 [<ffffffff8026fa43>] smp_send_reschedule+0x4b/0x50
 [<ffffffff8025cbfe>] do_hypervisor_callback+0x1e/0x2c
 [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
 [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
 [<ffffffff8023dcca>] lock_timer_base+0x1b/0x3c
 [<ffffffff8038d649>] force_evtchn_callback+0xa/0xb
 [<ffffffff8021bf22>] __mod_timer+0xb0/0xbe
 [<ffffffff80253b8d>] sk_reset_timer+0xf/0x19
 [<ffffffff80226a6f>] tcp_v4_rcv+0x67f/0xa59
 [<ffffffff8025e499>] __sched_text_start+0x2d9/0x97b
 [<ffffffff8023463b>] ip_local_deliver+0x19d/0x263
 [<ffffffff8023591a>] ip_rcv+0x49c/0x4df
 [<ffffffff8021fe67>] netif_receive_skb+0x361/0x3df
 [<ffffffff802307e3>] process_backlog+0x96/0xff
 [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
 [<ffffffff8020c5ca>] net_rx_action+0xa8/0x1b4
 [<ffffffff80211ed3>] __do_softirq+0x62/0xdd
 [<ffffffff8025d0cc>] call_softirq+0x1c/0x28
 <EOI>  [<ffffffff80269b59>] do_softirq+0x31/0x98
 [<ffffffff8022b2e6>] local_bh_enable+0x93/0xa4
 [<ffffffff8025308f>] __tcp_checksum_complete_user+0x19/0x2c
 [<ffffffff8021aeb2>] tcp_rcv_established+0x45c/0x917
 [<ffffffff8023b449>] tcp_v4_do_rcv+0x2a/0x300
 [<ffffffff80230e98>] release_sock+0x54/0xaa
 [<ffffffff8021cde4>] tcp_recvmsg+0x9db/0xaf0
 [<ffffffff80231b2b>] sock_common_recvmsg+0x2d/0x42
 [<ffffffff8023066b>] sock_recvmsg+0x101/0x120
 [<ffffffff8029448d>] autoremove_wake_function+0x0/0x2e
 [<ffffffff80246001>] sprintf+0x51/0x59
 [<ffffffff8022fcfe>] dev_queue_xmit+0x2f2/0x313
 [<ffffffff8022b25c>] local_bh_enable+0x9/0xa4
 [<ffffffff8023356b>] lock_sock+0xa7/0xb2
 [<ffffffff80260711>] _spin_lock_bh+0x9/0x14
 [<ffffffff80230e57>] release_sock+0x13/0xaa
 [<ffffffff8022b25c>] local_bh_enable+0x9/0xa4
 [<ffffffff8023356b>] lock_sock+0xa7/0xb2
 [<ffffffff8023af7b>] d_instantiate+0x4a/0x82
 [<ffffffff802408aa>] d_rehash+0x21/0x34
 [<ffffffff8022b16f>] sys_recvfrom+0xd4/0x137
 [<ffffffff803ed57c>] move_addr_to_user+0x5d/0x78
 [<ffffffff803ed641>] sys_getpeername+0x9f/0xb5
 [<ffffffff8025c621>] tracesys+0xa7/0xb2



^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-27 23:18       ` Brandeburg, Jesse
@ 2008-03-27 23:45         ` Matheos Worku
  2008-03-28  0:02           ` David Miller
  0 siblings, 1 reply; 36+ messages in thread
From: Matheos Worku @ 2008-03-27 23:45 UTC (permalink / raw)
  To: Brandeburg, Jesse; +Cc: Jarek Poplawski, netdev

Brandeburg, Jesse wrote:
> Jarek Poplawski wrote:
>   
>> On Wed, Mar 26, 2008 at 01:26:00PM -0700, Matheos Worku wrote:
>> ...
>>     
>>> nsn57-110 login: BUG: soft lockup - CPU#2 stuck for 11s! ... Call
>>> Trace: [<ffffffff803ef5f6>] __skb_clone+0x24/0xdc
>>> [<ffffffff803f152e>] skb_realloc_headroom+0x30/0x63
>>> [<ffffffff882edd40>] :niu:niu_start_xmit+0x114/0x5af
>>> [<ffffffff80221995>] gart_map_single+0x0/0x70
>>> [<ffffffff803f5e2b>] dev_hard_start_xmit+0x1d2/0x246 ...
>>>       
>> Maybe I'm wrong with this again, but I wonder about this
>> gart_map_single on almost all traces, and probably not supposed to be
>> seen here. Did you try with some memory re-config/debugging?
>>     
>
> I have some more examples of this but with the ixgbe driver.  We are
> running heavy bidirectional stress with multiple rx (non-napi, yeah I
> know) interrupts by default (and userspace irqbalance is probably on,
> I'll have the lab try it without)
>   

I have seen the lockup on kernels 2.6.18 and newer mostly on TX traffic. 
I have seen it on another 10G driver (off the tree niu driver sibling, 
nxge).  The nxge driver doesn't use any TX interrupts and I have seen it 
with UDP TX, irqbalance disabled, with no irq activity at all.  some 
example traces included.
Regards
Matheos


nsn57-110 login: BUG: soft lockup - CPU#4 stuck for 11s! [uperf.x86_64:6697]
CPU 4:
Modules linked in: nxge nfs lockd nfs_acl autofs4 hidp rfcomm l2cap 
bluetooth sunrpc ipv6 cpufreq_ondemand rdma_ucm ib_ucm rdma_cm iw_cm 
ib_addr ib_srp scsi_transport_srp ib_cm ib_ipoib ib_sa ib_uverbs ib_umad 
ib_mad ib_core dm_multipath battery ac parport_pc lp parport joydev 
sr_mod sg e1000 i2c_nforce2 button i2c_core shpchp pcspkr dm_snapshot 
dm_zerodm_mirror dm_mod usb_storage mptsas mptscsih mptbase 
scsi_transport_sas sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd
Pid: 6697, comm: uperf.x86_64 Not tainted 2.6.24-mati #3
RIP: 0010:[<ffffffff80316c64>]  [<ffffffff80316c64>] 
_raw_spin_unlock+0x37/0x7f
RSP: 0018:ffff8101e00c3af8  EFLAGS: 00000246
RAX: ffff8101e084e000 RBX: ffff8101f0908000 RCX: ffff8101f0908780
RDX: 0000000000000000 RSI: 0000000000000116 RDI: ffff8101f0908300
RBP: 00000000000003d5 R08: 0000000000000004 R09: 0000000000000115
R10: ffff8101e00c3968 R11: 0000000000000000 R12: ffff8101e00c3968
R13: 0000000000000000 R14: ffff8101f0908000 R15: ffffffff882e77ef
FS:  0000000041001940(0063) GS:ffff8102fba13580(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000000004f81cf48 CR3: 00000001e05b4000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

Call Trace:
 [<ffffffff80406dca>] __qdisc_run+0x96/0x174
 [<ffffffff803f8139>] dev_queue_xmit+0x141/0x270
 [<ffffffff80417faf>] ip_push_pending_frames+0x32c/0x3a0
 [<ffffffff80419676>] ip_generic_getfrag+0x0/0x8b
 [<ffffffff8043359f>] udp_push_pending_frames+0x2ba/0x337
 [<ffffffff80434794>] udp_sendmsg+0x4c8/0x606
 [<ffffffff803eafbb>] sock_sendmsg+0xe2/0xff
 [<ffffffff8029e1a1>] iput+0x42/0x7b
 [<ffffffff802480e0>] autoremove_wake_function+0x0/0x2e
 [<ffffffff80275d0c>] find_extend_vma+0x16/0x59
 [<ffffffff8045e4d3>] _spin_lock_irqsave+0x9/0xe
 [<ffffffff80311d88>] __up_read+0x13/0x8a
 [<ffffffff803eba5c>] sys_sendto+0x128/0x151
 [<ffffffff8045e3ed>] _spin_unlock_bh+0x9/0x15
 [<ffffffff8020b7fc>] tracesys+0xdc/0xe1

BUG: soft lockup - CPU#4 stuck for 11s! [uperf.x86_64:6697]
CPU 4:
Modules linked in: nxge nfs lockd nfs_acl autofs4 hidp rfcomm l2cap 
bluetooth sunrpc ipv6 cpufreq_ondemand rdma_ucm ib_ucm rdma_cm iw_cm 
ib_addr ib_srp scsi_transport_srp ib_cm ib_ipoib ib_sa ib_uverbs ib_umad 
ib_mad ib_core dm_multipath battery ac parport_pc lp parport joydev 
sr_mod sg e1000 i2c_nforce2 button i2c_core shpchp pcspkr dm_snapshot 
dm_zero dm_mirror dm_mod usb_storage mptsas mptscsih mptbase 
scsi_transport_sas sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd
Pid: 6697, comm: uperf.x86_64 Not tainted 2.6.24-mati #3
RIP: 0010:[<ffffffff80316d29>]  [<ffffffff80316d29>] 
_raw_spin_lock+0x7d/0xf6
RSP: 0018:ffff8101e00c3ad8  EFLAGS: 00000246
RAX: 0000000000000000 RBX: 0000000000000036 RCX: 00000000dabeab42
RDX: 0000000000000e24 RSI: 0000000000000392 RDI: 0000000000000001
RBP: ffffffff882e77ef R08: 0000000000000004 R09: 0000000000000391
R10: ffff8101e00c3968 R11: 0000000000000000 R12: ffffffffffffff10
R13: 0000000000000011 R14: ffff8102f9db8010 R15: 00000000000005de
FS:  0000000041001940(0063) GS:ffff8102fba13580(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000000004f81cf48 CR3: 00000001e05b4000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

Call Trace:
 [<ffffffff80316d3a>] _raw_spin_lock+0x8e/0xf6
 [<ffffffff80406fa1>] pfifo_fast_dequeue+0x24/0x59
 [<ffffffff80406dd2>] __qdisc_run+0x9e/0x174
 [<ffffffff803f8139>] dev_queue_xmit+0x141/0x270
 [<ffffffff80417faf>] ip_push_pending_frames+0x32c/0x3a0
 [<ffffffff80419676>] ip_generic_getfrag+0x0/0x8b
 [<ffffffff8043359f>] udp_push_pending_frames+0x2ba/0x337
 [<ffffffff80434794>] udp_sendmsg+0x4c8/0x606
 [<ffffffff803eafbb>] sock_sendmsg+0xe2/0xff
 [<ffffffff8029e1a1>] iput+0x42/0x7b
 [<ffffffff802480e0>] autoremove_wake_function+0x0/0x2e
 [<ffffffff80275d0c>] find_extend_vma+0x16/0x59
 [<ffffffff8045e4d3>] _spin_lock_irqsave+0x9/0xe
 [<ffffffff80311d88>] __up_read+0x13/0x8a
 [<ffffffff803eba5c>] sys_sendto+0x128/0x151
 [<ffffffff8045e3ed>] _spin_unlock_bh+0x9/0x15
 [<ffffffff8020b7fc>] tracesys+0xdc/0xe1

BUG: soft lockup - CPU#4 stuck for 11s! [uperf.x86_64:6697]
CPU 4:
Modules linked in: nxge nfs lockd nfs_acl autofs4 hidp rfcomm l2cap 
bluetooth sunrpc ipv6 cpufreq_ondemand rdma_ucm ib_ucm rdma_cm iw_cm 
ib_addr ib_srp scsi_transport_srp ib_cm ib_ipoib ib_sa ib_uverbs ib_umad 
ib_mad ib_core dm_multipath battery ac parport_pc lp parport joydev 
sr_mod sg e1000 i2c_nforce2 button i2c_core shpchp pcspkr dm_snapshot 
dm_zero dm_mirror dm_mod usb_storage mptsas mptscsih mptbase 
scsi_transport_sas sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd
Pid: 6697, comm: uperf.x86_64 Not tainted 2.6.24-mati #3
RIP: 0010:[<ffffffff80316d29>]  [<ffffffff80316d29>] 
_raw_spin_lock+0x7d/0xf6
RSP: 0018:ffff8101e00c3ad8  EFLAGS: 00000246
RAX: 0000000000000000 RBX: 0000000000000026 RCX: 000000002a2092e7
RDX: 0000000000000e28 RSI: 00000000000001d8 RDI: 0000000000000001
RBP: ffffffff882e77ef R08: 0000000000000004 R09: 00000000000001d7
R10: ffff8101e00c3968 R11: 0000000000000000 R12: ffffffffffffff10
R13: 0000000000000011 R14: ffff8102f686e010 R15: 00000000000005de
FS:  0000000041001940(0063) GS:ffff8102fba13580(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000000004f81cf48 CR3: 00000001e05b4000 CR4: 00000000000006e0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400

Call Trace:
 [<ffffffff80316d3a>] _raw_spin_lock+0x8e/0xf6
 [<ffffffff80406e8a>] __qdisc_run+0x156/0x174
 [<ffffffff80406dd2>] __qdisc_run+0x9e/0x174
 [<ffffffff803f8139>] dev_queue_xmit+0x141/0x270
 [<ffffffff80417faf>] ip_push_pending_frames+0x32c/0x3a0
 [<ffffffff80419676>] ip_generic_getfrag+0x0/0x8b
 [<ffffffff8043359f>] udp_push_pending_frames+0x2ba/0x337
 [<ffffffff80434794>] udp_sendmsg+0x4c8/0x606
 [<ffffffff803eafbb>] sock_sendmsg+0xe2/0xff
 [<ffffffff8029e1a1>] iput+0x42/0x7b
 [<ffffffff802480e0>] autoremove_wake_function+0x0/0x2e
 [<ffffffff80275d0c>] find_extend_vma+0x16/0x59
 [<ffffffff8045e4d3>] _spin_lock_irqsave+0x9/0xe
 [<ffffffff80311d88>] __up_read+0x13/0x8a
 [<ffffffff803eba5c>] sys_sendto+0x128/0x151
 [<ffffffff8045e3ed>] _spin_unlock_bh+0x9/0x15
 [<ffffffff8020b7fc>] tracesys+0xdc/0xe1




> Most of our traces are from redhat 2.6.18 kernel, or 2.6.21.5, I'll try
> to get a more recent kernel tested.
>
> here is some related data if that helps at all.
>
> 2.6.21.5
> =====================================
>
> [  180.487937] BUG: soft lockup detected on CPU#0!
> [  180.492461] 
> [  180.492461] Call Trace:
> [  180.496426]  <IRQ>  [<ffffffff8025d788>] softlockup_tick+0xd4/0xe9
> [  180.502650]  [<ffffffff8023bc57>] run_local_timers+0x13/0x15
> [  180.508317]  [<ffffffff8023bf37>] update_process_times+0x4c/0x78
> [  180.514323]  [<ffffffff802181d0>] smp_local_timer_interrupt+0x34/0x51
> [  180.520761]  [<ffffffff80218966>] smp_apic_timer_interrupt+0x43/0x5d
> [  180.527104]  [<ffffffff8020a31b>] apic_timer_interrupt+0x6b/0x70
> [  180.533113]  [<ffffffff80533e2e>] _spin_unlock_irqrestore+0x3f/0x69
> [  180.539372]  [<ffffffff80533e31>] _spin_unlock_irqrestore+0x42/0x69
> [  180.545648]  [<ffffffff804ba219>] skb_queue_tail+0x41/0x49
> [  180.551133]  [<ffffffff804b990e>] sock_queue_rcv_skb+0xe2/0x11c
> [  180.557055]  [<ffffffff804f440e>] udp_queue_rcv_skb+0xb6/0x180
> [  180.562877]  [<ffffffff804f492e>] __udp4_lib_rcv+0x456/0x594
> [  180.568538]  [<ffffffff804f4a7e>] udp_rcv+0x12/0x14
> [  180.573439]  [<ffffffff804d5572>] ip_local_deliver+0xca/0x171
> [  180.579191]  [<ffffffff804d5b28>] ip_rcv+0x424/0x464
> [  180.584171]  [<ffffffff804bf912>] netif_receive_skb+0x25a/0x30f
> [  180.590091]  [<ffffffff804c182c>] process_backlog+0xab/0x10f
> [  180.595741]  [<ffffffff804c1acc>] net_rx_action+0xbb/0x254
> [  180.601220]  [<ffffffff80237cb5>] __do_softirq+0x5e/0xe2
> [  180.606544]  [<ffffffff8020a86c>] call_softirq+0x1c/0x28
> [  180.611850]  [<ffffffff8020bcd2>] do_softirq+0x39/0x9f
> [  180.616983]  [<ffffffff80237c4b>] irq_exit+0x45/0x51
> [  180.621941]  [<ffffffff8020be7b>] do_IRQ+0x143/0x168
> [  180.626913]  [<ffffffff80209b86>] ret_from_intr+0x0/0xf
> [  180.632131]  <EOI>  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
> [  180.638424]  [<ffffffff8028391c>] kfree+0x204/0x216
> [  180.643296]  [<ffffffff8028391f>] kfree+0x207/0x216
> [  180.648188]  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
> [  180.653829]  [<ffffffff804bb02c>] kfree_skbmem+0x11/0x7e
> [  180.659145]  [<ffffffff804bb13d>] __kfree_skb+0xa4/0xa9
> [  180.664365]  [<ffffffff804bb16c>] kfree_skb+0x2a/0x2c
> [  180.669412]  [<ffffffff804bd07d>] skb_free_datagram+0xc/0xe
> [  180.674985]  [<ffffffff804f5649>] udp_recvmsg+0x1e1/0x25f
> [  180.680388]  [<ffffffff804b725e>] sock_common_recvmsg+0x32/0x47
> [  180.686322]  [<ffffffff804b5d7d>] sock_recvmsg+0xe5/0xfe
> [  180.691629]  [<ffffffff8024e84b>] __lock_acquire+0xb4a/0xbde
> [  180.697299]  [<ffffffff802464bd>] autoremove_wake_function+0x0/0x38
> [  180.703562]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
> [  180.709825]  [<ffffffff804bb095>] kfree_skbmem+0x7a/0x7e
> [  180.715148]  [<ffffffff80209be0>] restore_args+0x0/0x30
> [  180.720381]  [<ffffffff80338e30>] copy_user_generic_string+0x0/0x40
> [  180.726652]  [<ffffffff804b6b64>] sys_recvfrom+0xce/0x122
> [  180.732045]  [<ffffffff8024d864>] trace_hardirqs_on+0x125/0x150
> [  180.737964]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
> [  180.744222]  [<ffffffff8020963e>] system_call+0x7e/0x83
> [  180.749457] 
> [  190.731184] BUG: soft lockup detected on CPU#0!
> [  190.735704] 
> [  190.735705] Call Trace:
> [  190.739661]  <IRQ>  [<ffffffff8025d788>] softlockup_tick+0xd4/0xe9
> [  190.745886]  [<ffffffff8023bc57>] run_local_timers+0x13/0x15
> [  190.751555]  [<ffffffff8023bf37>] update_process_times+0x4c/0x78
> [  190.751561]  [<ffffffff802181d0>] smp_local_timer_interrupt+0x34/0x51
> [  190.751566]  [<ffffffff80218966>] smp_apic_timer_interrupt+0x43/0x5d
> [  190.751571]  [<ffffffff8020a31b>] apic_timer_interrupt+0x6b/0x70
> [  190.751577]  [<ffffffff80533e2e>] _spin_unlock_irqrestore+0x3f/0x69
> [  190.751582]  [<ffffffff80533e31>] _spin_unlock_irqrestore+0x42/0x69
> [  190.751587]  [<ffffffff804ba219>] skb_queue_tail+0x41/0x49
> [  190.751590]  [<ffffffff804b990e>] sock_queue_rcv_skb+0xe2/0x11c
> [  190.751595]  [<ffffffff804f440e>] udp_queue_rcv_skb+0xb6/0x180
> [  190.751599]  [<ffffffff804f492e>] __udp4_lib_rcv+0x456/0x594
> [  190.751603]  [<ffffffff804f4a7e>] udp_rcv+0x12/0x14
> [  190.751609]  [<ffffffff804d5572>] ip_local_deliver+0xca/0x171
> [  190.751613]  [<ffffffff804d5b28>] ip_rcv+0x424/0x464
> [  190.751617]  [<ffffffff804bf912>] netif_receive_skb+0x25a/0x30f
> [  190.751621]  [<ffffffff804c182c>] process_backlog+0xab/0x10f
> [  190.751625]  [<ffffffff804c1acc>] net_rx_action+0xbb/0x254
> [  190.751630]  [<ffffffff80237cb5>] __do_softirq+0x5e/0xe2
> [  190.751634]  [<ffffffff8020a86c>] call_softirq+0x1c/0x28
> [  190.751638]  [<ffffffff8020bcd2>] do_softirq+0x39/0x9f
> [  190.751642]  [<ffffffff80237c4b>] irq_exit+0x45/0x51
> [  190.751645]  [<ffffffff8020be7b>] do_IRQ+0x143/0x168
> [  190.751649]  [<ffffffff80209b86>] ret_from_intr+0x0/0xf
> [  190.751652]  <EOI>  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
> [  190.751660]  [<ffffffff8028391c>] kfree+0x204/0x216
> [  190.751664]  [<ffffffff8028391f>] kfree+0x207/0x216
> [  190.751669]  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
> [  190.751672]  [<ffffffff804bb02c>] kfree_skbmem+0x11/0x7e
> [  190.751676]  [<ffffffff804bb13d>] __kfree_skb+0xa4/0xa9
> [  190.751680]  [<ffffffff804bb16c>] kfree_skb+0x2a/0x2c
> [  190.751684]  [<ffffffff804bd07d>] skb_free_datagram+0xc/0xe
> [  190.751688]  [<ffffffff804f5649>] udp_recvmsg+0x1e1/0x25f
> [  190.751695]  [<ffffffff804b725e>] sock_common_recvmsg+0x32/0x47
> [  190.751699]  [<ffffffff804b5d7d>] sock_recvmsg+0xe5/0xfe
> [  190.751703]  [<ffffffff8024e84b>] __lock_acquire+0xb4a/0xbde
> [  190.751709]  [<ffffffff802464bd>] autoremove_wake_function+0x0/0x38
> [  190.751713]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
> [  190.751717]  [<ffffffff804bb095>] kfree_skbmem+0x7a/0x7e
> [  190.751721]  [<ffffffff80209be0>] restore_args+0x0/0x30
> [  190.751727]  [<ffffffff80338e30>] copy_user_generic_string+0x0/0x40
> [  190.751731]  [<ffffffff804b6b64>] sys_recvfrom+0xce/0x122
> [  190.751736]  [<ffffffff8024d864>] trace_hardirqs_on+0x125/0x150
> [  190.751740]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
> [  190.751745]  [<ffffffff8020963e>] system_call+0x7e/0x83
> [  190.751749] 
> [  200.738822] BUG: soft lockup detected on CPU#0!
> [  200.743364] 
> [  200.743364] Call Trace:
> [  200.747304]  <IRQ>  [<ffffffff8025d788>] softlockup_tick+0xd4/0xe9
> [  200.753531]  [<ffffffff8023bc57>] run_local_timers+0x13/0x15
> [  200.759188]  [<ffffffff8023bf37>] update_process_times+0x4c/0x78
> [  200.765189]  [<ffffffff802181d0>] smp_local_timer_interrupt+0x34/0x51
> [  200.771634]  [<ffffffff80218966>] smp_apic_timer_interrupt+0x43/0x5d
> [  200.777987]  [<ffffffff8020a31b>] apic_timer_interrupt+0x6b/0x70
> [  200.783997]  [<ffffffff80533e2e>] _spin_unlock_irqrestore+0x3f/0x69
> [  200.790261]  [<ffffffff80533e31>] _spin_unlock_irqrestore+0x42/0x69
> [  200.796519]  [<ffffffff804ba219>] skb_queue_tail+0x41/0x49
> [  200.802004]  [<ffffffff804b990e>] sock_queue_rcv_skb+0xe2/0x11c
> [  200.807925]  [<ffffffff804f440e>] udp_queue_rcv_skb+0xb6/0x180
> [  200.813757]  [<ffffffff804f492e>] __udp4_lib_rcv+0x456/0x594
> [  200.819401]  [<ffffffff804f4a7e>] udp_rcv+0x12/0x14
> [  200.824294]  [<ffffffff804d5572>] ip_local_deliver+0xca/0x171
> [  200.830030]  [<ffffffff804d5b28>] ip_rcv+0x424/0x464
> [  200.835003]  [<ffffffff804bf912>] netif_receive_skb+0x25a/0x30f
> [  200.840919]  [<ffffffff804c182c>] process_backlog+0xab/0x10f
> [  200.846582]  [<ffffffff804c1acc>] net_rx_action+0xbb/0x254
> [  200.852070]  [<ffffffff80237cb5>] __do_softirq+0x5e/0xe2
> [  200.857375]  [<ffffffff8020a86c>] call_softirq+0x1c/0x28
> [  200.862680]  [<ffffffff8020bcd2>] do_softirq+0x39/0x9f
> [  200.867830]  [<ffffffff80237c4b>] irq_exit+0x45/0x51
> [  200.872788]  [<ffffffff8020be7b>] do_IRQ+0x143/0x168
> [  200.877748]  [<ffffffff80209b86>] ret_from_intr+0x0/0xf
> [  200.882977]  <EOI>  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
> [  200.889287]  [<ffffffff8028391c>] kfree+0x204/0x216
> [  200.894168]  [<ffffffff8028391f>] kfree+0x207/0x216
> [  200.899042]  [<ffffffff804bb256>] skb_release_data+0x95/0x9a
> [  200.904685]  [<ffffffff804bb02c>] kfree_skbmem+0x11/0x7e
> [  200.909999]  [<ffffffff804bb13d>] __kfree_skb+0xa4/0xa9
> [  200.915220]  [<ffffffff804bb16c>] kfree_skb+0x2a/0x2c
> [  200.920279]  [<ffffffff804bd07d>] skb_free_datagram+0xc/0xe
> [  200.925844]  [<ffffffff804f5649>] udp_recvmsg+0x1e1/0x25f
> [  200.931249]  [<ffffffff804b725e>] sock_common_recvmsg+0x32/0x47
> [  200.937183]  [<ffffffff804b5d7d>] sock_recvmsg+0xe5/0xfe
> [  200.942490]  [<ffffffff8024e84b>] __lock_acquire+0xb4a/0xbde
> [  200.948150]  [<ffffffff802464bd>] autoremove_wake_function+0x0/0x38
> [  200.954417]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
> [  200.960670]  [<ffffffff804bb095>] kfree_skbmem+0x7a/0x7e
> [  200.965984]  [<ffffffff80209be0>] restore_args+0x0/0x30
> [  200.971215]  [<ffffffff80338e30>] copy_user_generic_string+0x0/0x40
> [  200.977480]  [<ffffffff804b6b64>] sys_recvfrom+0xce/0x122
> [  200.982881]  [<ffffffff8024d864>] trace_hardirqs_on+0x125/0x150
> [  200.988791]  [<ffffffff805333ad>] trace_hardirqs_on_thunk+0x35/0x37
> [  200.995059]  [<ffffffff8020963e>] system_call+0x7e/0x83
>
> 2.6.18-5-xen
> ==================================================
>
> BUG: soft lockup detected on CPU#0!
>
> Call Trace:
>  <IRQ>  [<ffffffff802a76d8>] softlockup_tick+0xdb/0xed
>  [<ffffffff8026ba8c>] timer_interrupt+0x396/0x3f2
>  [<ffffffff80210a87>] handle_IRQ_event+0x2d/0x60
>  [<ffffffff802a7a17>] __do_IRQ+0xa4/0x105
>  [<ffffffff802699cf>] do_IRQ+0xe7/0xf5
>  [<ffffffff8038dede>] evtchn_do_upcall+0x86/0xe0
>  [<ffffffff8025cbfe>] do_hypervisor_callback+0x1e/0x2c
>  [<ffffffff8847b58b>] :ixgbe:ixgbe_clean_rx_irq+0x16b/0xa40
>  [<ffffffff8847abb7>] :ixgbe:ixgbe_clean_tx_irq+0xe7/0x330
>  [<ffffffff8847bf4d>] :ixgbe:ixgbe_intr+0xed/0x220
>  [<ffffffff80210a87>] handle_IRQ_event+0x2d/0x60
>  [<ffffffff802a7a17>] __do_IRQ+0xa4/0x105
>  [<ffffffff802699cf>] do_IRQ+0xe7/0xf5
>  [<ffffffff8038dede>] evtchn_do_upcall+0x86/0xe0
>  [<ffffffff8025cbfe>] do_hypervisor_callback+0x1e/0x2c
>  [<ffffffff80226aac>] tcp_v4_rcv+0x6bc/0xa59
>  [<ffffffff802268e9>] tcp_v4_rcv+0x4f9/0xa59
>  [<ffffffff8025cbfe>] do_hypervisor_callback+0x1e/0x2c
>  [<ffffffff8023463b>] ip_local_deliver+0x19d/0x263
>  [<ffffffff8023591a>] ip_rcv+0x49c/0x4df
>  [<ffffffff8021fe67>] netif_receive_skb+0x361/0x3df
>  [<ffffffff802307e3>] process_backlog+0x96/0xff
>  [<ffffffff8020c5ca>] net_rx_action+0xa8/0x1b4
>  [<ffffffff80211ed3>] __do_softirq+0x62/0xdd
>  [<ffffffff8025d0cc>] call_softirq+0x1c/0x28
>  <EOI>  [<ffffffff80269b59>] do_softirq+0x31/0x98
>  [<ffffffff8028714b>] local_bh_enable_ip+0x48/0x59
>  [<ffffffff8021cde4>] tcp_recvmsg+0x9db/0xaf0
>  [<ffffffff80231b2b>] sock_common_recvmsg+0x2d/0x42
>  [<ffffffff8023066b>] sock_recvmsg+0x101/0x120
>  [<ffffffff8029448d>] autoremove_wake_function+0x0/0x2e
>  [<ffffffff80246001>] sprintf+0x51/0x59
>  [<ffffffff8022fcfe>] dev_queue_xmit+0x2f2/0x313
>  [<ffffffff8022b25c>] local_bh_enable+0x9/0xa4
>  [<ffffffff8023356b>] lock_sock+0xa7/0xb2
>  [<ffffffff80260711>] _spin_lock_bh+0x9/0x14
>  [<ffffffff80230e57>] release_sock+0x13/0xaa
>  [<ffffffff8022b25c>] local_bh_enable+0x9/0xa4
>  [<ffffffff8023356b>] lock_sock+0xa7/0xb2
>  [<ffffffff8023af7b>] d_instantiate+0x4a/0x82
>  [<ffffffff802408aa>] d_rehash+0x21/0x34
>  [<ffffffff8022b16f>] sys_recvfrom+0xd4/0x137
>  [<ffffffff802a67f9>] audit_syscall_exit+0x2b/0x2ec
>  [<ffffffff8025c621>] tracesys+0xa7/0xb2
>
> BUG: soft lockup detected on CPU#0!
>
> Call Trace:
>  <IRQ>  [<ffffffff802a76d8>] softlockup_tick+0xdb/0xed
>  [<ffffffff8026ba8c>] timer_interrupt+0x396/0x3f2
>  [<ffffffff80210a87>] handle_IRQ_event+0x2d/0x60
>  [<ffffffff802a7a17>] __do_IRQ+0xa4/0x105
>  [<ffffffff802699cf>] do_IRQ+0xe7/0xf5
>  [<ffffffff8038dede>] evtchn_do_upcall+0x86/0xe0
>  [<ffffffff8025cbfe>] do_hypervisor_callback+0x1e/0x2c
>  [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
>  [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
>  [<ffffffff8038d649>] force_evtchn_callback+0xa/0xb
>  [<ffffffff8020ab34>] kmem_cache_alloc+0x62/0x6d
>  [<ffffffff802350a4>] alloc_skb_from_cache+0x52/0x13c
>  [<ffffffff803f183f>] __netdev_alloc_skb+0x12/0x2d
>  [<ffffffff8847b31b>] :ixgbe:ixgbe_alloc_rx_buffers+0xfb/0x200
>  [<ffffffff8847bcd2>] :ixgbe:ixgbe_clean_rx_irq+0x8b2/0xa40
>  [<ffffffff8847aac4>] :ixgbe:ixgbe_unmap_and_free_tx_resource+0x44/0x50
>  [<ffffffff8847bf4d>] :ixgbe:ixgbe_intr+0xed/0x220
>  [<ffffffff80210a87>] handle_IRQ_event+0x2d/0x60
>  [<ffffffff802a7a17>] __do_IRQ+0xa4/0x105
>  [<ffffffff802699cf>] do_IRQ+0xe7/0xf5
>  [<ffffffff80270394>] xen_send_IPI_mask+0xa5/0xaa
>  [<ffffffff8038dede>] evtchn_do_upcall+0x86/0xe0
>  [<ffffffff8026fa43>] smp_send_reschedule+0x4b/0x50
>  [<ffffffff8025cbfe>] do_hypervisor_callback+0x1e/0x2c
>  [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
>  [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
>  [<ffffffff8023dcca>] lock_timer_base+0x1b/0x3c
>  [<ffffffff8038d649>] force_evtchn_callback+0xa/0xb
>  [<ffffffff8021bf22>] __mod_timer+0xb0/0xbe
>  [<ffffffff80253b8d>] sk_reset_timer+0xf/0x19
>  [<ffffffff80226a6f>] tcp_v4_rcv+0x67f/0xa59
>  [<ffffffff8025e499>] __sched_text_start+0x2d9/0x97b
>  [<ffffffff8023463b>] ip_local_deliver+0x19d/0x263
>  [<ffffffff8023591a>] ip_rcv+0x49c/0x4df
>  [<ffffffff8021fe67>] netif_receive_skb+0x361/0x3df
>  [<ffffffff802307e3>] process_backlog+0x96/0xff
>  [<ffffffff8020622a>] hypercall_page+0x22a/0x1000
>  [<ffffffff8020c5ca>] net_rx_action+0xa8/0x1b4
>  [<ffffffff80211ed3>] __do_softirq+0x62/0xdd
>  [<ffffffff8025d0cc>] call_softirq+0x1c/0x28
>  <EOI>  [<ffffffff80269b59>] do_softirq+0x31/0x98
>  [<ffffffff8022b2e6>] local_bh_enable+0x93/0xa4
>  [<ffffffff8025308f>] __tcp_checksum_complete_user+0x19/0x2c
>  [<ffffffff8021aeb2>] tcp_rcv_established+0x45c/0x917
>  [<ffffffff8023b449>] tcp_v4_do_rcv+0x2a/0x300
>  [<ffffffff80230e98>] release_sock+0x54/0xaa
>  [<ffffffff8021cde4>] tcp_recvmsg+0x9db/0xaf0
>  [<ffffffff80231b2b>] sock_common_recvmsg+0x2d/0x42
>  [<ffffffff8023066b>] sock_recvmsg+0x101/0x120
>  [<ffffffff8029448d>] autoremove_wake_function+0x0/0x2e
>  [<ffffffff80246001>] sprintf+0x51/0x59
>  [<ffffffff8022fcfe>] dev_queue_xmit+0x2f2/0x313
>  [<ffffffff8022b25c>] local_bh_enable+0x9/0xa4
>  [<ffffffff8023356b>] lock_sock+0xa7/0xb2
>  [<ffffffff80260711>] _spin_lock_bh+0x9/0x14
>  [<ffffffff80230e57>] release_sock+0x13/0xaa
>  [<ffffffff8022b25c>] local_bh_enable+0x9/0xa4
>  [<ffffffff8023356b>] lock_sock+0xa7/0xb2
>  [<ffffffff8023af7b>] d_instantiate+0x4a/0x82
>  [<ffffffff802408aa>] d_rehash+0x21/0x34
>  [<ffffffff8022b16f>] sys_recvfrom+0xd4/0x137
>  [<ffffffff803ed57c>] move_addr_to_user+0x5d/0x78
>  [<ffffffff803ed641>] sys_getpeername+0x9f/0xb5
>  [<ffffffff8025c621>] tracesys+0xa7/0xb2
>
>
>   


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-27 23:45         ` Matheos Worku
@ 2008-03-28  0:02           ` David Miller
  2008-03-28  0:19             ` Matheos Worku
  0 siblings, 1 reply; 36+ messages in thread
From: David Miller @ 2008-03-28  0:02 UTC (permalink / raw)
  To: Matheos.Worku; +Cc: jesse.brandeburg, jarkao2, netdev

From: Matheos Worku <Matheos.Worku@Sun.COM>
Date: Thu, 27 Mar 2008 16:45:06 -0700

> Brandeburg, Jesse wrote:
> > Jarek Poplawski wrote:
> >   
> >> On Wed, Mar 26, 2008 at 01:26:00PM -0700, Matheos Worku wrote:
> >> ...
> >>     
> >>> nsn57-110 login: BUG: soft lockup - CPU#2 stuck for 11s! ... Call
> >>> Trace: [<ffffffff803ef5f6>] __skb_clone+0x24/0xdc
> >>> [<ffffffff803f152e>] skb_realloc_headroom+0x30/0x63
> >>> [<ffffffff882edd40>] :niu:niu_start_xmit+0x114/0x5af
> >>> [<ffffffff80221995>] gart_map_single+0x0/0x70
> >>> [<ffffffff803f5e2b>] dev_hard_start_xmit+0x1d2/0x246 ...
> >>>       
> >> Maybe I'm wrong with this again, but I wonder about this
> >> gart_map_single on almost all traces, and probably not supposed to be
> >> seen here. Did you try with some memory re-config/debugging?
> >>     
> >
> > I have some more examples of this but with the ixgbe driver.  We are
> > running heavy bidirectional stress with multiple rx (non-napi, yeah I
> > know) interrupts by default (and userspace irqbalance is probably on,
> > I'll have the lab try it without)
> >   
> 
> I have seen the lockup on kernels 2.6.18 and newer mostly on TX traffic. 
> I have seen it on another 10G driver (off the tree niu driver sibling, 
> nxge).  The nxge driver doesn't use any TX interrupts and I have seen it 
> with UDP TX, irqbalance disabled, with no irq activity at all.  some 
> example traces included.

Interesting.

Are you running uperf in a way such that there are multiple
processors doing TX's in parallel?  That might be a clue.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28  0:02           ` David Miller
@ 2008-03-28  0:19             ` Matheos Worku
  2008-03-28  0:34               ` David Miller
  0 siblings, 1 reply; 36+ messages in thread
From: Matheos Worku @ 2008-03-28  0:19 UTC (permalink / raw)
  To: David Miller; +Cc: jesse.brandeburg, jarkao2, netdev

David Miller wrote:
> From: Matheos Worku <Matheos.Worku@Sun.COM>
> Date: Thu, 27 Mar 2008 16:45:06 -0700
>
>   
>> Brandeburg, Jesse wrote:
>>     
>>> Jarek Poplawski wrote:
>>>   
>>>       
>>>> On Wed, Mar 26, 2008 at 01:26:00PM -0700, Matheos Worku wrote:
>>>> ...
>>>>     
>>>>         
>>>>> nsn57-110 login: BUG: soft lockup - CPU#2 stuck for 11s! ... Call
>>>>> Trace: [<ffffffff803ef5f6>] __skb_clone+0x24/0xdc
>>>>> [<ffffffff803f152e>] skb_realloc_headroom+0x30/0x63
>>>>> [<ffffffff882edd40>] :niu:niu_start_xmit+0x114/0x5af
>>>>> [<ffffffff80221995>] gart_map_single+0x0/0x70
>>>>> [<ffffffff803f5e2b>] dev_hard_start_xmit+0x1d2/0x246 ...
>>>>>       
>>>>>           
>>>> Maybe I'm wrong with this again, but I wonder about this
>>>> gart_map_single on almost all traces, and probably not supposed to be
>>>> seen here. Did you try with some memory re-config/debugging?
>>>>     
>>>>         
>>> I have some more examples of this but with the ixgbe driver.  We are
>>> running heavy bidirectional stress with multiple rx (non-napi, yeah I
>>> know) interrupts by default (and userspace irqbalance is probably on,
>>> I'll have the lab try it without)
>>>   
>>>       
>> I have seen the lockup on kernels 2.6.18 and newer mostly on TX traffic. 
>> I have seen it on another 10G driver (off the tree niu driver sibling, 
>> nxge).  The nxge driver doesn't use any TX interrupts and I have seen it 
>> with UDP TX, irqbalance disabled, with no irq activity at all.  some 
>> example traces included.
>>     
>
> Interesting.
>
> Are you running uperf in a way such that there are multiple
> processors doing TX's in parallel?  That might be a clue.
>   
Dave,
Actually I am running a version of the nxge driver which uses only one 
TX ring, no LLTX enabled so the driver does single threaded TX. On the 
other hand, uperf (or iperf, netperf ) is running multiple TX 
connections in parallel and the connections are bound on multiple 
processors, hence they are running in parallel.

Regards
Matheos


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28  0:19             ` Matheos Worku
@ 2008-03-28  0:34               ` David Miller
  2008-03-28  1:22                 ` Herbert Xu
  0 siblings, 1 reply; 36+ messages in thread
From: David Miller @ 2008-03-28  0:34 UTC (permalink / raw)
  To: Matheos.Worku; +Cc: jesse.brandeburg, jarkao2, netdev, herbert, hadi

From: Matheos Worku <Matheos.Worku@Sun.COM>
Date: Thu, 27 Mar 2008 17:19:42 -0700

> Actually I am running a version of the nxge driver which uses only one 
> TX ring, no LLTX enabled so the driver does single threaded TX.

Ok.

> On the other hand, uperf (or iperf, netperf ) is running multiple TX
> connections in parallel and the connections are bound on multiple
> processors, hence they are running in parallel.

Yes, this is what I was interested in.

I think I know what's wrong.

If one cpu gets into the "qdisc remove, give to device" loop, other
cpus will simply add to the qdisc and that first cpu will do the all
of the TX processing.

This helps performance, but in your case it is clear that if the
device is fast enough and there are enough other cpus generating TX
traffic, it is quite trivial to get a cpu wedged there and never exit.

The code in question is net/sched/sch_generic.c:__qdisc_run(), it just
loops there until the device TX fills up or there are no more packets
in the qdisc queue.

qdisc_run() (in include/linux/pkt_sched.h) sets
__LINK_STATE_QDISC_RUNNING to tell other cpus that there is a cpu
processing the queue inside of __qdisc_run().

net/core/dev.c:dev_queue_xmit() then goes:

	if (q->enqueue) {
		/* Grab device queue */
		spin_lock(&dev->queue_lock);
		q = dev->qdisc;
		if (q->enqueue) {
			/* reset queue_mapping to zero */
			skb_set_queue_mapping(skb, 0);
			rc = q->enqueue(skb, q);
			qdisc_run(dev);
			spin_unlock(&dev->queue_lock);

			rc = rc == NET_XMIT_BYPASS ? NET_XMIT_SUCCESS : rc;
			goto out;
		}
		spin_unlock(&dev->queue_lock);
	}

The first cpu will get into __qdisc_run(), but the other
ones will just q->enqueue() and exit since the first cpu
has indicated it is processing the qdisc.

I'm not sure how we should fix this at the moment, we want
to keep the behavior but on the other hand we need to
break out of this so we don't get stuck here for too long.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28  0:34               ` David Miller
@ 2008-03-28  1:22                 ` Herbert Xu
  2008-03-28  1:38                   ` David Miller
  2008-03-28  1:58                   ` Matheos Worku
  0 siblings, 2 replies; 36+ messages in thread
From: Herbert Xu @ 2008-03-28  1:22 UTC (permalink / raw)
  To: David Miller; +Cc: Matheos.Worku, jesse.brandeburg, jarkao2, netdev, hadi

On Thu, Mar 27, 2008 at 05:34:18PM -0700, David Miller wrote:
>
> The first cpu will get into __qdisc_run(), but the other
> ones will just q->enqueue() and exit since the first cpu
> has indicated it is processing the qdisc.

Indeed.  Since I created the problem it's only fair that I get
to fix it too :)

[NET]: Add preemption point in qdisc_run

The qdisc_run loop is currently unbounded and runs entirely
in a softirq.  This is bad as it may create an unbounded softirq
run.

This patch fixes this by calling need_resched and breaking out
if necessary.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Thanks,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index 10b5c08..80d53dd 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -187,6 +187,10 @@ void __qdisc_run(struct net_device *dev)
 	do {
 		if (!qdisc_restart(dev))
 			break;
+		if (need_resched()) {
+			netif_schedule(dev);
+			break;
+		}
 	} while (!netif_queue_stopped(dev));
 
 	clear_bit(__LINK_STATE_QDISC_RUNNING, &dev->state);

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28  1:22                 ` Herbert Xu
@ 2008-03-28  1:38                   ` David Miller
  2008-03-28 10:29                     ` Herbert Xu
  2008-03-28  1:58                   ` Matheos Worku
  1 sibling, 1 reply; 36+ messages in thread
From: David Miller @ 2008-03-28  1:38 UTC (permalink / raw)
  To: herbert; +Cc: Matheos.Worku, jesse.brandeburg, jarkao2, netdev, hadi

From: Herbert Xu <herbert@gondor.apana.org.au>
Date: Fri, 28 Mar 2008 09:22:34 +0800

> @@ -187,6 +187,10 @@ void __qdisc_run(struct net_device *dev)
>  	do {
>  		if (!qdisc_restart(dev))
>  			break;
> +		if (need_resched()) {
> +			netif_schedule(dev);
> +			break;
> +		}
>  	} while (!netif_queue_stopped(dev));
>  
>  	clear_bit(__LINK_STATE_QDISC_RUNNING, &dev->state);

This runs from softirqs, the local thread's scheduling
state is updated from timers which also run from softirqs,
so this need_resched() test won't work.

Probably you'll need something similar to the ->poll()
NAPI breakout logic, which uses 2 jiffies as the breakout
point.  (it uses 2, because we could be very close to
transitioning to the next jiffie and thus don't want
to breakout prematurely in that case)

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28  1:22                 ` Herbert Xu
  2008-03-28  1:38                   ` David Miller
@ 2008-03-28  1:58                   ` Matheos Worku
  2008-03-28 10:33                     ` jamal
  2008-03-28 10:38                     ` Herbert Xu
  1 sibling, 2 replies; 36+ messages in thread
From: Matheos Worku @ 2008-03-28  1:58 UTC (permalink / raw)
  To: Herbert Xu; +Cc: David Miller, jesse.brandeburg, jarkao2, netdev, hadi

Herbert Xu wrote:
> On Thu, Mar 27, 2008 at 05:34:18PM -0700, David Miller wrote:
>   
>> The first cpu will get into __qdisc_run(), but the other
>> ones will just q->enqueue() and exit since the first cpu
>> has indicated it is processing the qdisc.
>>     
>
> Indeed.  Since I created the problem it's only fair that I get
> to fix it too :)
>
> [NET]: Add preemption point in qdisc_run
>
> The qdisc_run loop is currently unbounded and runs entirely
> in a softirq.  This is bad as it may create an unbounded softirq
> run.
>
> This patch fixes this by calling need_resched and breaking out
> if necessary.
>
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
>
> Thanks,
>   
Great.

In general, while the TX serialization  improves performance in terms to 
lock contention, wouldn't it reduce throughput since only one guy is 
doing the actual TX at any given time.  Wondering if it would be 
worthwhile to have an  enable/disable option specially for multi queue TX.

Regards
Matheos


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28  1:38                   ` David Miller
@ 2008-03-28 10:29                     ` Herbert Xu
  2008-03-28 10:56                       ` Ingo Molnar
  0 siblings, 1 reply; 36+ messages in thread
From: Herbert Xu @ 2008-03-28 10:29 UTC (permalink / raw)
  To: David Miller
  Cc: Matheos.Worku, jesse.brandeburg, jarkao2, netdev, hadi,
	Ingo Molnar

On Thu, Mar 27, 2008 at 06:38:44PM -0700, David Miller wrote:
>
> This runs from softirqs, the local thread's scheduling
> state is updated from timers which also run from softirqs,
> so this need_resched() test won't work.

I had a trawl through the scheduler/timer code and it appears
that even with softirqs disabled we should able to set the flag
through this call chain (on x86-32):

timer_interrupt => do_timer_interrupt_hook => tick_handle_periodic =>
tick_periodic => update_process_times => scheduler_tick

Ingo, could you confirm that the scheduler is capable of setting
need_resched even with BH disabled?

Thanks,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28  1:58                   ` Matheos Worku
@ 2008-03-28 10:33                     ` jamal
  2008-03-28 17:00                       ` Matheos Worku
  2008-03-28 10:38                     ` Herbert Xu
  1 sibling, 1 reply; 36+ messages in thread
From: jamal @ 2008-03-28 10:33 UTC (permalink / raw)
  To: Matheos Worku; +Cc: Herbert Xu, David Miller, jesse.brandeburg, jarkao2, netdev

On Thu, 2008-27-03 at 18:58 -0700, Matheos Worku wrote:

> In general, while the TX serialization  improves performance in terms to 
> lock contention, wouldn't it reduce throughput since only one guy is 
> doing the actual TX at any given time.  Wondering if it would be 
> worthwhile to have an  enable/disable option specially for multi queue TX.

Empirical evidence so far says at some point the bottleneck is going to
be the wire i.e modern CPUs are "fast enough" that sooner than later
they will fill up the DMA ring of transmitting driver and go back to
doing other things. 
It is hard to create the condition you seem to have come across. I had
access to a dual core opteron but found it very hard with parallel UDP
sessions to keep the TX CPU locked in that region (while the other 3
were busy pumping packets). My folly could have been that i had a Gige
wire and maybe a 10G would have recreated the condition. 
If you can reproduce this at will, can you try to reduce the number of
sending TX u/iperfs and see when it begins to happen?
Are all the iperfs destined out of the same netdevice?

[Typically the TX path on the driver side is inefficient either because
of coding (ex: unnecessary locks) or expensive IO. But this has not
mattered much thus far (given fast enough CPUs).
It all could be improved by reducing the per packet operations the
driver incurs -  as an example, the CPU (to the driver) could batch a
set of packet to the device then kick the device DMA once for the batch
etc.]

cheers,
jamal


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28  1:58                   ` Matheos Worku
  2008-03-28 10:33                     ` jamal
@ 2008-03-28 10:38                     ` Herbert Xu
  2008-03-28 13:38                       ` Jarek Poplawski
  1 sibling, 1 reply; 36+ messages in thread
From: Herbert Xu @ 2008-03-28 10:38 UTC (permalink / raw)
  To: Matheos Worku; +Cc: David Miller, jesse.brandeburg, jarkao2, netdev, hadi

On Thu, Mar 27, 2008 at 06:58:18PM -0700, Matheos Worku wrote:
>
> In general, while the TX serialization  improves performance in terms to 
> lock contention, wouldn't it reduce throughput since only one guy is 
> doing the actual TX at any given time.  Wondering if it would be 
> worthwhile to have an  enable/disable option specially for multi queue TX.

Unless you have a truly lockless driver where two CPUs can transmit
at the same time then regardless of what we do only one CPU can
transmit at a time.

Given that premise, we might as well let one CPU transmit as much
as possible since moving to another CPU after each packet is going
to bounce a lot more than just the spin lock and that is going to
be expensive.

Of course getting stuck in that loop forever when there is other
work to be done (such as running the watchdog :) is bad.  But
hopefully that's what this patch will fix.

Thanks,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 10:29                     ` Herbert Xu
@ 2008-03-28 10:56                       ` Ingo Molnar
  2008-03-28 11:06                         ` Herbert Xu
  0 siblings, 1 reply; 36+ messages in thread
From: Ingo Molnar @ 2008-03-28 10:56 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Miller, Matheos.Worku, jesse.brandeburg, jarkao2, netdev,
	hadi


* Herbert Xu <herbert@gondor.apana.org.au> wrote:

> > This runs from softirqs, the local thread's scheduling state is 
> > updated from timers which also run from softirqs, so this 
> > need_resched() test won't work.
> 
> I had a trawl through the scheduler/timer code and it appears that 
> even with softirqs disabled we should able to set the flag through 
> this call chain (on x86-32):
> 
> timer_interrupt => do_timer_interrupt_hook => tick_handle_periodic => 
> tick_periodic => update_process_times => scheduler_tick
> 
> Ingo, could you confirm that the scheduler is capable of setting 
> need_resched even with BH disabled?

hm, what's the context of this discussion? The call chain looks ok, 
that's how we preempt tasks from the timer tick. But other code besides 
the scheduler shouldnt do this.

	Ingo

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 10:56                       ` Ingo Molnar
@ 2008-03-28 11:06                         ` Herbert Xu
  2008-03-28 11:29                           ` Herbert Xu
  2008-03-28 14:09                           ` Ingo Molnar
  0 siblings, 2 replies; 36+ messages in thread
From: Herbert Xu @ 2008-03-28 11:06 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: David Miller, Matheos.Worku, jesse.brandeburg, jarkao2, netdev,
	hadi

On Fri, Mar 28, 2008 at 11:56:29AM +0100, Ingo Molnar wrote:
>
> hm, what's the context of this discussion? The call chain looks ok, 
> that's how we preempt tasks from the timer tick. But other code besides 
> the scheduler shouldnt do this.

The code under discussion is __qdisc_run from net/sched/sch_generic.c.

It runs with BH off from either process context or softirq context.
As it is it can keep running forever.  We were discussing adding
a need_resched check in there.  So the question is would need_resched
ever get updated while BH is disabled?

Anyway, I've just realised that even if it does get updated, we still
need a better bound to avoid starving other local softirq events so
this is probably moot.

Thanks,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 11:06                         ` Herbert Xu
@ 2008-03-28 11:29                           ` Herbert Xu
  2008-03-28 12:19                             ` jamal
  2008-03-28 23:25                             ` David Miller
  2008-03-28 14:09                           ` Ingo Molnar
  1 sibling, 2 replies; 36+ messages in thread
From: Herbert Xu @ 2008-03-28 11:29 UTC (permalink / raw)
  To: David S. Miller
  Cc: Ingo Molnar, Matheos.Worku, jesse.brandeburg, jarkao2, netdev,
	hadi

On Fri, Mar 28, 2008 at 07:06:21PM +0800, Herbert Xu wrote:
>
> Anyway, I've just realised that even if it does get updated, we still
> need a better bound to avoid starving other local softirq events so
> this is probably moot.

OK, since we don't really have any good ways of balancing softirq
events with each other, I've taken Dave's suggestion of checking
the jiffies as is done with NAPI.  I've kept the need_resched to
minimise the scheduling latency.

[NET]: Add preemption point in qdisc_run

The qdisc_run loop is currently unbounded and runs entirely
in a softirq.  This is bad as it may create an unbounded softirq
run.

This patch fixes this by calling need_resched and breaking out
if necessary.

It also adds a break out if the jiffies value changes since that
would indicate we've been transmitting for too long which starves
other softirqs.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
index 10b5c08..b741618 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -184,10 +184,22 @@ static inline int qdisc_restart(struct net_device *dev)
 
 void __qdisc_run(struct net_device *dev)
 {
-	do {
-		if (!qdisc_restart(dev))
+	unsigned long start_time = jiffies;
+
+	while (qdisc_restart(dev)) {
+		if (netif_queue_stopped(dev))
+			break;
+
+		/*
+		 * Postpone processing if
+		 * 1. another process needs the CPU;
+		 * 2. we've been doing it for too long.
+		 */
+		if (need_resched() || jiffies != start_time) {
+			netif_schedule(dev);
 			break;
-	} while (!netif_queue_stopped(dev));
+		}
+	}
 
 	clear_bit(__LINK_STATE_QDISC_RUNNING, &dev->state);
 }

^ permalink raw reply related	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 11:29                           ` Herbert Xu
@ 2008-03-28 12:19                             ` jamal
  2008-03-28 13:26                               ` Herbert Xu
  2008-03-28 23:25                             ` David Miller
  1 sibling, 1 reply; 36+ messages in thread
From: jamal @ 2008-03-28 12:19 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David S. Miller, Ingo Molnar, Matheos.Worku, jesse.brandeburg,
	jarkao2, netdev

On Fri, 2008-28-03 at 19:29 +0800, Herbert Xu wrote:

> OK, since we don't really have any good ways of balancing softirq
> events with each other, I've taken Dave's suggestion of checking
> the jiffies as is done with NAPI.  I've kept the need_resched to
> minimise the scheduling latency.

i think the need_resched would be effective.

**** heres something that has not yet resolved in my mind (even for the
NAPI case which was inherited from code that has been there forever).
Theres probably a very simple answer ;->
say we have two machines:
one faster and we decide HZ = 1000 meaning 1ms for a jiffy; the other
slower and we make HZ 100 i.e 10ms jiffy.
Logically, shouldnt the slower machine allocate less time running the
loop since it has less resources? in the above case it would spend 10
times more. 

cheers,
jamal


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 12:19                             ` jamal
@ 2008-03-28 13:26                               ` Herbert Xu
  2008-03-28 14:07                                 ` jamal
  2008-03-28 14:12                                 ` Ingo Molnar
  0 siblings, 2 replies; 36+ messages in thread
From: Herbert Xu @ 2008-03-28 13:26 UTC (permalink / raw)
  To: jamal
  Cc: David S. Miller, Ingo Molnar, Matheos.Worku, jesse.brandeburg,
	jarkao2, netdev

On Fri, Mar 28, 2008 at 08:19:19AM -0400, jamal wrote:
>
> **** heres something that has not yet resolved in my mind (even for the
> NAPI case which was inherited from code that has been there forever).
> Theres probably a very simple answer ;->
> say we have two machines:
> one faster and we decide HZ = 1000 meaning 1ms for a jiffy; the other
> slower and we make HZ 100 i.e 10ms jiffy.
> Logically, shouldnt the slower machine allocate less time running the
> loop since it has less resources? in the above case it would spend 10
> times more. 

I agree that using jiffies is a pretty coarse approximation of
proper scheduling.  However, in the absence of a better solution
we have to live with it.

Perhaps running these out of process context is the correct
approach.

Thanks,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 10:38                     ` Herbert Xu
@ 2008-03-28 13:38                       ` Jarek Poplawski
  2008-03-28 13:53                         ` Herbert Xu
  0 siblings, 1 reply; 36+ messages in thread
From: Jarek Poplawski @ 2008-03-28 13:38 UTC (permalink / raw)
  To: Herbert Xu; +Cc: Matheos Worku, David Miller, jesse.brandeburg, netdev, hadi

On Fri, Mar 28, 2008 at 06:38:09PM +0800, Herbert Xu wrote:
...
> Given that premise, we might as well let one CPU transmit as much
> as possible since moving to another CPU after each packet is going
> to bounce a lot more than just the spin lock and that is going to
> be expensive.

Considering this, I wonder why using this __LINK_STATE_QDISC_RUNNING
flag to control enqueuing as well would be a wrong idea? Wouldn't this
enforce pseudo affinity?

Regards,
Jarek P.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 13:38                       ` Jarek Poplawski
@ 2008-03-28 13:53                         ` Herbert Xu
  2008-03-28 14:39                           ` Jarek Poplawski
  0 siblings, 1 reply; 36+ messages in thread
From: Herbert Xu @ 2008-03-28 13:53 UTC (permalink / raw)
  To: Jarek Poplawski
  Cc: Matheos Worku, David Miller, jesse.brandeburg, netdev, hadi

On Fri, Mar 28, 2008 at 02:38:45PM +0100, Jarek Poplawski wrote:
> 
> Considering this, I wonder why using this __LINK_STATE_QDISC_RUNNING
> flag to control enqueuing as well would be a wrong idea? Wouldn't this
> enforce pseudo affinity?

Could you elaborate on how you intend to use it to control the
act of enqueueing?

Thanks,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 13:26                               ` Herbert Xu
@ 2008-03-28 14:07                                 ` jamal
  2008-03-28 14:12                                 ` Ingo Molnar
  1 sibling, 0 replies; 36+ messages in thread
From: jamal @ 2008-03-28 14:07 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David S. Miller, Ingo Molnar, Matheos.Worku, jesse.brandeburg,
	jarkao2, netdev

On Fri, 2008-28-03 at 21:26 +0800, Herbert Xu wrote:
> I agree that using jiffies is a pretty coarse approximation of
> proper scheduling.  However, in the absence of a better solution
> we have to live with it.

I know it works well enough and has for years; sure you could do better
but i wasnt questioning the solution - more than anything on my part
that was curiosity.

> Perhaps running these out of process context is the correct
> approach.

I saw something from Max Krasnyansky along those lines but havent quiet
followed it up. Should be interesting to see the effect over a large
types of workloads.

cheers,
jamal


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 11:06                         ` Herbert Xu
  2008-03-28 11:29                           ` Herbert Xu
@ 2008-03-28 14:09                           ` Ingo Molnar
  1 sibling, 0 replies; 36+ messages in thread
From: Ingo Molnar @ 2008-03-28 14:09 UTC (permalink / raw)
  To: Herbert Xu
  Cc: David Miller, Matheos.Worku, jesse.brandeburg, jarkao2, netdev,
	hadi


* Herbert Xu <herbert@gondor.apana.org.au> wrote:

> On Fri, Mar 28, 2008 at 11:56:29AM +0100, Ingo Molnar wrote:
> >
> > hm, what's the context of this discussion? The call chain looks ok, 
> > that's how we preempt tasks from the timer tick. But other code besides 
> > the scheduler shouldnt do this.
> 
> The code under discussion is __qdisc_run from net/sched/sch_generic.c.
> 
> It runs with BH off from either process context or softirq context. As 
> it is it can keep running forever.  We were discussing adding a 
> need_resched check in there.  So the question is would need_resched 
> ever get updated while BH is disabled?

yes, certainly - as long as the timer irq is allowed. (i.e. hardirqs are 
not disabled) The scheduler tick runs from hardirq context, not from 
softirq context. (that's how we can preempt softirq threads on the -rt 
kernel for example)

	Ingo

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 13:26                               ` Herbert Xu
  2008-03-28 14:07                                 ` jamal
@ 2008-03-28 14:12                                 ` Ingo Molnar
  1 sibling, 0 replies; 36+ messages in thread
From: Ingo Molnar @ 2008-03-28 14:12 UTC (permalink / raw)
  To: Herbert Xu
  Cc: jamal, David S. Miller, Matheos.Worku, jesse.brandeburg, jarkao2,
	netdev


* Herbert Xu <herbert@gondor.apana.org.au> wrote:

> I agree that using jiffies is a pretty coarse approximation of proper 
> scheduling.  However, in the absence of a better solution we have to 
> live with it.
> 
> Perhaps running these out of process context is the correct approach.

yes. Such anonymous work loops inside softirq context are a disaster to 
TCP determinism and a disaster to scheduling in general (the wrong guy 
gets credited with the overhead). Softirqs were a neat hack 10 years 
ago, now if we know the target task for some workload we should execute 
as much of the workload in that task's context as possible. (and even 
for stuff where we dont have a 'target task' - routing, filtering, etc. 
- it might be better to use kernel threads.)

	Ingo

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 13:53                         ` Herbert Xu
@ 2008-03-28 14:39                           ` Jarek Poplawski
  2008-03-28 14:56                             ` Herbert Xu
  0 siblings, 1 reply; 36+ messages in thread
From: Jarek Poplawski @ 2008-03-28 14:39 UTC (permalink / raw)
  To: Herbert Xu; +Cc: Matheos Worku, David Miller, jesse.brandeburg, netdev, hadi

On Fri, Mar 28, 2008 at 09:53:38PM +0800, Herbert Xu wrote:
> On Fri, Mar 28, 2008 at 02:38:45PM +0100, Jarek Poplawski wrote:
> > 
> > Considering this, I wonder why using this __LINK_STATE_QDISC_RUNNING
> > flag to control enqueuing as well would be a wrong idea? Wouldn't this
> > enforce pseudo affinity?
> 
> Could you elaborate on how you intend to use it to control the
> act of enqueueing?

Probably some backlog would be necessary, similarly to RX. The main
question is how much cache problem is such enqueuing from other CPUs.

Jarek P.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 14:39                           ` Jarek Poplawski
@ 2008-03-28 14:56                             ` Herbert Xu
  2008-03-28 15:29                               ` Jarek Poplawski
  0 siblings, 1 reply; 36+ messages in thread
From: Herbert Xu @ 2008-03-28 14:56 UTC (permalink / raw)
  To: Jarek Poplawski
  Cc: Matheos Worku, David Miller, jesse.brandeburg, netdev, hadi

On Fri, Mar 28, 2008 at 03:39:53PM +0100, Jarek Poplawski wrote:
> 
> Probably some backlog would be necessary, similarly to RX. The main

Sorry but I still don't understand how this would differ from
what we do now.  As it stands the packet would be queued for
later processing if another CPU is doing a qdisc run.

> question is how much cache problem is such enqueuing from other CPUs.

It's pretty bad actually.  In fact multiple TX queues isn't
going to be useful until we address this bottle-neck.

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 14:56                             ` Herbert Xu
@ 2008-03-28 15:29                               ` Jarek Poplawski
  2008-03-28 15:47                                 ` Jarek Poplawski
  2008-03-29  1:06                                 ` Herbert Xu
  0 siblings, 2 replies; 36+ messages in thread
From: Jarek Poplawski @ 2008-03-28 15:29 UTC (permalink / raw)
  To: Herbert Xu; +Cc: Matheos Worku, David Miller, jesse.brandeburg, netdev, hadi

On Fri, Mar 28, 2008 at 10:56:34PM +0800, Herbert Xu wrote:
> On Fri, Mar 28, 2008 at 03:39:53PM +0100, Jarek Poplawski wrote:
> > 
> > Probably some backlog would be necessary, similarly to RX. The main
> 
> Sorry but I still don't understand how this would differ from
> what we do now.  As it stands the packet would be queued for
> later processing if another CPU is doing a qdisc run.

But during this, now limited, time of qdisc_run() there is a contention
for queue_lock and probably some additional cache updating because of
this other enqueuing, which could be delayed especially if queue length
is above some level.

Cheers,
Jarek P.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 15:29                               ` Jarek Poplawski
@ 2008-03-28 15:47                                 ` Jarek Poplawski
  2008-03-29  1:06                                 ` Herbert Xu
  1 sibling, 0 replies; 36+ messages in thread
From: Jarek Poplawski @ 2008-03-28 15:47 UTC (permalink / raw)
  To: Herbert Xu; +Cc: Matheos Worku, David Miller, jesse.brandeburg, netdev, hadi

On Fri, Mar 28, 2008 at 04:29:53PM +0100, Jarek Poplawski wrote:
...
> But during this, now limited, time of qdisc_run() there is a contention
> for queue_lock and probably some additional cache updating because of
> this other enqueuing, which could be delayed especially if queue length
> is above some level.

...Hm... this would need some special treatment for RT traffic yet...

Jarek P.

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 10:33                     ` jamal
@ 2008-03-28 17:00                       ` Matheos Worku
  0 siblings, 0 replies; 36+ messages in thread
From: Matheos Worku @ 2008-03-28 17:00 UTC (permalink / raw)
  To: hadi; +Cc: Herbert Xu, David Miller, jesse.brandeburg, jarkao2, netdev

jamal wrote:
> On Thu, 2008-27-03 at 18:58 -0700, Matheos Worku wrote:
>
>   
>> In general, while the TX serialization  improves performance in terms to 
>> lock contention, wouldn't it reduce throughput since only one guy is 
>> doing the actual TX at any given time.  Wondering if it would be 
>> worthwhile to have an  enable/disable option specially for multi queue TX.
>>     
>
> Empirical evidence so far says at some point the bottleneck is going to
> be the wire i.e modern CPUs are "fast enough" that sooner than later
> they will fill up the DMA ring of transmitting driver and go back to
> doing other things. 
>   

> It is hard to create the condition you seem to have come across. I had access to a dual core opteron but found it very hard with parallel UDP
> sessions to keep the TX CPU locked in that region (while the other 3
> were busy pumping packets). My folly could have been that i had a Gige
> wire and maybe a 10G would have recreated the condition. 
> If you can reproduce this at will, can you try to reduce the number of
> sending TX u/iperfs and see when it begins to happen?
> Are all the iperfs destined out of the same netdevice?
>   
I am using 10G nic at this time. With the same driver, I haven't come 
across  the lockup on 1G nic though I haven't really tried to reproduce 
it.   Regarding the number of connection it takes to create the 
situation, I have noticed the lockup at 3 or more udp connections.  
Also, with TSO disabled, I have came across it with lots of TCP connections.


> [Typically the TX path on the driver side is inefficient either because
> of coding (ex: unnecessary locks) or expensive IO. But this has not
> mattered much thus far (given fast enough CPUs).
>   
That could be true  though oprofile is not providing obvious clues, 
alteast not yet.
> It all could be improved by reducing the per packet operations the
> driver incurs -  as an example, the CPU (to the driver) could batch a
> set of packet to the device then kick the device DMA once for the batch
> etc.]
>   
Regards
matheos

> cheers,
> jamal
>
>   


^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 11:29                           ` Herbert Xu
  2008-03-28 12:19                             ` jamal
@ 2008-03-28 23:25                             ` David Miller
  1 sibling, 0 replies; 36+ messages in thread
From: David Miller @ 2008-03-28 23:25 UTC (permalink / raw)
  To: herbert; +Cc: mingo, Matheos.Worku, jesse.brandeburg, jarkao2, netdev, hadi

From: Herbert Xu <herbert@gondor.apana.org.au>
Date: Fri, 28 Mar 2008 19:29:28 +0800

> [NET]: Add preemption point in qdisc_run
> 
> The qdisc_run loop is currently unbounded and runs entirely
> in a softirq.  This is bad as it may create an unbounded softirq
> run.
> 
> This patch fixes this by calling need_resched and breaking out
> if necessary.
> 
> It also adds a break out if the jiffies value changes since that
> would indicate we've been transmitting for too long which starves
> other softirqs.
> 
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Applied, and I'll queue this up for -stable, thanks!

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-28 15:29                               ` Jarek Poplawski
  2008-03-28 15:47                                 ` Jarek Poplawski
@ 2008-03-29  1:06                                 ` Herbert Xu
  2008-03-29  9:11                                   ` Jarek Poplawski
  1 sibling, 1 reply; 36+ messages in thread
From: Herbert Xu @ 2008-03-29  1:06 UTC (permalink / raw)
  To: Jarek Poplawski
  Cc: Matheos Worku, David Miller, jesse.brandeburg, netdev, hadi

On Fri, Mar 28, 2008 at 04:29:53PM +0100, Jarek Poplawski wrote:
>
> But during this, now limited, time of qdisc_run() there is a contention
> for queue_lock and probably some additional cache updating because of
> this other enqueuing, which could be delayed especially if queue length
> is above some level.

You mean delaying into a per-cpu queue? That sounds interesting.

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

^ permalink raw reply	[flat|nested] 36+ messages in thread

* Re: 2.6.24 BUG: soft lockup - CPU#X
  2008-03-29  1:06                                 ` Herbert Xu
@ 2008-03-29  9:11                                   ` Jarek Poplawski
  0 siblings, 0 replies; 36+ messages in thread
From: Jarek Poplawski @ 2008-03-29  9:11 UTC (permalink / raw)
  To: Herbert Xu; +Cc: Matheos Worku, David Miller, jesse.brandeburg, netdev, hadi

On Sat, Mar 29, 2008 at 09:06:10AM +0800, Herbert Xu wrote:
> On Fri, Mar 28, 2008 at 04:29:53PM +0100, Jarek Poplawski wrote:
> >
> > But during this, now limited, time of qdisc_run() there is a contention
> > for queue_lock and probably some additional cache updating because of
> > this other enqueuing, which could be delayed especially if queue length
> > is above some level.
> 
> You mean delaying into a per-cpu queue? That sounds interesting.

I mean any delaying could be necessary here. After rethinking it seems
to me this solution with the flag could be wrong even after current fix.

The owner of the flag has to give up queue_lock for some time, and
because of this its chances for regaining the lock are worse: other CPUs
could take it in a loop, winning the cache, and adding packets, which
are imediately dumped (or requeued).

So, it would make a kind of reverse lockup situation. Then, even normal
contention for both locks seems safer against such races: throughput
could be worse, but probably no such "(soft)lockup" risk.

Regards,
Jarek P.

^ permalink raw reply	[flat|nested] 36+ messages in thread

end of thread, other threads:[~2008-03-29  9:06 UTC | newest]

Thread overview: 36+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-26 16:46 2.6.24 BUG: soft lockup - CPU#X Matheos Worku
2008-03-26 17:31 ` Rick Jones
2008-03-26 20:14 ` Jarek Poplawski
2008-03-26 20:26   ` Matheos Worku
2008-03-26 21:46     ` Jarek Poplawski
2008-03-26 21:53       ` Jarek Poplawski
2008-03-27 10:33     ` Jarek Poplawski
2008-03-27 23:18       ` Brandeburg, Jesse
2008-03-27 23:45         ` Matheos Worku
2008-03-28  0:02           ` David Miller
2008-03-28  0:19             ` Matheos Worku
2008-03-28  0:34               ` David Miller
2008-03-28  1:22                 ` Herbert Xu
2008-03-28  1:38                   ` David Miller
2008-03-28 10:29                     ` Herbert Xu
2008-03-28 10:56                       ` Ingo Molnar
2008-03-28 11:06                         ` Herbert Xu
2008-03-28 11:29                           ` Herbert Xu
2008-03-28 12:19                             ` jamal
2008-03-28 13:26                               ` Herbert Xu
2008-03-28 14:07                                 ` jamal
2008-03-28 14:12                                 ` Ingo Molnar
2008-03-28 23:25                             ` David Miller
2008-03-28 14:09                           ` Ingo Molnar
2008-03-28  1:58                   ` Matheos Worku
2008-03-28 10:33                     ` jamal
2008-03-28 17:00                       ` Matheos Worku
2008-03-28 10:38                     ` Herbert Xu
2008-03-28 13:38                       ` Jarek Poplawski
2008-03-28 13:53                         ` Herbert Xu
2008-03-28 14:39                           ` Jarek Poplawski
2008-03-28 14:56                             ` Herbert Xu
2008-03-28 15:29                               ` Jarek Poplawski
2008-03-28 15:47                                 ` Jarek Poplawski
2008-03-29  1:06                                 ` Herbert Xu
2008-03-29  9:11                                   ` Jarek Poplawski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).